Features
Numbers, limits, how-to — per feature
Each feature below states its maturity on the shared 6-rung scale, the measured numbers behind it (with N), the limits we state ourselves, and the exact surface that carries it. Feature ids (F1…F7) are the engine's own — the ones this appliance surfaces are detailed here.
Surfaces at a glance
What is wired where (audited 2026-07-18)
| Feature | engine lib | mindsmith serve | mindsmith mcp |
|---|---|---|---|
| Instance service | ✓ type descriptors | ✓ GET /instances/… (the .sgp) + POST /instances/import (opt-in) | ✓ on by default — dialectic_* / plan_* / notepad_* + instances_* |
| F1 repair | ✓ | ✓ OpenAI endpoint | ✓ ask / hint / propose |
| F2 zoom | ✓ | — | ✓ zoom (the host declares the plan; leaves served bounded) |
| F3 task memory | ✓ (engine core) | — | ✓ via the instance service (notepad_*, plan_* — the reopen lane included) |
| F4 think mode | ✓ | — | ✓ propose / hint (over the whole room's stock) |
| F5 critical mind | ✓ (engine combo C9) | — | ✓ critique · persistent as a dialectic instance |
| F6 rooms | ✓ | ✓ rooms CLI | ✓ lattice_load |
F7 (the versionable-beliefs substrate) lives in the engine — see the
engine repo. This page covers what the
appliance itself carries. Also served: self_consistency (k sampled paths, margin-bound
vote, honest UNDECIDED) and trace_tail (the service log ring).
NEWThe instance service — named persistent workspaces
- Plainly
- Your agents get named graph workspaces they grow across sessions: a
dialecticdebate whose day-2 evidence is explored against the whole grown pool, aplanwhose steps carryneedswiring and reopen with a reason, a sharednotepad. A type descriptor (shipped by an engine plugin) declares the typed actions once; mindsmith generates the MCP tools, dispatches, persists and shares. - What holds by construction (structural suites, deterministic)
- Attribution is first-class: every write carries
agent, stamped on every fact at the door; a write without one is a typed refusal.instances_revisionsreads the authors back per revision. - One
.sgppack per instance — a plain zip; the file on disk, the HTTP download and the import payload are the same artifact, byte-identical across runs and placements. Corrupt pack → typed refusal, nothing written. - Managed residency: one hot instance = one worker thread (the MCP/LLM process is never saturated — proven by a saturation control pair); idle-TTL eviction; a crashed worker is just cold (the next open resumes from the last persisted pack).
- Typed refusals as data: unknown action, missing agent, a plan batch whose needs nobody produces — each refusal is named, for the agent to act on.
- Attribution is first-class: every write carries
- The limits
- No at-scale multi-agent campaign yet — rung 3/6 is the honest bar.
- A hard kill loses writes since the last persist point (create · sync · eviction · close): crash = cold, never a corrupt pack — by design.
- The instances directory is owned by one process (catalogue and id
minting scan it):
mcpowns it by default;serve --instancesattaches opt-in for sharing.
F1Low-quant repair
- What it is
- You run a heavily-quantized gguf because it fits your VRAM; quantization broke part of its judgment. A certified method stock (forged offline against an executable oracle) steers the model's output, and covered queries are answered from verified local stock at zero frontier calls on repeats.
- The numbers
- SQL covered queries, low-quant: 8→63 % (the same model high-quant as reference: 46→92 %), N=201.
- Finance-table traffic: 7→62 % (reference 20→78 %), N=120.
- Zero big-model calls at runtime on the covered slice.
- Forge: 0 false admissions across 3 datasets × 2 forge models; a sha256 validation dossier per stock.
- The limits — stated, not buried
- The guarantee is at admission, not at execution: runtime steering is not a correctness proof. A runtime "trusted answers" cross-agreement tier was tested and refuted — it was removed (kept on the honesty page).
- Forge yield is per-domain; amortization is a property of the domain's stereotypy. The win lives on the typed, recurrent slice of your traffic — coverage depends on your stocks.
- Streaming is simulated; no per-tier timeout yet.
- How to use
-
FRONTIER_MODEL=/path/model.gguf mindsmith serve --room ./sgc # → http://127.0.0.1:4747/v1 — POST /v1/chat/completions · GET /v1/models · GET /healthz # optional: LOCAL_MODEL=/path/small.gguf (semantic coverage: paraphrases hit the stock)Every completion carries provenance headers:
x-sg-served-from: local|frontier·x-sg-arm(match,recall-full,recall-partial,escalate) ·x-sg-cost·x-sg-coverage·x-sg-saved(frontier calls avoided so far) ·x-sg-sgc-version(the loaded stock'sname@version).GET /healthzis the ops readout — GET, no key, no query content:{ "status": "ok", "policy": "no-egress", "tiers": { "configured": ["local", "mid", "frontier"], "reachable": ["local"] }, "sgc": ["fin-tables-stock@1.0.0"], "stock": 128 } // illustrative valuesEscalation is either a single frontier (
FRONTIER_MODELembedded gguf, orLLM_BASEany OpenAI-compatible endpoint) or N-tier routing:// routing.json — tiers are ordered; each has an egress class; the policy is the ceiling { "tiers": [ { "name": "local", "egressClass": "none", "backend": { "preset": "local", "modelPath": "…" } }, { "name": "mid", "egressClass": "mid", "backend": { "preset": "custom", "base": "…" } }, { "name": "frontier", "egressClass": "frontier", "backend": { "preset": "…" } } ], "policy": { "dataPolicy": "no-egress" } } // no-egress (default) | allow-mid | allow-allA query is never silently sent to a forbidden tier: if the policy leaves nothing reachable, the refusal is typed (
NO_REACHABLE_TIER). The no-egress guarantee is enforced fail-closed on real sockets in the test suite, with a negative control proving the guard has teeth.
F4External think mode — the two assistant lanes
- What it is
- The appliance as the host LLM's assistant, in two explicit lanes.
SOFT (
hint): the certified-shape menu for a query — advisory, no guarantee attached, and it says so in the payload (advisory: true). HARD (propose): submit a typed proposal — admitted, or refused with blame plus the admissible options enumerated through the gate (tested, never guessed). The proposer revises and resubmits; bounded rounds are the host's discipline. - The numbers
- One dialogue round lifts 17/24 → 24/24 at zero false admissions.
- A forced write (
force: true) is recorded as untrusted provenance — traced, auditable, outside the certified layer. It is never admitted. The gate never yields. - Honest refusal on over-constrained input (no fabricated compromise).
- The limits
hintis orientation only: it lifts the score, but admission is a separate, gated step — the menu is not a promise the model will use it correctly.- The gate checks proposals against the certified referential of the loaded stock; an empty room means no lanes (the mcp boot says so on stderr).
- How to use
-
claude mcp add skynet -- mindsmith mcp --routing routing.json # tools: ask · drift · metrics · lattice_load · hint · propose · critique # propose → refusal carries blame + gate-tested options (illustrative): { "status": "refused", "blame": "shape \"join-4-tables\" ∉ certified referential (12 shapes)", "options": [ { "shape": "join-2-tables" }, { "shape": "aggregate-groupby" }, … ] } # propose with force → recorded, never admitted: { "status": "recorded-untrusted", "certified": false, "blame": "…" }
F5External critical mind (critique)
- What it is
- A disciplined critique loop the host LLM can call as a tool: declared viewpoints are
established through a witness gate over a statement pool; missing theses
are generated anchored (each carries its witnesses); everything lands in
a typed ledger; and the verdict is certification-aware — mechanical only
above the measured margin, an honest UNDECIDED below it. The frame status is always in
the payload:
FREE(model-brainstormed pool — coverage is relative to the pool, and the payload says so),MATERIAL(caller-supplied statements),DECLARED(caller-declared viewpoints). - The numbers — and the division of labour
- Disciplined piece-by-piece argument coverage 77 % vs 58 % whole-context (48 arguments).
- Anchored generation of missing theses: 0 fabrication across all negative controls; anti-injection ledger 8/8 retracted; JTMS cascade on retraction.
- Without a declared frame the tool refuses honestly — 0 false verdicts in the controls — instead of guessing a winner.
- The margin is a stop signal, not a proof: below the measured count
margin the output is counts + coverage + UNDECIDED — never a fake weighing. Above it,
what ships is the judgment brief (theses, verbatim witnesses, attacks
and standing, open points) plus a self-contained
judgePromptyour model runs to render the decision: the graph guarantees the arguments; the weighing is the model's job. - Retired: an earlier head-to-head (naive 13/24 vs mechanical 24/24) was withdrawn when we found the arms unequal — the honesty page documents it. What survived every control is what this section claims, nothing more.
- The iteration contract
- OPEN ledger points and an UNDECIDED verdict are a typed data request, not a
dead end. The tool cannot reach the web or the host's context — the host can.
The loop:
- 1 — call
critique {"topic": …}; readverdict,margin,threshold, and the ledger entries withstatus: "open"; - 2 — the host gathers real statements that bear on the OPEN points (web, docs, its own context);
- 3 — call again with
statements: ["PRO: …", "CON: …"]— the frame upgrades to MATERIAL and the margin can move honestly; - 4 — bounded rounds are the host's discipline; the
advicefield of the payload restates this contract on every UNDECIDED.
viewpoints: […]declares the frame (DECLARED);polish: trueadds a presentation-only rewrite, content-locked. - 1 — call
- The limits
- Campaign numbers are at rung 4/6 — measured, with the MCP surface promoted to the product this week; treat the surface as fresh.
- Entry templates (pool brainstorm, viewpoint naming) are not yet form-robustness-tested.
- On FREE frames, coverage is relative to the generated pool, not the world — announced in the payload.
- Refuted along the way and kept on the page: graded/prevalence weighting, goal-criteria weighting, low-quant self-audit — the list.
- How to use
Available incritique { "topic": "…" } → frame FREE critique { "topic": "…", "statements": ["PRO: …", "CON: …"] } → frame MATERIAL critique { "topic": "…", "viewpoints": ["…", "…"] } → frame DECLAREDmindsmith mcp(runs on the appliance's escalation backend) and in the engine'ssg mcp.
F6Local .sgc rooms
- What it is
- A room is just a directory of self-verifiable stock bundles — the community model with
no center: anyone builds, freezes, shares and imports their own
.sgcmini-repos. No catalog, no subscription, no egress by default. Everything content-bearing stays engine-gated: import dry-loads the bundle through the same gates the appliance uses, and the appliance re-loads the room through the gates at boot. There is no tool that writes the stock or the registry directly. - The guarantees
- A malformed or empty bundle is refused at the gate, never written into the room.
freezewrites the companion dossier (sha256 + inventory) — the fixed, auditable reference. A bundle whose bytes no longer match its dossier is not the frozen reference anymore.- Lattice bundles load version-gated and confluence-checked: a conflicting ring is
rejected, never merged (
lattice_loadis the only registry write path).
- How to use
$ mindsmith rooms list · fin-tables-stock@1.0.0 [methods, 12 classes] sha256 9f31c2ab55e0d1c4… (fin-tables-stock.sgc) ❄ sql-lattice@1.2.0 [lattice, 31 classes] sha256 4c7a90de12bb08e6… (sql-lattice.sgc + sql-lattice.dossier.md) $ mindsmith rooms import ./someone-elses-stock.sgc # gate-checked first, fail-closed $ mindsmith rooms freeze fin-tables-stock # writes the sha256 dossier $ mindsmith rooms export fin-tables-stock ./shipped # bundle + dossier, ready to share(Illustrative listing — the format is the real CLI output.) Forge new stocks from any dataset with an executable oracle:
sg forgein the engine repo — every admitted method passed a zero-false-admission gate, and the dossier proves it.
F2Piece-by-piece zoom — the zoom tool
- Plainly
- You declare the plan; the engine guarantees the serving. The
zoomtool takes your typed leaves (each with theneedsit declares) and serves each one in a bounded context — its own self-contained ask plus the upstream values it declared, never the whole dossier. A leaf whose needs nobody produces is refused before any model call, typed and named. With a stock wired, leaves ride the cost ladder (covered → local, 0 frontier calls) and the payload carries the economy readout. The division of labour is measured, not a choice: the small model is not the task cutter (a published negative) — the plan is yours. For a plan that persists across sessions, keep it as aplaninstance (plan_addSteps/plan_sync). - What the measurements say (engine library, not this appliance)
- Cross-domain at N=200 per domain — 560 tasks total across the N=40/80/200 campaigns: math word problems 16→52 % (×3.25 [2.4–4.8]), financial-table QA 20→50 % (×2.54 [1.96–3.5]) — bootstrap CIs.
- Where the lone model collapses, the pieces hold: deep tasks 0/33 whole vs 10/33 decomposed.
- Compound ~20-operation tasks: whole-task floors at 0/20 across 3 configs; a hierarchical 2-level split reaches 73 % of sections.
- Robustness to form proven: the scaffold gain holds across 4 wordings (K-paraphrase harness).
- The limits
- The zoom pays iff the task exceeds whole-task capacity — neutral inside it (measured on simple lookups).
- The small model is not the task cutter (measured) — the host declares the plan; the givens plumbing is per-domain.