Current manual
Reproducible evidence for an exact agent path.
Nanda Town is a local-first integration lab. It runs a named workflow, records what happened at each stage, and leaves a bundle another operator can verify and inspect. A live rerun also needs the original agent setup and any inputs omitted from the bundle. The website documents and displays Town; the Python CLI performs the run.
Scope
A lab, not an adoption claim
Town exercises declared agent workflows and protocol simulations under three run modes. Each scenario or profile defines its own stages; missing evidence is not collapsed into success or failure.
Town-authored fixtures, reference agents, local end-to-end runs, and CI establish that Town works against those fixtures. They do not show that an independently developed agent has adopted Town or that an outside operator found the result useful. That acceptance milestone still requires both.
Quick start
Install from the repository
Nanda Town currently supports Python 3.11 and newer. Install the checked-out repository into an isolated environment, then ask the executable for the scenarios present in that checkout.
git clone https://github.com/projnanda/nandatown.git
cd nandatown
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
nandatown scenarios
nandatown run marketplaceRuns are written beneath runs/ by default. Use --out to choose another evidence root and--seed to override a Lab scenario seed. The repository README is the canonical command guide.
Execution
Lab, Track, and the exact Path
Lab
Deterministic, scripted local scenarios. Use it to reproduce evaluator behavior and failure handling without claiming a live external integration.
nandatown run marketplace
Track
Local HTTP coordination with subprocess or external participants. Profiles state the harness and fault path being exercised.
nandatown run quote-crash-restart
Path testing narrows the claim to a versioned, observable route to one agent. For an already-running A2A endpoint, Town acts as the deterministic counterpart and observer:
nandatown test-agent --url http://127.0.0.1:9999See architecture for the execution model and operator guidance for exact run responsibilities.
Artifacts
Five records, one manifest
Each evidence bundle contains five canonical records: profile.json, run.json, intents.jsonl, events.jsonl, and result.json. manifest.json commits to those files. report.md is a human view, not an additional canonical record.
Every evaluated stage is one of passed, failed, not_enough_evidence, not_tested, or error. The overall verdict is passed, failed, incomplete, or error.
nandatown verify runs/<run-id>
nandatown report runs/<run-id>
nandatown replay runs/<run-id>
nandatown visualize runs/<run-id>Verification checks the bundle and independently reproduces its recorded evaluation with the matching evaluator version. Report and replay are read-only views; visualize writes an HTML view. Running the scenario or profile again creates a new bundle instead of rewriting the original evidence.
Portable evidence
Partial evidence stays evidence
A partial receipt can be signed and independently verified. Missing coverage remains explicit in the receipt; it is not converted to a pass. Generate and verify one with:
nandatown receipt runs/<run-id>
nandatown verify-receipt runs/<run-id>/receipt.json --bundle runs/<run-id>Town Proof is deliberately stricter. Rendering a TOWN-TESTED badge requires a verified, fresh, passed result with every recorded stage covered; coverage.not_tested must be empty.
nandatown proof runs/<run-id>A signature establishes commitment by a particular key. It does not establish independent observation, operational safety, authorization, ecosystem adoption, or endorsement.
Integration boundary
Keep adapters thin
HTTP is the canonical Track participant boundary. MCP can expose that surface as tools; its separate test command only probes initialization and tool listing. Path directly exercises a selected A2A workflow, not full protocol conformance. Pin the profile and agent role; preserve and resupply any command or endpoint omitted from rerun metadata so another operator can reproduce the same path.
nandatown test-agent --url https://agent.example/a2a --path-profile a2a-capability-fulfillment@0.3 --out runsRemote-agent support is intentional. Treat a local command as trusted user code: Town coordinates it, but does not claim to sandbox hostile processes. Follow the canonical existing-agent guide for the current default profile and acceptance procedure, and read convergence for what is current versus still proposed.
Discovery
The SkillMD catalog is only a catalog
Registering a SkillMD only makes the catalog entry discoverable. It does not verify, install, authorize, endorse, or execute the submitted skill, agent, or service. For new URL and GitHub entries, the catalog stores the source link without fetching or hosting the linked content, agent, or service.
Browse entries at /skills or use GET /api/skills. New submissions have bounded request and field sizes; the listing endpoint preserves its complete-response compatibility. Production operators still need gateway-wide request/rate controls and database resource policy.
Provenance
The earlier Town remains available
The twelve-layer plugin gallery and bundled experiment traces are preserved as historical showcase material. They are useful provenance, but are not the current CLI, evidence schema, or external acceptance record.
nandatown import-pr <number> can adapt a legacy contribution into a bounded local reference flow. It treats PR content as untrusted input and does not auto-install or execute the original plugin. A passing adapted run is not a pass for the original contribution.