Skip to main content

Open-source, local-first, NO-LLM reimplementation of the SpecForge engine (Specification → Epic → Ticket → DAG) over a single SQLite file.

Project description

SpecSmither

Open-source, local-first, NO-LLM reimplementation of the SpecForge engine.

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).

Status

Pre-alpha. Building M0 — Foundation: the deterministic substrate (domain models, SQLite/ORM persistence, the DAG engine, the in-transaction recompute worklist, CRUD primitives, and the query/search/report surface) with native tests. No lifecycle, MCP server, or CLI yet.

Architecture (M0 layers)

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, lookup, errors, reopen, link-PR
  adapters/    WritePlan executor, in-memory operations projector

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).

Development

uv sync --dev          # resolves crucible-forge from ../crucible (see pyproject)
uv run ruff check src tests
uv run mypy
uv run pytest

Requires Python 3.11+. Determinism golden fixtures live in fixtures/golden/ and are committed (regenerated from the TS reference via tools/); CI runs no Node.

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"?, … }

Running init in a workspace (once) lazily creates the DB if it's absent, then creates — or reuses — that workspace's project and writes the binding file.

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

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

License

Apache-2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

specsmither-0.1.0.tar.gz (253.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

specsmither-0.1.0-py3-none-any.whl (321.3 kB view details)

Uploaded Python 3

File details

Details for the file specsmither-0.1.0.tar.gz.

File metadata

  • Download URL: specsmither-0.1.0.tar.gz
  • Upload date:
  • Size: 253.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for specsmither-0.1.0.tar.gz
Algorithm Hash digest
SHA256 bdfd9b5be77ca844527232a35b11a20b9a1b06eb0f44a3e18d4f1114d637387e
MD5 57669e5ae2970659fddf18a60f7a98c6
BLAKE2b-256 76c55d91dd9a7892c942322cca0dde07e56b02c806bb33189b19b6dc952a6c7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for specsmither-0.1.0.tar.gz:

Publisher: publish.yml on blacksmithers/specsmither

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file specsmither-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: specsmither-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 321.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for specsmither-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ad92c1ef7e9ae4f5a7d0f756477990f0eeb908cc35bd1eda4007fc4b929bc80a
MD5 e1a2eeb58a5b271780e27a6d23c57ba9
BLAKE2b-256 bfa156435f2878e5ad94bb965678935998c2f765ac882e40c2936a59bd605e8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for specsmither-0.1.0-py3-none-any.whl:

Publisher: publish.yml on blacksmithers/specsmither

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page