Manage and track autonomous AI research projects with state logging, instruction queues, agent coordination, and progress monitoring via SQLite.
Install
Documentation
Research Tracker
CLI tool for managing autonomous research agents with append-only state, instruction queues, and oversight.
Prerequisites
brew tap 1645labs/tap
brew install julians-research-tracker
Or: go install github.com/1645labs/julians-research-tracker/cmd/research@latest
Quick Start
Start a research project
research init market-q1 --name "Q1 Market Analysis" --objective "Analyze competitor pricing and positioning"
As the research agent — log progress
export RESEARCH_SESSION_ID="$SESSION_KEY" # Track which agent is writing
research log market-q1 STEP_BEGIN --step 1 --payload '{"task":"gather sources"}'
... do work ...
research log market-q1 STEP_COMPLETE --step 1
research heartbeat market-q1
Check status (from main session or heartbeat)
research status market-q1 --json
research context market-q1 --last 5 # Truncated context for prompts
Send instructions to running agent
research instruct market-q1 "Focus on enterprise segment" --priority URGENT
research stop-signal market-q1 # Request graceful stop
Agent checks for instructions
research pending market-q1 --json
research ack market-q1 --all # Acknowledge after processing
research check-stop market-q1 # Exit 0 = stop, Exit 1 = continue
Commands Reference
| Command | Purpose |
|---------|---------|
| init <id> -o "..." | Create project with objective |
| list [--status active\|done\|all] | List projects (includes needs_attention flag) |
| show <id> | Project details + recent events |
| stop <id> | Stop project, send STOP instruction |
| archive <id> | Archive completed project |
| log <id> <event> [--step N] | Log event (STEP_BEGIN, CHECKPOINT, BLOCKED, etc.) |
| heartbeat <id> | Update alive timestamp |
| block <id> --reason "..." | Mark blocked, needs input |
| complete <id> | Mark done |
| status <id> [--json] | Current state summary |
| context <id> [--last N] | Truncated context for agent prompts |
| instruct <id> "text" | Send instruction |
| pending <id> | List unacked instructions |
| ack <id> [--all] | Acknowledge instructions |
| check-stop <id> | Exit code: 0=stop, 1=continue |
| audit <id> --verdict pass\|drift | Log audit result |
Event Types
STARTED, STEP_BEGIN, STEP_COMPLETE, CHECKPOINT, BLOCKED, UNBLOCKED, AUDIT_PASS, AUDIT_DRIFT, HEARTBEAT, DONE, STOPPED, TIMEOUT
Integration Pattern
Spawning a research agent
1. research init <project> --objective "..."
2. sessions_spawn with task including:
- Project ID and objective
- Instructions to use research CLI for state
- Check stop signal before each step
- Log progress with heartbeat
3. Heartbeat monitors: research list --json | check needs_attention
4. Send instructions via: research instruct <project> "..."
Agent loop (in spawned agent)
while research check-stop $PROJECT; [ $? -eq 1 ]; do
research pending $PROJECT --json # Check instructions
research log $PROJECT STEP_BEGIN --step $STEP
# ... do work ...
research log $PROJECT STEP_COMPLETE --step $STEP
research heartbeat $PROJECT
STEP=$((STEP + 1))
done
research complete $PROJECT
Attention Detection
research list --json includes needs_attention: true when:
- -Last event is BLOCKED
- -Has unacked URGENT or STOP instructions
- -Heartbeat stale (>5 min since last HEARTBEAT event)
- -Last audit was AUDIT_DRIFT
Database
SQLite at ~/.config/research-tracker/research.db (WAL mode, append-only events).
Run research db migrate after install. Schema auto-migrates on first use.
Launch an agent with Research Tracker on Termo.