Decipher the growth layers of your AI agent fleets.
Local-first AI Fleet Intelligence. Operational evidence for the operator.
Dendro reads authorized local harness logs and OpenRig records into embedded DuckDB. It answers questions about seat activity, handoff friction, token consumption, rework, and context carryover. It observes execution; fleet governance stays with the operator.
- Seat dynamics: five disjoint activity bands, unknown intervals retained, fleet concurrency and container hold evidence.
- Handoff flow: pickup and execution latency, return rates, parent-linked rework loops, and conservative token attribution.
- Consumption: uncached input, cache reads/writes and output, with separate reasoning detail and explicit linkage coverage.
- Traceability: reports and forensic traces share the same metric definitions, observation window and evidence keys.
Missing observations are not measured zero. Tokens do not establish value or causal productivity. Recorded cost and operator-supplied prices must be distinguished from one another.
Install stable Rust and Git, then:
git clone https://github.com/smota/dendro.git
cd dendro
cargo build --release --locked
./target/release/dendro --helpChoose authorized source roots explicitly. Keep the output database outside those roots:
./target/release/dendro run --db ./dendro.duckdb \
--root openrig=/absolute/path/to/openrig \
--root codex=/absolute/path/to/codex
./target/release/dendro report decisions --db ./dendro.duckdb \
--from 2026-10-14T00:00:00Z --to 2026-10-15T00:00:00Z
./target/release/dendro trace --db ./dendro.duckdb \
--metric-id handoff_friction \
--from 2026-10-14T00:00:00Z --to 2026-10-15T00:00:00ZDates above are examples; choose the actual period recorded by your sources. Windows are half-open [from, to). An empty report may mean absent timestamps, unsupported data, or an unobserved period. A build from source is not a measured five-minute installation guarantee.
Open the offline explorer and load a report or trace JSON file. The viewer aliases seat labels and displays supported numeric facts. Its synthetic demo is labelled. Aggregate concurrency counts are a distribution, not a reconstructed time series; handoff counts do not establish token transfer.
The landing page includes a scenario calculator. Its inputs are assumptions, and its formulas describe potential released capacity, not predicted savings or ROI.
cargo check --workspace --locked
cargo test --workspace --locked
cargo clippy --workspace --locked -- -D warnings
cargo fmt --check
node --test site/site.test.cjsThe real-local-log performance test is explicitly ignored by default and requires a separately authorized corpus. Synthetic correctness or benchmark results do not establish production-scale latency. See the benchmark's actual output and corpus before quoting a performance claim; milliseconds must not be called sub-millisecond.
- Operator guide: source selection, reporting, privacy and reproducible replay.
- Maintainer guide: workspace architecture and quality gates.
- Connector extension guide: trait contract and runnable example.
- Product specification and R1 acceptance contracts.
- Historical narrated walkthrough and preview animation. These are presentation assets, not evidence for current CLI behavior or performance.
Source logs are read-only. The analytics store uses allowlisted facts, redaction, opaque identifiers and explicit uncertainty. Never select credential files as ingestion roots. Exporting or publishing a report is a separate operator action; local storage alone does not make every possible export safe to share.
MIT License. Copyright 2026 Samuel Mota.