kookr-oss-pr-statelisted
Install: claude install-skill kookr-ai/kookr
# OSS PR State
Persist observations and update tracking state after each batch. Generalized version of `codex-pr-state`.
## When to Use
Invoked after the critic phase completes for a batch.
## Non-Negotiable Rules
| # | Rule | Violation Example | Correct Pattern |
|---|------|-------------------|-----------------|
| 1 | Append to learnings-raw.md, never overwrite | Writing fresh file that drops prior learnings | Append batch section to end of file |
| 2 | Update state.json atomically | Writing partial state on error | Read -> modify -> write complete JSON |
| 3 | Add ALL batch PR IDs to processed_prs | Only adding merged PRs | Add every analyzed PR, merged or not |
| 4 | Add skipped PR IDs to skipped_prs | Forgetting skipped PRs | Track skips separately from processed |
| 5 | Never commit state files | `git add state.json` | All state files live in `~/.claude/{repoSlug}-pr-lessons/` |
| 6 | Timestamp each batch entry | Undated learnings | Include ISO date in batch header |
## Parameters
- **repoFullName**: `owner/repo`
- **repoSlug**: URL-safe slug
## State File Schema (state.json)
```json
{
"repo": "owner/repo",
"version": 1,
"processed_prs": [101, 102, 103],
"skipped_prs": [50, 51],
"total_processed": 3,
"total_skipped": 2,
"distillation_count": 0,
"last_batch_at": "2026-03-26T10:00:00Z",
"last_distillation_at": null,
"cursor": 2,
"notes": "State file for {repoFullName} PR lessons."
}
```
> **`repo` is required.** Kookr's dashboard reads this