# A report built by an AI agent This folder is a complete bino project. An AI agent wrote every manifest in it through the bino MCP server (`bino mcp`). No manifest was edited by hand. The agent had no file or shell tools: it could only call the bino MCP tools and read the bino MCP resources. The report answers one question for a fictional company, Kestrel Outdoor GmbH: "Did we hit the 2025 revenue plan, and which region drives the deviation?" It is one A4 page in IBCS notation: a message title, actual vs. plan by month with the plan variance, a table by region, and a short commentary computed from the data. ## What is in here | Path | Written by | What it is | | --- | --- | --- | | `data/sales_2025.csv` | human | The input: 60 rows, monthly revenue 2025 per region, actual and plan, in EUR. Generated test data. | | `bino.toml` | human | Marks the project root. | | `prompt.md` | human | The task given to the agent. | | `review-1.md`, `review-2.md` | human | Review of the PDF after the first and the second build, sent back to the agent. | | `mcp.json`, `run.sh` | human | The agent setup. `run.sh` reruns it. | | `scripts/transcript_to_md.py` | human | Turns the raw transcript into Markdown. It drops nothing. | | `datasources/`, `datasets/`, `pages/`, `reports/` | agent | The report manifests. | | `transcript/run-1.jsonl` ... `run-3.jsonl` | Claude Code | The raw, unedited transcript of each turn (stream-json). | | `transcript/run-1.md` ... `run-3.md` | script | The same transcripts as Markdown. | | `report-first-pass.pdf`, `report-second-pass.pdf` | agent | The PDF after turn 1 and turn 2. | | `report.pdf` | agent | The final PDF, after turn 3. | ## How the run went The run had three turns in one session. The agent cannot see the PDF, so a human looked at it after each build, as the bino Claude Code plugin also asks you to do. 1. **Turn 1** (`prompt.md`): the agent read the bino skills, probed the CSV with `introspect_source`, wrote a DataSource, three DataSets, a LayoutPage and a ReportArtefact, built the PDF, and fixed what `get_layout_state` reported. All checks passed, but the PDF was not good: according to the agent, the engine added its own "M" prefix to values that were already in kEUR, so the chart showed 1.2 instead of 1,199 and the table total showed +0 instead of +96. 2. **Turn 2** (`review-1.md`): the agent fixed the units, removed an average line, gave the chart more room and softened the wording. 3. **Turn 3** (`review-2.md`): the agent rounded the monthly values, dropped the relative variance from the chart because its labels overlapped, and used the full page width. What the agent found about bino itself (all in the transcript): - With `measureScale: k`, the time chart scales the bars but not the variance bars. The agent worked around it by returning kEUR from the DataSets. - The time chart has no setting for label digits, so values still show one decimal (for example 1,199.0). The table has `dataFormatDigitsDecimal`, the chart has not. - `get_layout_state` for a single component failed with an output schema error. - `get_rows` returned old rows right after a query changed, until `validate_project` ran the queries again. Numbers from the result events of the transcript. Claude Code reports the cost as a running total for the session, so the last row is the cost of the whole run: | Turn | Agent turns | Duration | Cost of the session so far | | --- | --- | --- | --- | | 1 | 64 | 196 s | 1.80 USD | | 2 | 12 | 73 s | 2.22 USD | | 3 | 20 | 96 s | 2.94 USD | Over all three turns the agent made 93 tool calls, among them 17 `validate_draft`, 9 `get_rows`, 9 `build` and 12 `get_layout_state`. ## Versions and settings - bino 0.100.0 (commit ddfc32e7), template engine `v1.0.0-next.29` - Claude Code 2.1.306, headless mode (`claude -p`) - Model `claude-opus-5-5`, default settings - Tools: only `mcp__bino__*`, `ListMcpResourcesTool` and `ReadMcpResourceTool` - `--setting-sources project`, so no user settings or user memory are loaded - `bino mcp --no-proxy`, so a running bino daemon does not take part ## Rebuild the PDF You need bino 0.100.0 or newer (`bino version`) and the browser runtime (`bino setup`, once). ```bash cd agent-report bino lint bino build ``` The PDF lands in `dist/sales_2025_report.pdf`. ## Rerun the agent You also need Claude Code, signed in. A rerun gives a different transcript and maybe a different report, because the model does not answer the same way twice. ```bash cd agent-report rm -rf datasources datasets pages reports dist transcript ./run.sh ``` Open `report-first-pass.pdf`, edit `review-1.md` to say what you see, then: ```bash ./run.sh review 1 ``` This writes `report-second-pass.pdf`. Open it, edit `review-2.md`, and run `./run.sh review 2` if needed; that writes `report.pdf`. Set `MODEL=...` to try another model.