@jpabbuehl/stratum
v0.3.1
Published
Planning and orchestration layer for agentic software development
Maintainers
Readme
Stratum
Stratum is a planning and orchestration layer for agentic software development.
It is designed to be complementary to execution systems such as get-shit-done rather than replacing them. Stratum keeps canonical planning artifacts in .planning/, then exports adapter views for downstream workflows.
The default planning posture is:
--deep --dual- Claude as canonical writer
- wrapper-driven delegates for
claudeandcodex - persisted deliberation state under
DELIBERATION/
Current adapter support:
- get-shit-done
- beads
Intended compatibility:
- Claude Code workflows
- Codex workflows
- ECC-style workflows
- custom agentic development stacks
Positioning
Stratum owns planning, orchestration, and canonical artifact structure.
Execution systems can stay focused on:
- implementation
- verification
- delivery
- runtime-specific workflows
That split lets you install Stratum alone, or install Stratum together with get-shit-done and use both in the same repository.
Install
Choose the target runtime layout explicitly:
--claudeinstalls Stratum in the layout Claude Code expects--codexinstalls Stratum in the layout Codex expects
These flags matter because Claude Code and Codex do not load commands from the same directories or in the same format.
Recommended Claude Code install:
npx @jpabbuehl/stratum@latest --claude --globalCodex install:
npx @jpabbuehl/stratum@latest --codex --globalInstall for both supported runtimes on the same machine:
npx @jpabbuehl/stratum@latest --all --globalProject-local install for the current repo only:
npx @jpabbuehl/stratum@latest --claude --localWhy --claude or --codex?
The installer needs to know which runtime layout to write:
- Claude Code layout:
~/.claude/commands/stratum/~/.claude/stratum/
- Codex layout:
~/.codex/skills/stratum-*~/.codex/stratum/
Stratum is the same product in both cases, but the installed file structure is different.
Why --global or --local?
These flags control installation scope:
--global- installs into your user-level runtime config directory
- use this when you want Stratum available in all projects on that machine
--local- installs into the current repository only
- use this when you want to validate or isolate Stratum in a single project
Examples:
--claude --globalinstalls into~/.claude/...--claude --localinstalls into./.claude/...--codex --globalinstalls into~/.codex/...--codex --localinstalls into./.codex/...
What It Installs
For supported runtimes, Stratum installs:
- runtime-specific command assets for the selected target layout
stratum/bin/stratum-tools.cjsstratum/workflows/overview.mdstratum/adapters/gsd/README.md
Initial Commands
/stratum:help/stratum:init-solution/stratum:discuss-phase <phase-ref|--next>/stratum:plan-phase <phase-ref|--next> [--topology <preset>] [--vendors claude,codex,gemini]/stratum:challenge-plan <phase-ref|--path <plan-path>> [--topology <preset>] [--vendors claude,codex,gemini]/stratum:phase-status <phase-ref|--next>/stratum:export-gsd <phase-ref|--next>/stratum:export-beads <phase-ref|--next>/stratum:doctor
Planning Modes
Stratum supports the mode matrix from the original dual-planning design:
--quick --single- one planner pass
- light validation
--quick --dual- wrapper-driven dual consultation
- light merge path
--deep --single- one planner with stronger QA
--deep --dual- default
- independent multi-vendor rounds before synthesis
- challenge/defense oriented deliberation
- persisted synthesis buckets
Topology presets:
dual-argumentationcouncilround-robincritique
The backend stores deliberation artifacts in:
.planning/phases/<nn>-<slug>/DELIBERATION/packet.json.planning/phases/<nn>-<slug>/DELIBERATION/topology.json.planning/phases/<nn>-<slug>/DELIBERATION/round-1/*.md.planning/phases/<nn>-<slug>/DELIBERATION/round-2/*.md.planning/phases/<nn>-<slug>/DELIBERATION/synthesis.json.planning/phases/<nn>-<slug>/DELIBERATION/sessions.json
Canonical Model
Stratum treats .planning/ as the source of truth.
Canonical artifacts:
.planning/BLUEPRINT.md.planning/ROADMAP.md.planning/USER_JOURNEY.md.planning/STATE.md.planning/backlog/.planning/phases/<nn>-<slug>/
Adapter outputs are generated under:
.planning/adapters/gsd/.planning/adapters/beads/
Example
Initialize planning:
node ~/.claude/stratum/bin/stratum-tools.cjs init-solution --deep --dualDiscuss a phase before planning:
node ~/.claude/stratum/bin/stratum-tools.cjs discuss-phase --nextPlan a feature:
node ~/.claude/stratum/bin/stratum-tools.cjs plan-phase --next --deep --dualRun a three-vendor council:
node ~/.claude/stratum/bin/stratum-tools.cjs plan-phase --next --deep --dual --topology council --vendors claude,codex,geminiRun a serial round-robin:
node ~/.claude/stratum/bin/stratum-tools.cjs plan-phase --next --deep --dual --topology round-robin --vendors claude,codex,geminiChallenge an existing plan:
node ~/.claude/stratum/bin/stratum-tools.cjs challenge-plan --next --deep --dualCheck phase readiness:
node ~/.claude/stratum/bin/stratum-tools.cjs phase-status --nextExport for get-shit-done:
node ~/.claude/stratum/bin/stratum-tools.cjs export-gsd --nextExport for beads:
node ~/.claude/stratum/bin/stratum-tools.cjs export-beads --nextDoctor the local setup:
node ~/.claude/stratum/bin/stratum-tools.cjs doctorDual Planning Notes
Stratum deliberately does not depend on Owlex MCP.
It does reuse the useful parts of the original design:
- topology-driven planning modes
- wrapper-driven delegation to external vendor CLIs
- persisted deliberation artifacts
- independent first-pass responses
- critique/revision rounds before synthesis
- synthesis buckets such as agreed, dismissed, and unresolved
- adapter-first exports that do not take ownership away from canonical
.planning/artifacts
The package includes local wrappers at:
stratum/wrappers/claude-wrapper.shstratum/wrappers/codex-wrapper.shstratum/wrappers/gemini-wrapper.sh
Those wrappers are used by the deterministic backend when vendor delegation is enabled.
Publish
Package name:
@jpabbuehl/stratum
CLI/bin name:
stratum
Before publishing:
npm login
npm test
npm pack --dry-run
npm publish --access publicDevelopment
npm test