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, groups them by repository, and writes the report. 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 harness: OpenCode (the default, needs an
opencode executable) or Claude Code / Codex (no CLI, just a readable transcript
store at ~/.claude/projects or ~/.codex).
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
Iiwi
══════════════════════════════════════════════════════
Turn coding-agent sessions into engineering reports
▶ 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.
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 |
| 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.
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file iiwi-0.9.1.tar.gz.
File metadata
- Download URL: iiwi-0.9.1.tar.gz
- Upload date:
- Size: 2.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e562cd5249f643a847b9a5323537c1ca002f500339ade4ad00dd614b9c9d718b
|
|
| MD5 |
d0e5bf14a622de68ad4d03e4dbe3a381
|
|
| BLAKE2b-256 |
3edf8aeccd7524e2a07d0d0a87adb0e53a994acebe6d9500d3e98b69e34d6220
|
Provenance
The following attestation bundles were made for iiwi-0.9.1.tar.gz:
Publisher:
release.yml on mike840609/iiwi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
iiwi-0.9.1.tar.gz -
Subject digest:
e562cd5249f643a847b9a5323537c1ca002f500339ade4ad00dd614b9c9d718b - Sigstore transparency entry: 2397724467
- Sigstore integration time:
-
Permalink:
mike840609/iiwi@f5080cdfda71a3dbccfa392716c4cbb6bb0c6b26 -
Branch / Tag:
refs/tags/v0.9.1 - Owner: https://github.com/mike840609
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f5080cdfda71a3dbccfa392716c4cbb6bb0c6b26 -
Trigger Event:
push
-
Statement type:
File details
Details for the file iiwi-0.9.1-py3-none-any.whl.
File metadata
- Download URL: iiwi-0.9.1-py3-none-any.whl
- Upload date:
- Size: 117.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c384849c7cbf93acc1ad8ef6d1348bb4a6be18aa8bc95e363ba81a8d3332d994
|
|
| MD5 |
226dfd7d197c743777e84d6099b94f4f
|
|
| BLAKE2b-256 |
9430fdd4c6df008466376cac1ec40a7e70ab4e993acb787c99fbfc8d49a5d0e8
|
Provenance
The following attestation bundles were made for iiwi-0.9.1-py3-none-any.whl:
Publisher:
release.yml on mike840609/iiwi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
iiwi-0.9.1-py3-none-any.whl -
Subject digest:
c384849c7cbf93acc1ad8ef6d1348bb4a6be18aa8bc95e363ba81a8d3332d994 - Sigstore transparency entry: 2397724519
- Sigstore integration time:
-
Permalink:
mike840609/iiwi@f5080cdfda71a3dbccfa392716c4cbb6bb0c6b26 -
Branch / Tag:
refs/tags/v0.9.1 - Owner: https://github.com/mike840609
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f5080cdfda71a3dbccfa392716c4cbb6bb0c6b26 -
Trigger Event:
push
-
Statement type: