Skip to main content

SpecSmither

Open-source, local-first, NO-LLM Control System for Agentic AI Implementation

PyPI CI Python versions License: Apache-2.0


SpecSmither drives a software scope through Specification → Epic → Ticket → DAG and two lifecycles — planning (authoring a spec under a scoring gate) and work (building each ticket under a completion gate) — entirely over a single SQLite file. The engine is fully deterministic and synchronous; all AI reasoning lives in the MCP client, never in the engine.

It imports two independent, pure gates side-by-side:

  • crucible (crucible-forge) — the planning gate (rubric scorer). A published dependency from day one.
  • assay (assayforge → assay) — the work-session completion gate (0.2.0, upcoming).

Status

0.1.0 — the planning release. The deterministic substrate + the full planning lifecycle (authoring a spec draft → ready through the real crucible gate) + the agent surface (MCP server, TOON) + the human surface (the Textual TUI Observatory). The work lifecycle (building tickets under the assay gate) lands in 0.2.0.

Install

uv tool install specsmither      # or: pipx install specsmither  /  pip install specsmither

This installs two commands:

Command Surface Notes
specsmither the TUI Observatory — the only human UI needs a real terminal
specsmither-mcp the MCP stdio server for the agent 21 tools, TOON wire

Quickstart

cd my-project
specsmither          # opens the Observatory; press `i` to init the workspace

init lazily creates the user-global DB, binds this workspace to a project (.specsmither/config.json), and scaffolds .claude/ (agent skills, subagents, opt-in read-only hooks + a statusline) so an agent can drive the same DB via specsmither-mcp in parallel. Then bootstrap a spec and drive planning:

Key Action Key Action
1–5 switch tabs (Browser / DAG / Planning / Work / Search) i init workspace
c / e / d create / edit / delete the selected node n advance the planning gate
a / j approve / reject the handover / search

The agent registers the server as specsmither (the init scaffold writes it into .claude/settings.local.json); every MCP response is TOON.

Architecture

src/specsmither/
  domain/      enums, status transitions, runtime records (SpecFull recompose)
  db/          SQLAlchemy 2.0 ORM: base, models, migrations, *StoreSqlite repos
  dag/         status calc, single-hop cascade, dependency tree, critical path
  rollups/     count derivation, planning aggregate, in-txn recompute worklist
  operations/  CRUD, queries, search, reports, workspace/init, project, errors
  lifecycle/   planning verbs (start/action/complete) + handover, gate, state machine
  dispatch/    the single MCP routing facade (envelopes, error guidance)
  adapters/    WritePlan executor, crucible validator, lifecycle ports, config
  toon/        the TOON wire encoder (the always-on MCP encoding)
  mcp/         the stdio MCP server  → `specsmither-mcp`
  tui/         the Textual Observatory → `specsmither`

Every mutation runs in one Session.begin() (BEGIN IMMEDIATE) → apply the WritePlan → recompute worklist (cascade → counts → tree, to fixpoint) → commit/rollback. Derived data (counts, cached dependency tree) is materialized in-transaction, recomputed from the authoritative child rows (no deltas, race-free).

Runtime & workspace

SpecSmither keeps everything in one user-global SQLite database — a single specsmither.db that holds every project. A workspace is any directory bound to one project via .specsmither/config.json; different workspaces serve different projects off the same DB file (WAL + BEGIN IMMEDIATE make concurrent workspaces/agents on one file safe).

~/.specsmither/specsmither.db          # the single DB — all projects live here
~/.specsmither/config.json             # global defaults
<workspace>/.specsmither/config.json   # { "projectId": "…", "specificationId"?, … }
Env var Purpose Default
SPECSMITHER_HOME SpecSmither home directory ~/.specsmither
SPECSMITHER_DB Explicit DB file (overrides HOME) $SPECSMITHER_HOME/specsmither.db
SPECSMITHER_PROJECT Force the active project id (overrides the workspace file) the workspace config.json
SPECSMITHER_MCP_FORMAT MCP wire encoding (toon / json) toon
SPECSMITHER_LANGUAGE Guidance language (en / pt-br; aliases pt, pt_BR) en

Resolution precedence is env > project (.specsmither/config.json) > global (~/.specsmither/config.json) > default.

Development

uv sync --locked --dev
uv run ruff check src tests
uv run mypy
uv run pytest

Requires Python 3.11+. Determinism golden fixtures live in fixtures/golden/ and Textual snapshot SVGs in tests/__snapshots__/; both are committed (regenerated via tools/ and pytest --snapshot-update), so CI runs no Node.

License

Apache-2.0.

Metadata

Release files for specsmither 0.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for specsmither 0.4.2
File Size Uploaded
specsmither-0.4.2.tar.gz 186.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for specsmither 0.4.2
File Interpreter ABI Platform
specsmither-0.4.2-py3-none-any.whl Python 3 none any Details

Total release size: 406.2 kB

Release files / specsmither-0.4.2.tar.gz

Download URL specsmither-0.4.2.tar.gz
Size 186.7 kB
Tags Source
SHA-256 checksum
How to use checksums
4d53731332257bf4c0aaa7f4bdfad959bf67ad4b13f0da5cddaf8bbb43f3226e
BLAKE2b-256 checksum
How to use checksums
bd61662716df193197055c427acd4a12f943213e9d35fd9fe7df64bd7d824fdd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / specsmither-0.4.2-py3-none-any.whl

Download URL specsmither-0.4.2-py3-none-any.whl
Size 219.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
142034bff3ffefe6e070d3c583d8406d657f41fcbb95a2234faa85d4d91a3526
BLAKE2b-256 checksum
How to use checksums
7df41f7676b6cc2af45874f92f9915c11c0733a0d03e811dd09dba591bce7101
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release history Release notifications | RSS feed

0.4.3

2 release files

This release

0.4.2 This release

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page