Iiwi
Iiwi · /ˈiː.wiː/ "ee-wee" — turns your coding-agent sessions into a weekly engineering report, without anything leaving your machine.
English | 繁體中文
The weekly status update is work you already did once. Iiwi reads the sessions your coding agent already recorded, synthesizes evidence-backed outcomes, and lets you review the result before it writes the report. Quick Review targets a 30–60 second pass from candidate outcomes to a shareable update. Works with OpenCode, Claude Code, and Codex.
- Nothing leaves your machine. Your local
opencode runwrites the narrative — no network, no API key. - Finds your sessions anywhere. Every project, whichever folder you run from.
- Groups by repository. Worktrees collapse into one entry; child and subagent sessions stay with it.
- Redacts first. Common secret patterns are stripped locally before anything is written.
Quick start
Needs Python 3.11+ and git. Plus one transcript source: OpenCode (the default,
needs an opencode executable) or a readable Claude Code / Codex transcript store
at ~/.claude/projects or ~/.codex (their CLIs are not needed for reading).
Quick Review outcome synthesis still uses your local opencode run for every
transcript source; if it is unavailable, the recovery screen offers Retry and an
explicit session-based report fallback.
pipx install iiwi # or: pip install iiwi
iiwi doctor # is the harness ready?
iiwi report --period last-week # write the report
The report lands under reports/.
Pass --dry-run to print the report to the terminal instead of writing a file.
The interactive menu
Run iiwi with no arguments if you would rather not remember flags:
$ iiwi
___ _ _
|_ _(_)_ __ _(_)
| || \ V V / |
|___|_|\_/\_/|_| v0.9.1
══════════════════════════════════════════════════════
Turn coding-agent sessions into engineering reports
github.com/mike840609/iiwi
▶ Generate Report
Browse Sessions
Check Setup
Settings
↑↓ jk │ Enter Select │ 1-4 │ ? Help │ q Quit
Choosing Generate a report shows every setting at once instead of asking one
question at a time — ↑↓ moves, ←→ changes a value, and a line under the list
explains the setting you are on. Press g to generate, or r to open
Review sessions first, which weighs each repository by how much of the period
it actually accounts for:
Review Sessions 6 / 6 selected │ 252 / 252 msgs
══════════════════════════════════════════════════════
Select sessions to include in the report:
1. ▾ ████████████ 71% ● iiwi 3 / 3 Aug 5 │ 180 msgs
▶ ████░░░░░░░░ 24% ● Add the interactive menu Aug 5 │ 60 msgs
████░░░░░░░░ 24% ● Redact before writing Aug 5 │ 60 msgs
████░░░░░░░░ 24% ● Group worktrees Aug 5 │ 60 msgs
2. ▸ ████░░░░░░░░ 24% ● obsidian-wiki 2 / 2 Aug 4 │ 60 msgs
3. ▸ █░░░░░░░░░░░ 5% ● dotfiles 1 / 1 Aug 3 │ 12 msgs
↑↓ jk │ ←→ hl │ Space Toggle │ p Preview │ e Exclude │ a All │ g Generate │ / Search │ ? Help │ b Back
Space toggles a repository or a single session, p previews a transcript
(redacted), and e excludes a repository from every future scan. Your selection
is remembered per period. Press g to synthesize the selected sessions into
Quick Review instead of writing the session-based report immediately.
Quick Review keeps the evidence traceable while you decide what belongs in the update. The first five candidates are selected; additional work stays under More candidates, and extraction failures stay visible under Ungrouped candidates. User-added outcomes, optional Blockers, and optional Next week text are included in the same in-memory draft.
Space Include/exclude │ e Edit │ J/K Reorder │ v Evidence │ s Split │ a Add
p Preview │ g Generate │ b Back
p Preview renders the current draft without writing a file. g Generate writes
that reviewed draft. If synthesis fails, retry it or explicitly use the labeled
session-based report fallback. See the
evidence-first Quick Review guide
for the full flow and the Manager/Engineering and Brief/Full responsibilities.
Commands
iiwi doctor # is the harness ready?
iiwi scan --period last-week # preview how sessions group
iiwi report --period last-week # write the report
iiwi history # reports already written
iiwi update # check PyPI for a newer release
iiwi run # the same questions, one at a time
| Flag | What it does |
|---|---|
--harness claude-code / --harness codex |
Read another harness's sessions — the narrative still comes from your local opencode run |
--no-llm |
Deterministic structured report; works whether or not OpenCode is installed |
--sanitize |
OpenCode's stronger redaction, which intentionally removes most work evidence |
--dry-run |
Print the report instead of writing a file |
--json |
Redacted machine-readable output for scan, doctor, history, and update (the default when stdout is piped) |
iiwi --help lists everything, and run is the linear wizard if you prefer being
asked. In scripts, name a subcommand directly — with no terminal to prompt at, the
menu exits with status 3 rather than reading stdin.
Configuration
Settings come from an environment variable first, then the settings file, then the default:
iiwi config init # walk through all
iiwi config set harnesses.opencode.cli.model deepseek-r1 # write one
iiwi config list # show all, with sources
iiwi config unset report.timezone # back to the default
Every setting and its environment-variable name is in the configuration guide.
Privacy
Everything happens on your machine: sessions are read from disk, common secret
patterns are redacted, and the redacted transcript is handed to your locally
installed opencode run. No API key, and update is the only command that touches
the network.
Reports may still contain private goals, filenames, commands, and full working paths — always review one before sharing it. See Privacy and security for the full data flow and current limits.
Documentation
| Page | What's in it |
|---|---|
| CLI reference | Every command, option, and exit code |
| Evidence-first Quick Review | Outcome review keys, report modes, recovery, and current exclusions |
| Configuration | Settings file, environment variables, precedence |
| Privacy and security | Data flow, redaction boundary, what reports still contain |
| Security policy | Threat model and how to report a vulnerability |
| Usage guides | Reporting periods, subagents, repository grouping, output handling |
| Usage statistics | How the usage section is built, and its window caveat |
| Support and limits | The per-harness caveat list |
| Architecture | How a report is produced, end to end |
| Releasing | How a release is cut |
The name
The ʻiʻiwi is a scarlet Hawaiian honeycreeper whose long curved bill reaches nectar others cannot — which is what this tool does with the sessions your agent left behind. Pronounced the anglicised way, "ee-wee".
Development
git clone https://github.com/mike840609/iiwi.git
cd iiwi
uv sync --locked --extra dev # install the project and its dev tools
uv run iiwi # run your working copy
uv run pytest --cov=iiwi --cov-fail-under=80 # tests, with the coverage gate CI enforces
uv run ruff check . # lint
uv run pyright # type check
The last three are exactly what CI runs, so a green local run means a green PR.
Name forms
The name is cased by where it appears:
| Context | Form |
|---|---|
| Distribution, CLI, URLs, application directories | iiwi |
| Python package and imports | iiwi |
| Prose | Iiwi |
| Environment variables | IIWI_ prefix |
| Error base class | IiwiError |
License
MIT
Metadata
Release files for iiwi 0.11.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| iiwi-0.11.0.tar.gz | 2.3 MB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iiwi-0.11.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.4 MB
Release files / iiwi-0.11.0.tar.gz
| Download URL | iiwi-0.11.0.tar.gz |
|---|---|
| Size | 2.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1c1bbe26c133889278a7773e6128242bec200bd12f285ab014c30f71d6486671
|
|
BLAKE2b-256 checksum How to use checksums |
c426527aef7103eb7428630a57229813ba16014bdb77b49e014b9de59ad77794
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 12, 2026.
Transparency logRelease files / iiwi-0.11.0-py3-none-any.whl
| Download URL | iiwi-0.11.0-py3-none-any.whl |
|---|---|
| Size | 142.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
709c011f92d04a9fbcbba58ecaaca66aac49fbf6883aa2375551c05a1bf7ac0e
|
|
BLAKE2b-256 checksum How to use checksums |
8800ad9420f47de962f2a8d599df055dddc943f52d379d1cea216e909b9d8de7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 12, 2026.
Transparency logSecurity for iiwi 0.11.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for iiwi-0.11.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 12, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.