What this is
Claude Code sessions start cold: hundreds of installed skills, agents, and MCP servers; memory spanning every project on a machine; no deterministic opening move. The praxis stack is a pair of skills that fixes this — and then audits itself.
megapraxis — the session bootstrap
megapraxis runs at session start. It detects one of seven modes from the working directory's shape
and history, inventories skills/agents/MCP servers, flags silently-broken ("dark") plugins, reads project
memory and git state, and emits a 15-second dashboard briefing. Its contract: every line corresponds to a
truth on disk — unverified claims are dropped, never emitted; counts that weren't computed render as
count-skipped, never as guesses.
| Mode | Fires when |
|---|---|
| hook-auto | SessionStart hook; 3-line kernel briefing, no questions |
| active-project | cwd is a real project (git repo / manifest / memory) |
| container | cwd holds multiple project subdirs |
| picker | 2+ sub-projects recently active — asks which one |
| machine-dashboard | "show all projects" — machine-wide scan |
| cold | no prior context; minimal catalog |
| resume | "pick up where we left off" — replays the last unresolved thread |
metamegapraxis — the meta-auditor
Where megapraxis briefs the session, metamegapraxis briefs megapraxis. It rolls through
23 documented operational traps (each with a disk-verifiable probe), checks the bridge manifest's referential
integrity, computes coverage deltas, and — when single-lens auditing isn't enough — dispatches a
four-agent audit swarm whose verdicts persist to a knowledge graph. Six modes:
audit, trap N, bridges, propose, swarm, diff.
The 23 operational traps
Silent-failure classes learned in production. Each has a signal (the disk signature that identifies it) and a fix. The live roll-call is on the State tab.
| # | Trap | One-line signal |
|---|---|---|
| 1 | plugin-manifest-misplaced | manifest at plugin root instead of .claude-plugin/ — plugin silently absent while settings say ON |
| 2 | session-vs-app-restart | new session ≠ new process; plugin configs load only at app launch |
| 3 | user-belief-vs-harness | "it should be registered now" is a hypothesis until the harness confirms it |
| 4 | stdio-works-cc-never-launched | server responds when run manually, but the host never spawned it |
| 5 | http-up-not-stdio-up | HTTP health check green while the stdio MCP sibling is down — separate processes |
| 6 | windows-python-store-stub | bare python resolves to a Store alias that prints an install nag and exits 1 |
| 7 | stale-pyc-shadowing | bytecode mtime ties can shadow a fresh source edit |
| 8 | fabricated-count | a number derived from a truncated listing instead of a real count |
| 9 | heuristic-classification | client-side guesswork silently replacing an auditable server-side contract |
| 10 | fix-violates-feedback | a proposed action contradicting a saved user correction |
| 11 | ghost-warm-slug | directory looks recently active because a memory file was touched, not a session |
| 12 | stale-graph-cache | graph snapshot lagging fresh disk state |
| 13 | new-agent-needs-restart | agent files written mid-session are invisible until app relaunch |
| 14 | marketplace-root-claude-plugin | a marketplace manifest dir misread as a stray plugin — deleting it darkens everything it publishes |
| 15 | mcp-disconnect-mid-session | tool roster shrinks mid-session while the HTTP backend stays up |
| 16 | tmp-on-windows | /tmp/ writes that the next shell can't read back |
| 17 | shell-escape-json-winpath | backslash paths mangled across shell/curl escape layers |
| 18 | claude-md-aspirational-route | docs describe an endpoint the code never shipped — the handler is the truth |
| 19 | bulk-finalize-no-contribution-check | blanket-failing pending work destroys provenance of runs that succeeded |
| 20 | userpromptsubmit-empty-payloads | audit rows persisted before their fields were populated leak forever-pending |
| 21 | settings-dark-harness-resolves | settings say a plugin is off; the runtime dispatches it anyway — the harness wins |
| 22 | malformed-settings-json | one trailing comma silently disables every plugin and hook |
| 23 | while-read-subshell-hang | per-iteration subshells on MSYS stretch a 300ms scan to minutes |
Verdicts and Tarski honesty
Audit cycles terminate with an explicit verdict — converged,
converged-modulo-restart, extend, extend-stable, degrade,
cycle-complete-extend-deferred, or INCOMPLETE (with reason). What can't be decided is
named, never absorbed: five canonical undecidables (unknown-unknowns, true-lens-independence,
fixed-point-vs-plateau, state-validity-horizon, converged-vs-correct) plus four observation-class buckets
(values-question, oracle-required, telemetry-required, intent-vs-drift) appear in every audit rather than
being quietly folded into "all done".
Swarms and the bridge flywheel
When one lens isn't enough — self-audit above all, since the audit target is the auditor — the stack composes an agent swarm: four reviewers with different toolsets in a pipeline, a coordinator synthesizing a verdict, every contribution persisted to a graph. Recurring reasoning gets compiled into bridges: memoized transfer rules (short-circuits, pre-populated templates, delta-scopes) consulted before any new work. A byte-identical re-audit short-circuits to its prior verdict for ~20 tokens instead of a ~150K-token cycle — marginal cost per invocation trends toward zero, bounded below only by the genuinely novel, which always pays full price. That residual is load-bearing, not a failure.
One real cycle, end to end — with receipts
This is not a mock-up. On 2026-07-17 the stack ran its full loop against itself —
/megapraxis boot → /metamegapraxis audit → four-agent self-audit swarm →
coordinator verdict → fixes applied → this site republished — and every stage left records.
This tab replays that cycle from those records, and labels each claim by how far you can verify it
from here:
- live — your browser re-checks it against this site's own artifacts, right now, below;
- graph — read from the audit knowledge graph at build time, scrubbed (ids become short hashes);
- origin — attested by grepping the origin machine's code at build time; honestly marked as not client-checkable.
The punchline is the loop eating its own cooking: the swarm's CRITICAL finding this cycle was that a fix recorded as "done, pending restart" by the previous cycle had landed in dead code — found because the dispatch tooling failed live during this very cycle's dispatch. The audit trail below includes the machinery's own failure, because that is what an honest audit trail looks like.