Phase tracking and gate validation for the Beads issue tracker.
interphase adds lifecycle state management on top of beads: discovery, planning, building, review, shipping. Each phase has gates that should be satisfied before moving to the next one. By default, interphase tracks and reports without blocking (observability-first). An opt-in strict mode can fail closed for high-risk transitions.
The libraries (lib-phase.sh, lib-gates.sh, lib-discovery.sh) are sourced by consuming plugins like Clavain rather than running as standalone hooks. This keeps the hook budget lean while still making phase awareness available everywhere it's needed.
Phase state is communicated to interline via sideband files at ~/.interband/interphase/bead/${session_id}.json, so the statusline can show your current workflow phase without any direct coupling between the plugins.
First, add the interagency marketplace (one-time setup):
/plugin marketplace add mistakeknot/interagency-marketplaceThen install the plugin:
/plugin install interphaseCompanion plugin for Clavain: most useful when installed alongside the core engineering plugin.
The beads-workflow skill provides guidance for the full beads lifecycle:
"what phase am I in?"
"check gate requirements for review"
"discover open work"
lib/
lib-phase.sh Phase state tracking (set/get/infer)
lib-gates.sh Gate validation with dual persistence
lib-discovery.sh Work discovery scanner
skills/
beads-workflow/ Lifecycle guidance skill
tests/ Bats shell tests
By default, functions are fail-safe: return 0 on dependency/error paths and avoid blocking workflow. In strict mode, hard-tier transitions can intentionally fail closed.
interphase supports an opt-in strict gate mode for high-risk transitions:
- Set
CLAVAIN_GATE_FAIL_CLOSED=trueto enable strict behavior. - Strict mode applies to hard-tier beads only (
P0/P1). - In strict mode, dependency or malformed-input errors fail closed instead of failing open.
CLAVAIN_SKIP_GATE="reason"remains available as an emergency override and is explicitly audited.CLAVAIN_DISABLE_GATES=truestill bypasses all gate enforcement.