Skip to content
Back to skills

Kookr Oss Pr State

ASecurity

State management for oss-pr-lessons playbook — persist learnings and update tracking state for any repository

  • 5 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 2, 2026
developmentgobashgit

Works with

  • cursor

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add kookr-ai/kookr --skill kookr-oss-pr-state --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Kookr Oss Pr State?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Kookr Oss Pr State
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kookr-ai-kookr-oss-pr-state/badge)](https://www.skillsdirectory.com/skills/kookr-ai-kookr-oss-pr-state)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: kookr-oss-pr-state
description: State management for oss-pr-lessons playbook — persist learnings and update tracking state for any repository
keywords: oss, pr, state, learnings, persist, json, open source
related: [oss-pr-plan, oss-pr-critic, oss-pr-threshold, oss-pr-distill]
---

# 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 field to match PR lessons state to projects. Without it, the project's PR lessons count will not display.

## Workflow

### Step 1: Read current state

```bash
SLUG="{{repoSlug}}"
cat ~/.claude/${SLUG}-pr-lessons/state.json
```

### Step 2: Append batch learnings to raw file

Append a batch section to `learnings-raw.md`:

```markdown
## Batch {YYYY-MM-DD} (PRs: #{n1}, #{n2}, #{n3}, #{n4}, #{n5})

{Critic output for each PR — the structured observation blocks}

### Batch-Level Observations

- {Cross-PR pattern noticed in this batch}
- {Contrast between merged vs rejected PRs in this batch}

---
```

### Step 3: Update state.json

```bash
SLUG="{{repoSlug}}"
NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)

cat ~/.claude/${SLUG}-pr-lessons/state.json | jq \
  ".processed_prs += [NEW_IDS] | .total_processed = (.processed_prs | length) | .last_batch_at = \"${NOW}\"" \
  > /tmp/state-tmp.json && mv /tmp/state-tmp.json ~/.claude/${SLUG}-pr-lessons/state.json
```

For skipped PRs:
```bash
cat ~/.claude/${SLUG}-pr-lessons/state.json | jq \
  '.skipped_prs += [SKIP_IDS] | .total_skipped = (.skipped_prs | length)' \
  > /tmp/state-tmp.json && mv /tmp/state-tmp.json ~/.claude/${SLUG}-pr-lessons/state.json
```

### Step 4: Verify integrity

1. Confirm valid JSON: `jq . ~/.claude/${SLUG}-pr-lessons/state.json > /dev/null`
2. Confirm no duplicates: `jq '.processed_prs | unique | length == (.processed_prs | length)' ~/.claude/${SLUG}-pr-lessons/state.json`
3. Confirm learnings-raw.md was appended (prior batch headers still exist)

## Recovery

If state.json becomes corrupted:
1. Reconstruct `processed_prs` from learnings-raw.md batch headers
2. Reset cursor to 1 (will re-scan pages but skip known PRs)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.