The open-source documentation, task-tracking & testing framework that keeps your project honest.
Katastasi (Greek κατάστασις, "status / state") answers the question every team fumbles: what is the real status — is this actually done, and verified, right now?
Local-first markdown is the source of truth (works fully offline, no SaaS, no Jira required). It's agent-native (an MCP server so Claude/Copilot can drive it) and integrates everywhere — Jira, Confluence, GitHub/GitLab issues, CI/CD, custom scripts — but those are optional projections you sync to, never prerequisites.
requirements ⇄ tasks ⇄ tests ⇄ results (one traceable model, in markdown)
│ │ │
Confluence Jira your test suites (optional, synced projections)
MIT-licensed and free to self-host. New here? See VISION.md for the full picture and roadmap.
Coding agent or contributor? Start with AGENTS.md. Adopting it on a team? See the methodology — the per-feature loop (onboard → design → implement → verify → sync) and where it slots into PRs/CI.
| Pillar | What you get |
|---|---|
| 📄 Documentation | Markdown ⇄ Confluence/Jira, both ways, round-trippable, mermaid preserved. Interactive decision docs (katastasi questions). Optional AI-authored technical analysis. |
| ✅ Task tracking | A local, markdown task model (.acp/tasks) linked to requirements and tests, usable standalone or imported read-only from Jira. A task marked done whose requirements aren't verified is flagged |
| 🧪 Testing | Links and runs your existing suites (Playwright/Jest/Vitest/node/xUnit), plus a built-in requirement-first acceptance runner (katastasi test — HTTP + CLI) — all joined to requirements at the git commit → a true, per-requirement status with regression detection. |
New to it? docs/GET_STARTED.md has a copy-paste prompt for your AI agent (Claude Code / Copilot / Cursor) and the equivalent commands.
# Run without installing (recommended)
npx katastasi trace init
npx katastasi --help
# Or install globally
npm i -g katastasi # also published as @dloizides/katastasi
# Or Docker
docker run --rm -v "$PWD:/work" -w /work ghcr.io/openmindednewby/katastasi traceBinary is katastasi (short alias kat; acp still works through the transition).
Answer "which requirements actually hold true, at this commit?" by linking your tests to requirements
(a Jira epic, a markdown spec, roadmap.html, a Confluence page, or GitHub/GitLab issues) and joining
them with the test results.
katastasi trace init # autodetect frameworks + requirements → acp-trace.json
katastasi trace serve # web portal: live dashboard + ▶ Run buttons + history
katastasi trace --run --fail-on regression # CI: re-run suites, trace, fail on any regressionEach requirement is classified ✅ verified / ❌ failing / 🧪 unverified / 📋 specified,
flagged test('login works @PROJ-123', …),
[Trait("req","PROJ-123")]) or list them in a mapping file. Full guide:
docs/TRACEABILITY.md · 5-minute setup: docs/ONBOARDING.md.
Gather requirements from a mix of sources, find the gaps against the codebase, capture open decisions as an interactive form, then turn it all into a technical analysis + tasks + tagged test stubs:
katastasi trace pull-requirements # mixed sources (Jira/Confluence/md/issues/script) → local folder
katastasi trace gaps # which requirements aren't in code / lack tests / aren't verified
katastasi pipeline # one command: gather → gaps → analyze → tech doc + tasks + tests
katastasi pipeline --ask # two-pass: open-questions form first, then --answerskatastasi analyze (AI) produces a gap analysis, a Confluence-ready technical-analysis page, Jira tasks
(acceptance criteria + use-case flow), and scaffolded tagged unit/e2e test stubs — local and/or
published. Guide: docs/TECH_ANALYSIS_FLOW.md.
One guided flow that turns a feature + its requirements (Jira / Confluence / markdown) + the existing code into a dev-ready package an agent or junior dev can execute without thinking hard — and a self-contained HTML feature pack the developer just reads, approves, and verifies.
katastasi wizard # interactive: source → requirements → analyze → tasks → pack
katastasi wizard --feature "Login" --source jira --requirements pull # scriptable
katastasi wizard check --source both # are my Jira/Confluence credentials set? (how to fix if not)It gathers/creates requirements, runs analyze (a system + per-use-case mermaid data-flow + gap
analysis), creates ordered, context-rich tasks (code + Jira + Confluence inline, so a low-capability
model can execute), and emits unit / e2e / acceptance stubs + ready-made curls — then writes
.acp/features/<name>/feature-pack.html (+ a markdown mirror, + optional Confluence page). The developer
opens it, reads the data-flow, ticks approve, runs the curls (copy button), ticks verify.
First-time Jira/Confluence auth: docs/SOURCES_SETUP.md. Design + roadmap:
docs/WIZARD-DESIGN.md.
Local, markdown-first tasks that link to requirements and tests — and stay honest:
katastasi task add "Implement login" --req PROJ-1 # → .acp/tasks/TASK-1.md
katastasi task set TASK-1 done
katastasi task board # → .acp/BOARD.md (kanban by status)
katastasi task verify --fail-on drift # ⚠️ a done task whose reqs aren't verified fails CIStatuses are configurable (tasks.statuses); IDs are global TASK-<n> or per-scope (WEB-<n>). Set
tasks.mode: jira to import issues read-only (katastasi task import). katastasi analyze also drops
its generated stories straight onto the board. Agents drive it all via the task_* MCP tools. Full
design: docs/PHASE-1-DESIGN.md.
Attach an executable acceptance test to a requirement and katastasi test runs it — HTTP/REST calls
(or CLI commands) with assertions — then writes JUnit results keyed by requirement, so trace flips the
requirement to ✅ verified on pass (and clears any task drift). Existing Jest/Playwright suites keep
being linked, not replaced.
katastasi test # run .acp/tests specs + inline ```acp-test blocks → JUnit
katastasi test --req PROJ-1 # just one requirement
katastasi trace # fold the results into per-requirement statusAuthor them three ways — a spec file (.acp/tests/PROJ-1.acp.json / .acp.yml / a markdown table),
or inline under a requirement, terse or JSON:
## PROJ-1 — Login
```acp-test
POST /login {"user":"x","pass":"bad"} -> 401
```Steps assert status / JSON-path / header / body-contains, capture variables to chain (login → token →
reuse), and read secrets from env via {{env.NAME}}. baseUrl, default headers, and a one-time login
setup live in the config runner block. katastasi analyze generates these specs straight from the
requirements. Agents drive it via the test_run MCP tool. Full guide: docs/ACCEPTANCE.md.
- AI agents (MCP): this repo is an MCP server (
katastasi-mcp). Agents callrequirements_trace,analyze,pull_requirements,scaffold_test,requirement_status,markdown_to_jira,markdown_to_confluence, and more. See docs/CLI_AND_MCP.md and docs/AGENT_PROMPT.md. - Jira & Confluence (both ways):
pull-jira/pull-confluence→ markdown folders; edit;push-folderback. Recursive + round-trippable. - GitHub / GitLab issues: as requirement sources (by label/milestone).
- CI/CD: a published GitHub Action (
uses: openmindednewby/katastasi@v0.2.0) plus GitLab CI and pre-commit templates in docs/ci/. Exit non-zero on regression. - Custom scripts / services: a
commandrequirement source (run any script → requirements), anoutput.postsink (POST the full report to your server), and a self-hostedcollector. - Local-only markdown: requirements, runs, and reports are plain files you can commit. No external service needed for the core.
The original flow — describe a feature → AI writes a structured technical analysis → publish to
Confluence + create Jira tickets — is retained as an optional module. It runs via the claude / gh models CLIs (no Docker/keys) or via self-hosted n8n (browser UI), with a 13-template registry and
team context profiles.
./scripts/cli-preview.sh "Add user notification preferences" # Claude Code CLI
./scripts/gh-models-preview.sh "Add user notification preferences" # GitHub Models (free)Full reference: docs/WORKFLOWS.md · docs/CLI_SETUP.md · docs/SETUP.md · templates in templates/, profiles in team-profiles/.
Katastasi is built MVP-first — a releasable phase every 1–2 weeks. Full detail in VISION.md.
- Phase 0 ✅ — Rebrand & distribution: rename, npm + Docker + GitHub Action (0.2.0).
- Phase 1 ✅ — unified
.acp/model + switchable local/Jira/hybrid task tracking (shipped 0.3.0). - Phase 2 ✅ — requirement-first acceptance test runner (HTTP + CLI; shipped 0.4.0). See docs/ACCEPTANCE.md.
- Phase 3 ✅ (v1) — bidirectional sync
.acp/tasks ⇄ GitHub issues / Jira(3-way reconciler, revision-tracked, conflict-flagging, status round-trip). See docs/SYNC.md. (v2 field-merge, v3 interactive next.) - Phase 4 — breadth (pytest/go/cypress, more CI) & polish.
Everything in this repo is MIT and free to self-host — the entire CLI, MCP server, runner, sync, and local engine. Paid offerings are only: a hosted cloud (managed dashboard/collector), support, and custom development.
Contributions welcome — see CONTRIBUTING.md. Good first steps: a new requirement source, a test-framework adapter, or a CI template.
MIT — see LICENSE.
