Show Me Your Work Decision Log
cursor/plugins
Keeps a TSV decision log for long or unattended agent runs, one row per decision with what, why, evidence and result, so a reviewer can check the work later.
Diagnose pi-go agent loops and degenerate turns — "agent loop aborted", runaway thinking with no tool calls, repeated phrases.
$ npx skills add dimetron/pi-go --skill pi-loop-forensics -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dimetron/pi-go pi-loop-forensics --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/dimetron/pi-go.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.pi-go/skills/pi-loop-forensics .claude/skills/pi-loop-forensics && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pi-loop-forensics" agent skill from https://github.com/dimetron/pi-go/tree/main/.pi-go/skills/pi-loop-forensics into .claude/skills/pi-loop-forensics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-loop-forensics", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/dimetron/pi-go/tree/main/.pi-go/skills/pi-loop-forensicsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add dimetron/pi-go --skill pi-loop-forensics -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dimetron/pi-go pi-loop-forensics --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dimetron/pi-go.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.pi-go/skills/pi-loop-forensics .agents/skills/pi-loop-forensics && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pi-loop-forensics" agent skill from https://github.com/dimetron/pi-go/tree/main/.pi-go/skills/pi-loop-forensics into .agents/skills/pi-loop-forensics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-loop-forensics", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dimetron/pi-go --skill pi-loop-forensics -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dimetron/pi-go pi-loop-forensics --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dimetron/pi-go.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.pi-go/skills/pi-loop-forensics .cursor/skills/pi-loop-forensics && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pi-loop-forensics" agent skill from https://github.com/dimetron/pi-go/tree/main/.pi-go/skills/pi-loop-forensics into .cursor/skills/pi-loop-forensics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-loop-forensics", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/dimetron/pi-go.git --path .pi-go/skills/pi-loop-forensics--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add dimetron/pi-go --skill pi-loop-forensics -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dimetron/pi-go pi-loop-forensics --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dimetron/pi-go.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.pi-go/skills/pi-loop-forensics .gemini/skills/pi-loop-forensics && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pi-loop-forensics" agent skill from https://github.com/dimetron/pi-go/tree/main/.pi-go/skills/pi-loop-forensics into .gemini/skills/pi-loop-forensics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-loop-forensics", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install dimetron/pi-go pi-loop-forensicsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add dimetron/pi-go --skill pi-loop-forensics -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dimetron/pi-go.git skills-src && mkdir -p .github/skills && cp -r skills-src/.pi-go/skills/pi-loop-forensics .github/skills/pi-loop-forensics && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pi-loop-forensics" agent skill from https://github.com/dimetron/pi-go/tree/main/.pi-go/skills/pi-loop-forensics into .github/skills/pi-loop-forensics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-loop-forensics", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dimetron/pi-go --skill pi-loop-forensics -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install dimetron/pi-go pi-loop-forensics --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dimetron/pi-go.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.pi-go/skills/pi-loop-forensics .opencode/skills/pi-loop-forensics && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pi-loop-forensics" agent skill from https://github.com/dimetron/pi-go/tree/main/.pi-go/skills/pi-loop-forensics into .opencode/skills/pi-loop-forensics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pi-loop-forensics", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pi-loop-forensicsDiagnose pi-go agent loops and degenerate turns — "agent loop aborted", runaway thinking with no tool calls, repeated phrases.
Pi Loop Forensics is an agent skill from dimetron/pi-go. Diagnose pi-go agent loops and degenerate turns — "agent loop aborted", runaway thinking with no tool calls, repeated phrases. Discriminates genuine model repetition collapse from a race, a tool-parse failure, or a too-low guard, and A/B replays a seed session across providers.
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `ab_replay.sh`, `scan_logs.py` and `score_run.py`).
It sits in Agent Workflows, covering Autonomous loops. The repository describes itself as: Go implementation of AI coding agent. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 24d1f2b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Python and Shell), which the agent can run.
Shell commands in SKILL.md call:
python3bashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
OLLAMA_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pi Loop Forensics loads about 2.1k tokens when it runs. Until then it costs about 74 tokens; SKILL.md has 1,002 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
Keys live in `~/.pi-go/.env` **and** `<repo>/.pi-go/.env`; pi-go merges bothAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from dimetron/pi-go at commit 24d1f2b, republished under its MIT licence (© dimetron). 1,002 words, ~2,100 tokens.
.claude/skills/pi-loop-forensics/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Use when a run dies with agent loop aborted: ..., or a model burns a long turn
thinking without ever calling a tool. This skill decides why before anything
is changed: the abort message names a symptom, not a cause.
Sibling skill pi-check-session-logs covers tool call errors. This one covers
repetition and runaway turns. They do not overlap.
| What | Path |
|---|---|
| Session logs (JSONL, one per run) | ~/.pi-go/log/<yyyy-mm-dd>/session-HH-MM-SS.log |
| Session state (resumable) | ~/.pi-go/sessions/<id>/ — events.jsonl, meta.json, trajectory.atif.json |
| Detector source | internal/tui/agent_loop.go |
Log rows are {"time","type","content",...} with type in session_start,
thinking, llm_text, tool_call, tool_result, user, error. The model
name is on the session_start row — always record it, findings are per-model.
stuckDetector (internal/tui/agent_loop.go:119) has three independent arms:
observe — identical consecutive tool calls, trips at maxRepeatToolCalls=10.
Pagination args are stripped first (volatileToolArgs), so paging one file
collapses to one fingerprint.observeError — same tool failing maxToolErrorStreak=10 times running.observeOutput (:246) — the model's own text/thinking. Needs a period ≥
minOutputPeriod=16 bytes, ≥ minPeriodVariety=8 distinct bytes, and
maxOutputRepeats=12 byte-exact back-to-back copies inside an 8 KB tail.The third arm is the only one that sees a turn making no tool calls at all.
outBuf is never reset across a run, and the thinking branch (:690) skips
dedup.SkipText, unlike the text branch (:697).
Timeline caveat — check this before judging any old log. Sessions predating these commits cannot be compared against current behavior:
| Commit | Landed | Effect |
|---|---|---|
e069b34 | 2026-08-08 06:56:44 +0200 | added observeOutput (the phrase-repetition arm) |
5a4cb8b | 2026-08-08 18:52:42 +0200 | stopped aborting productive polling (bash_output) |
Sweep the corpus for scale and per-model distribution:
python3 .pi-go/skills/pi-loop-forensics/scan_logs.pyReports per model: session count, aborts, longest tool-free thinking run (max/p95), worst periodic repetition. Also lists aborted sessions and the top offenders. Loops are almost always concentrated in one model.
Score individual logs:
python3 .pi-go/skills/pi-loop-forensics/score_run.py ~/.pi-go/log/*/session-*.logThree metrics per log: think_run (longest tool-free thinking run),
reps/period (longest byte-exact periodic tail), intent/calls
("let me write/run/test" phrases vs actual tool calls). A high intent:calls
ratio is the signature of announce-but-never-act.
reps>=12 is the reliable discriminator. The think_run>=20 arm is
heuristic and does produce false positives on models that legitimately think
in long bursts — confirm with reps before calling it a loop.
Discriminate the cause. Run all three tests; do not stop at the first plausible one.
thinking payload in the session
and count exact duplicates, and check timestamps. Genuine model output has
zero duplicate payloads, varied lengths, and monotonic timestamps
spaced by stream latency. Duplicated payloads or identical timestamps
would mean pi-go re-emitted chunks — a real bug in the stream path.<tool_call, <function, tool_calls,
"name":...,"arguments", ```json, <think>, <|tool. If the model
emitted a call the provider layer failed to parse, the raw syntax shows up
in a text channel and the model never receives a result — which looks
exactly like a loop. Zero matches rules this out.If all three are ruled out, it is inference-level repetition collapse, and the fix is a provider/sampling question, not a pi-go parsing question.
A/B replay across providers. Find a seed session whose last persisted
event is the tool result immediately before the spiral — the degenerate
thinking usually never gets committed to events.jsonl, so resuming
restores the exact pre-failure state and the next turn is the one that broke.
# From an isolated worktree — a resumed agent can write files.
PI=/path/to/pi TRIALS=3 OUT=/tmp/ab-replay \
bash .pi-go/skills/pi-loop-forensics/ab_replay.shArms are ollama-cloud, ollama-local, opencode (override with
ARMS="ollama-cloud opencode"). Each arm runs a preflight one-shot first
and is skipped with its error if credentials are dead, so a bad key costs one
call instead of every trial. Override the seed with SEED=<session-id>.
Per trial the script copies the seed to a throwaway session ID (the original
is never mutated), rewrites meta.json (id/model/provider/workDir),
resumes with --trace-http --mode print, scores the log, and deletes the copy.
--trace-http writes full request/response bodies to the session log.
Credentials are masked (internal/provider/provider.go:440); prompts and
source context are not.num_predict (internal/provider/ollama.go:104-110)
— no repeat_penalty, repeat_last_n, temperature. A looping Ollama model
currently has no tunable knob, which makes provider A/B the informative test.pi ping is not trustworthyVerified 2026-08-09. pi ping resolves URLs and credentials differently from the
real agent path, so a ping failure is not evidence a provider is down.
Confirm with a one-shot real run instead:
./pi --model <model> --mode print "reply with exactly: OK"Observed ping-only failures, all of which the real path handled fine:
| Symptom | Cause |
|---|---|
DNS resolution failed: lookup : no such host (empty host) on opencode/* | ping never applies opencodeDefaultBaseURL (internal/provider/opencode.go:62) |
<model>:cloud dials localhost:11434 despite OLLAMA_API_KEY being set | ping does not pass the key, so the cloud-URL switch (internal/provider/ollama.go:38) never fires |
dial tcp [::1]:11434: connection refused while the daemon is up | ping's dialer picks the IPv6 literal; the Ollama daemon binds IPv4. Pass --url http://127.0.0.1:11434 |
Keys live in ~/.pi-go/.env and <repo>/.pi-go/.env; pi-go merges both
(internal/config/config.go:387-389). Neither is in a shell profile, so an
agent's own shell will not have them exported — but pi-go reads the files
itself, so that only matters for scripts that gate on env vars.
/pi-loop-forensics — sweep all logs, report per-model loop distribution© dimetron, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files in .pi-go/skills/pi-loop-forensics of dimetron/pi-go.
Open the folder on GitHubat commit 24d1f2b
Pi Loop Forensics next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pi Loop Forensics this skilldimetron/pi-go | 207 | — | ~2.1k | Automated safety check: Notes | MIT | |
| Show Me Your Work Decision Logcursor/plugins | 10k | 9 repos | ~1.6k | Automated safety check: Pass | None | |
| Autoresearch Iteration Loopuditgoenka/autoresearch | 6.5k | 1 repos | ~2k | Automated safety check: Pass | MIT | |
| PUA Looptanweai/pua | 20k | 1 repos | ~1.1k | Automated safety check: Pass | MIT | |
| AutopilotYeachan-Heo/oh-my-claudecode | 40k | 1 repos | ~4.4k | Automated safety check: Pass | MIT | |
| Install Loop Engineeringcobusgreyling/loop-engineering | 11k | 1 repos | ~648 | Automated safety check: Pass | MIT |
cursor/plugins
Keeps a TSV decision log for long or unattended agent runs, one row per decision with what, why, evidence and result, so a reviewer can check the work later.
uditgoenka/autoresearch
Runs an autonomous modify, verify, keep-or-discard loop against any metric, with subcommands for planning, debugging, fixing, security audits, shipping and more.
tanweai/pua
Runs an unattended iterate-until-verified loop in which a user-set verify command, not the agent's own claim, decides when the task is finished.
Yeachan-Heo/oh-my-claudecode
Takes a short product idea through requirements, design, planning, parallel implementation, QA cycles and multi-reviewer validation to produce working code.
cobusgreyling/loop-engineering
Installs Loop Engineering into a project through the single @cobusgreyling/loop CLI, scaffolding a report-only loop and a readiness score.
Forward-Future/loopy
Discover, find, compare, audit, repair, adapt, craft, run, debrief, save, and prepare repeatable AI-agent loops for publication.
dimetron/pi-go
Record a test run, a TUI session, or any terminal command as a GIF with VHS and attach it to a GitHub PR as a release-hosted asset, never a repo commit.
dimetron/pi-go
Generate AGENTS.md files for Go, Rust, TypeScript, and Java projects.
dimetron/pi-go
A skill your agent uses whenever writing tests for Bubble Tea (charmbracelet/bubbletea) TUI applications in Go.
dimetron/pi-go
Index a folder's contents into the MemPalace semantic memory for search and retrieval.
dimetron/pi-go
Nightly sweep of the last 24h of pi-go sessions — anomalous runs, loop aborts, tool error rates, token waste, real prompt-token spend, and whether the observation and palace pipelines are still…
dimetron/pi-go
Tune macOS resource limits and sysctls for best performance with Go development, Docker/OrbStack, and Linux VMs.
Categories
Diagnose pi-go agent loops and degenerate turns — "agent loop aborted", runaway thinking with no tool calls, repeated phrases. Pi Loop Forensics is an agent skill from dimetron/pi-go. Diagnose pi-go agent loops and degenerate turns — "agent loop aborted", runaway thinking with no tool calls, repeated phrases.
Pi Loop Forensics fits situations like: tasks that involve Autonomous loops.
Run `npx skills add dimetron/pi-go --skill pi-loop-forensics -a claude-code`. Or copy the skill folder (.pi-go/skills/pi-loop-forensics in dimetron/pi-go) into .claude/skills/pi-loop-forensics in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dimetron/pi-go --skill pi-loop-forensics -a codex`. Or copy the skill folder (.pi-go/skills/pi-loop-forensics in dimetron/pi-go) into .agents/skills/pi-loop-forensics in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dimetron/pi-go --skill pi-loop-forensics -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pi-loop-forensics, .gemini/skills/pi-loop-forensics, .github/skills/pi-loop-forensics and .opencode/skills/pi-loop-forensics in your project.
Going by SKILL.md and its folder, Pi Loop Forensics needs Python and a shell for the scripts in its folder, the command-line tools its instructions call (python3 and bash) and credentials named OLLAMA_API_KEY. Our summary lists: Python 3; A Bash shell; A credential in OLLAMA_API_KEY.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Pi Loop Forensics is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pi Loop Forensics: Show Me Your Work Decision Log (cursor/plugins, 10k stars), Autoresearch Iteration Loop (uditgoenka/autoresearch, 6.5k stars), PUA Loop (tanweai/pua, 20k stars) and Autopilot (Yeachan-Heo/oh-my-claudecode, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
dimetron (a GitHub user) maintains it in dimetron/pi-go, which has 207 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 1, 2026.
Source: dimetron/pi-go on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.