GND · Get Nick Done · agent skills + Python
Build agentic data apps that check themselves.
Inspired by the success of GSD (Get Shit Done) for traditional software development, GND is its lighter sibling, built specifically for agentic data apps.
Describe your domain once as an executable ontology: an ORM model of facts, rules and constraints. Your agent answers with structured plans and facts instead of prose, and GND verifies them against the model and reports exactly which rule failed.
Share and reuse ontologies with Apache Ossie
GND imports and exports Apache Ossie ontology files. Start a GND model from an ontology your team already uses, or share your GND model's business concepts and relationships with another team or tool.
See what GND carries across · Try it with the refunds model
How it works
01 / ONTOLOGY
State the rules once. Write them as an ORM model, model.orm.yaml. An agent
drafts it with you through Halpin's conceptual schema design procedure, and every
rule reads back as a sentence you can confirm.
02 / STRUCTURED OUTPUT
The agent answers in facts. It replies with populations and operation plans,
such as approve_expense(41, approver=alice) or recommendation(ada, river), never paragraphs
you have to trust.
03 / VERIFY AND FEED BACK
GND decides. gnd check evaluates every constraint: pass, a failed rule with the
offending facts, a warning, or cannot decide. Closed feedback goes back to the agent;
no answer key leaks.
Because the checker is deterministic, a cheaper model is safe to try: a wrong plan is rejected and retried inside a bounded session, never trusted. In our recorded sessions on one task, a 4B model that never succeeded on its first try was still accepted in two of three bounded sessions, and the checker confirmed the failure when a 3B model did not converge, so you know the final state either way. Claude Code, Codex, any declared command or any OpenAI-compatible endpoint can be the agent (sessions).
The loop, step by step
- Write the rules in plain English, in a file such as
rules.md. - Model them.
/gnd:gnd-model-from-text rules.mdreads each rule, asks when a rule could mean two things, and validates the model. - Set up the bot. Any model behind a command can answer; the
plan apps show the interface, and
/gnd:gnd-codegenbuilds a project for your own model. - Ask the bot a question in your own words.
- It proposes a plan: named operation steps, not prose.
- GND checks the plan against every rule, state by state, and names the rule that fails and the facts that break it.
- Execute or repair. An accepted plan runs. A refused plan goes back to the bot with the feedback, and it tries again.
- Change a rule.
/gnd:gnd-model-evolveedits the model; the next plan is checked against the new rule.
Quickstart
In Claude Code, install the plugin:
Then follow the course planner tutorial. It uses recorded sessions of Claude Code and of small models, so you see what each one actually did. PyRel is optional: GND's own checker needs nothing else. If your data lives in Snowflake, see what PyRel is: you can prototype the same rules locally on DuckDB; Snowflake execution is not yet supported by gnd export.
Learn by building
| Kind | Pages |
|---|---|
| Tutorials | Build a course planner, Refill prescriptions on a schedule |
| How-to guides | Access requests, Trip budget, Rent schedule, Recorded model runs |
| Explanation | What PyRel is, and when you need it, How a rule becomes a PyRel check |
One model in the middle
Coming from GSD?
GND keeps GSD's discipline (plan,
execute, verify, record) and its skills-in-your-agent packaging. It replaces the
requirements document with an executable model, so a phase is done when the
model's checker says so. Already have a GSD project? The gnd-adopt skill migrates
your .planning/ requirements into a GND model, with every requirement accounted
for. Adopt a GSD project →
GND is skills plus Python code
The skills tell a coding agent what to produce: a model, a population, a plan, a session contract, an evolution proposal. The Python runtime checks what it produced. The skills follow the Agent Skills format and install into both agents:
Claude CodeCodexAgent Skills formatPython ≥ 3.11
Open a new shell, then choose the Claude Code plugin, Codex plugin, or direct skill installation. The guide also covers installation with pip.
| Ask your agent to… | Skill | It produces | GND checks it with |
|---|---|---|---|
| Model a domain by dialogue | gnd-model-from-text |
model.orm.yaml + verbalization |
gnd validate |
| Propose a plan | your application's skill | steps.json |
gnd check --pre --steps |
| Work until the checker accepts | gnd-dev-session |
attempts under a session contract | gnd exp run |
| Generate the project | gnd-codegen |
derived tools + your extension | gnd conformance |
| Change a rule | gnd-model-evolve |
a reviewed proposal | gnd evolve preview / apply |
| Read or write documents | gnd-extract, gnd-render-doc |
facts with a digest-bound sidecar | gnd verify, gnd doccheck |
| Export or get a review | gnd-export, gnd-review-panel |
Soufflé, Lean, witnesses, a panel review | gnd replay, gnd review finalize |
What GND catches
PLANS
A step was skipped
The agent tries to pay a draft expense. reimburse_expense fails its precondition
pre_submitted; the agent adds the missing steps.
SIDE EFFECTS
Every fact legal, the walk is not
An approval also flipped a bystander expense to rejected. No snapshot check can see it; the frame check fails the walk.
HARD RULES AND ADVICE
Already read
A recommender suggests a book Ada rated. unread_only fails and names the pair; a
genre mismatch is only a warning.
THE LOOP
Attempt 1 red, attempt 2 accepted
A session contract, closed answer-free feedback, and explicit outcomes: accepted, stagnation, oscillation, budget exhausted.
RULE CHANGES
Legal yesterday, illegal today
The same output, two model versions: an advisory rule promoted to a hard one rejects yesterday's recommendations, with a blast-radius preview first.
DERIVATIONS
Did it recommend everything eligible?
Derived fact types with stratified negation. GND names the eligible pair the application missed, and the claimed pair it should not have made.
TEST THE TESTER
Measure the verifier itself
gnd synth generates conforming, boundary and violating populations; gnd measure
reports false-pass and false-fail rates per constraint.
DOCUMENTS
Facts in, facts out
Render a document from facts with planted distractors, one of them instruction-shaped, then extract the facts back and check both directions.
ENGINES
Three engines, one model
Trace vulnerable dependencies in Soufflé, prove a finite policy in Lean, and audit approvals with PyRel.
See every capability in the tour →
Verify at the scale you need
GND engine (default)
Lightweight, portable native Python. No database, no service, and three-valued verdicts: unknown never becomes yes or no.
Soufflé
gnd export souffle writes a standalone Datalog program for recursive impact
analysis at scale. Tutorial
Lean
gnd export lean writes finite definitions and explicitly unproved obligations;
prove them, or find a counterexample. Tutorial
PyRel (optional)
gnd export pyrel writes a standalone PyRel program that runs locally on DuckDB.
Snowflake execution is not yet supported by gnd export.
Tutorial
Choose your path
| You want to… | Start here |
|---|---|
| Understand the ontology, facts and constraints | ORM: the executable ontology |
| See a useful failure in a few commands | Run a check in 60 seconds |
| Build with Claude Code or Codex | Work with an agent |
| See every feature with an example | Capabilities tour |
| Add checks to existing Python code | Python API |
| Find out whether a feature fits your problem | Supported capabilities |
| Improve GND itself | Contributor guide |
A passing check means the supplied facts satisfy the modeled rules. GND verifies the output, never the producer; you still choose the rules and establish that the facts describe the world. Public builds report assurance as unavailable. The core checker runs locally and the tutorials need no model-provider key. Native Soufflé, Lean and PyRel execution are optional and have their own prerequisites; Snowflake execution is not yet supported by gnd export.