A network of agentic research specialists coordinated by a principal investigator agent. V1: web-search researcher MCP server + CLI shim.
Find a file
Jeff Smith ddaf7e85c3 Record per-step durations in trace and operational logs (#35)
TraceLogger now tracks monotonic start times for starter actions
(web_search, fetch_url, synthesis_start, start) and attaches a
duration_ms field to the matching completer (web_search_complete,
fetch_url_complete, synthesis_complete, synthesis_error). The
terminal 'complete' step gets total_duration_sec instead.

Pairings are tightly sequential in the agent code (each
_execute_tool call runs start→end before returning), so a simple
dict keyed by starter name suffices — no queueing needed. An
unpaired completer leaves duration unset and does not crash.

Durations flow into both the JSONL trace and the structlog
operational log, so OpenSearch queries can filter / aggregate
by step latency without cross-row joins.

Verified end-to-end on a real shallow query:
  web_search       5,233 ms
  web_search       3,006 ms
  synthesis_complete 27,658 ms
  complete         47.547 s total

Synthesis is by far the slowest step — visible at a glance
for the first time.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 16:49:52 -06:00
cli depth flag now drives constraint defaults (#30) 2026-04-08 16:27:38 -06:00
obs M2.5.2: Cost ledger with price table (#25) 2026-04-08 15:52:25 -06:00
orchestrator Initial project structure and scaffolding 2026-04-08 11:57:15 -06:00
researchers Record per-step durations in trace and operational logs (#35) 2026-04-08 16:49:52 -06:00
scripts Propagate parent env to MCP server subprocess (#18) 2026-04-08 15:31:14 -06:00
tests Record per-step durations in trace and operational logs (#35) 2026-04-08 16:49:52 -06:00
.dockerignore chore: add docker-based test environment (#13) 2026-04-08 15:06:12 -06:00
.gitignore Initial project structure and scaffolding 2026-04-08 11:57:15 -06:00
CLAUDE.md chore: add CLAUDE.md for session 1 2026-04-08 14:44:16 -06:00
CONTRIBUTING.md Initial project structure and scaffolding 2026-04-08 11:57:15 -06:00
Dockerfile M2.5.3: marchwarden costs CLI command (#26) 2026-04-08 15:57:39 -06:00
Makefile chore: add Makefile with venv-based dev workflow 2026-04-08 16:31:00 -06:00
pyproject.toml M2.5.1: Structured application logger via structlog (#24) 2026-04-08 15:46:51 -06:00
README.md chore: add Makefile with venv-based dev workflow 2026-04-08 16:31:00 -06:00

Marchwarden

A network of agentic research specialists coordinated by a principal investigator agent.

Marchwarden researchers are stationed at the frontier of knowledge — they watch, search, synthesize, and report back what they find. Each specialist is self-contained, fault-tolerant, and exposed via MCP. The PI agent orchestrates them to answer complex, multi-domain questions.

V1: Single web-search researcher + CLI shim for development.
V2+: Multiple specialists (arxiv, database, internal docs, etc.) + PI orchestrator.

Quick start

# Clone
git clone https://forgejo.labbity.unbiasedgeek.com/archeious/marchwarden.git
cd marchwarden

# Install (Makefile shortcut — creates .venv and installs deps)
make install
# or manually:
python3 -m venv .venv && source .venv/bin/activate && pip install -e ".[dev]"

# Ask a question
marchwarden ask "What are ideal crops for a garden in Utah?"

# Replay a research session
marchwarden replay <trace_id>

Docker test environment

A reproducible container is available for running the test suite and the CLI without depending on the host's Python install:

scripts/docker-test.sh build           # build the image
scripts/docker-test.sh test             # run pytest
scripts/docker-test.sh ask "question"   # run `marchwarden ask` end-to-end
                                        # (mounts ~/secrets ro and ~/.marchwarden rw)
scripts/docker-test.sh replay <id>      # replay a trace from ~/.marchwarden/traces
scripts/docker-test.sh shell            # interactive bash in the container

Documentation

Status

  • V1 scope: Issue #1
  • Branch: main (development)
  • Tests: pytest tests/

Stack

License

(TBD)