Skip to content

Build with the SDK: starter apps

Choose the workflow you need. Each of the seven starters is a small command-line application with its own guide and tests, not a framework or a substitute gate.

Build Starter guide Needs a gate? What it demonstrates
A deterministic content check Checks No Evaluate files and handle clean, flagged and unevaluated results
A reviewer integration Reviewer preparation No Offline application contract exercise; no live reviewer binding
A correction workflow Correction preparation Optional Prepare a request; not a completed withdrawal operation
Memory across sessions Assistant memory Yes Propose, save a handle, inspect and recall in another process
A document connector Ingestion Yes Submit local UTF-8 content with source attribution
An explanation view Provenance Yes Inspect the gate's recorded history for an artifact
Operational diagnostics Diagnostics Yes Inspect supported calls and safe error outcomes

The first two run entirely offline against the installed SDK, so they are the ones to start with if you do not have an endpoint yet. Correction is offline unless you pass --endpoint.

CLI starter, or direct Python?

Both, and they are not alternatives. Every guide has a Doing it in your own code section showing the same workflow as plain calls on the SDK's public API, with the actual response fields and what to do next.

You want Use
To see the workflow run end to end, now the starter CLI — --help on each
To wire it into your own application the Python section of that guide
Importable functions you can call directly examples/recipes/

The starters stay exactly as they are: they are the runnable reference, and they own their own argument parsing, exit codes and printing. The Python sections are what you copy into an application, where argparse and print are not what you want.

The importable recipes

examples/recipes/ holds two small modules of named functions:

Module Covers Needs a gate?
offline_checks.py evaluate_file, many files, error kinds as data No
gate_operations.py propose, status, why, recall, pending, negotiation Yes

Three rules hold across both, and they are what makes them safe to copy:

  • They take the client; they never build one. No recipe calls connect, reads an environment variable or holds a connection, so importing one cannot open anything and a recipe cannot reach an endpoint you did not hand it.
  • They return values. Nothing prints, nothing calls sys.exit. Rendering is yours.
  • They never retry a write. A write whose outcome is unknown is reported as such and handed back — resending it without an idempotency contract is how the same observation gets filed twice.

They are examples, not a framework: no base classes, no configuration, no registry. Copy the function you need into your own code and delete the rest.

Running the starters

Use the SDK revision containing these apps and an existing compatible Python environment. Run commands from the repository root. Each guide gives exact arguments; every app supports --help.

Network starters require your real HTTP/MCP endpoint. Credentials come from the application environment, never command-line token arguments. Read operations do not enable writes. Submission commands do write observations and are labelled in the guides. No starter launches a fake gate as a fallback.

What the examples prove

Offline checks and application-contract exercises run locally. Network operation unit tests use injected clients and do not prove deployment authorization or model quality. Run the network starter against your selected gate for service acceptance. The reviewer and correction starters explicitly stop short of unsupported server operations; they must not be used as evidence that review or withdrawal occurred.

The recipes are covered by tests/test_api_recipes.py, and that suite is split deliberately. The offline half runs the real SDK against the real fixture data — the outcomes, findings and manifest digest asserted there are what your installed package produces. The gate half builds a real GateClient over a scripted in-process transport: it exercises the SDK's own response validation on real dicts, but it opens no socket and proves nothing about any deployment — not authorization, not admission, not a service's field set.

For connection setup see Python quickstart, and for agent-host tools without Python see MCP integration.