@jamesaphoenix/tx
v0.13.0
Published
Headless, local infra for AI agents - primitives for memory, tasks, and orchestration
Maintainers
Readme
tx
Primitives, not frameworks. Headless, local infrastructure for AI agents.
tx gives you a small set of reusable primitives for task state, docs-first specs, memory, coordination, and observability. You keep the orchestration loop.
Install
# Standalone binary (recommended)
curl -fsSL https://raw.githubusercontent.com/jamesaphoenix/tx/main/install.sh | sh
# Or via npm (requires bun)
npm install -g @jamesaphoenix/tx-cliStart Small
The recommended first path is:
- Task Management
- Spec-Driven Development
- Memory & Context
- Bounded Autonomy
- Coordination
- Observability
Most users should start with just the first two.
Day 1: Task Management
tx init --codex # or: --claude, or plain tx init
tx add "Write auth PRD" --json
tx add "Implement auth flow" --json
tx dep block <implement-task-id> <prd-task-id>
tx ready
tx show <prd-task-id>
tx done <prd-task-id>
tx ready
tx sync exportThis proves the basic loop:
- the queue works
- dependencies affect readiness
- completion advances the queue
- state exports cleanly to
.tx/streams
Day 2: Spec-Driven Development
tx doc add prd auth-flow-prd --title "Auth Flow PRD"
tx doc add design auth-flow-design --title "Auth Flow Design"
tx doc link auth-flow-prd auth-flow-design
# add or update tests with [INV-*], _INV_*, @spec, or .tx/spec-tests.yml
tx spec discover
tx spec status --doc auth-flow-design
tx decompose auth-flow-design --dry-run
tx decompose auth-flow-design
vitest run --reporter=json | tx spec batch --from vitest
tx spec complete --doc auth-flow-design --by youUse the spec primitives like this:
tx spec fci: compact machine score for agents and automationtx spec status: human-readable blocker view for one scopetx spec health: repo rollup, not part of the minimum day-1 loop
Human-in-Loop Example
task=$(tx ready --limit 1 --json | jq -r '.[0].id')
codex "Read AGENTS.md. For task $task: run tx show $task, make sure a paired PRD/design doc is linked, then decompose the work into tx subtasks and dependency edges."
echo "Review tx show $task, tx dep tree $task, and the linked PRD/DD docs, then press Enter to continue..."
read
codex "Read AGENTS.md. For task $task: execute the approved ready work from the linked PRD/DD docs and keep tx updated."The Six Layers
1. Task Management
Core queue and persistence:
tx inittx addtx readytx showtx donetx dep blocktx sync
2. Spec-Driven Development
Docs-first intent and closure:
tx doctx decomposetx spectx decision
3. Memory & Context
Durable knowledge and prompt context:
tx memorytx pin
4. Bounded Autonomy
Controls for agents with more freedom:
tx auto labeltx auto guardtx auto verifytx auto reflecttx auto gate
5. Coordination
Multi-worker and multi-actor primitives:
tx claimtx msg send/tx msg inboxtx group-context
6. Observability
Operational visibility once the earlier layers are in place:
tx tracetx spec healthtx diag stats- dashboard
Interfaces
| Interface | Best For | |-----------|----------| | CLI | Shell scripts, human operators, local loops | | MCP Server | Claude Code, Cursor, IDE integrations | | TypeScript SDK | Custom Node/Bun agents | | REST API | Language-agnostic HTTP clients | | Dashboard | Visual monitoring and management |
Optional Later
Watchdog is intentionally not part of the main getting-started path.
Use it only if you need detached, long-running supervision:
tx init --watchdog --watchdog-runtime auto
./scripts/watchdog-launcher.sh startRunbook:
Why tx
| | Native Tasks | Static Agent Docs | tx | |---|---|---|---| | Persistence | Session-scoped | Manual file edits | SQLite + git-backed streams | | Multi-agent safety | Easy collisions | Manual coordination | Claims, dependencies, messaging | | Intent tracking | Weak | Weak | Docs-first specs + decision capture | | Knowledge reuse | Lost each session | Static dump | Searchable memory + pins | | Orchestration | Fixed by tool | None | You own the loop |
Docs
Principle
tx should stay small.
It is not an agent framework, not a hosted memory product, and not a prescribed workflow. It is a local set of primitives you can compose into your own loop.
