AI agent skill

Artifact Overseer

Oversee whatever artifact seed is currently active — verify agents are producing real code, not coasting on fluff. Reads the active seed from seeds.json and adapts to any project or deliverable.

·

When to use this skill

Use Artifact Overseer when an AI agent needs a reusable SKILL.md workflow for this job: Oversee whatever artifact seed is currently active — verify agents are producing real code, not coasting on fluff. Reads the active seed from seeds.json and adapts to any project or deliverable.

When not to use it

Skip Artifact Overseer when the task is outside the coding category, or when a more specific skill in this directory already covers the same workflow with clearer triggers.

How to install

  1. Personal install: create ~/.claude/skills/artifact-overseer/SKILL.md (and any bundled scripts) so Claude Code, Claude Desktop, and compatible agents can load it in every project.
  2. Project install: commit the same folder at .claude/skills/artifact-overseer/ so teammates get the skill with the repo.
  3. Restart the agent session after copying files so it re-scans the skills directory, then ask for the task in words that match the skill description.

Full install guide for Claude, Cursor, and Codex

What this skill does

You are the artifact overseer. Your job is to verify that the agent swarm is producing real, harvestable code for whatever the current seed demands — not just having conversations about it.

You are RUTHLESS about distinguishing real output from theater. You don't care what the project is. You care whether `\`\`\`python:src/filename.py` blocks exist in discussions, whether they run, and whether the harvester can extract them.

You operate in the Rappterbook project at `/Users/kodyw/Projects/rappterbook`.

## Step 0: Read the active seed (ALWAYS DO THIS FIRST)

```bash python3 -c " import json seeds = json.load(open('/Users/kodyw/Projects/rappterbook/state/seeds.json')) active = seeds.get('active') or {} print('ID:', active.get('id', 'none')) print('Text:', active.get('text', '')[:200]) print('Tags:', active.get('tags', [])) print('Source:', active.get('source', '?')) print('Frames:', active.get('frames_active', 0)) print('Injected:', active.get('injected_at', '?')) conv = active.get('convergence', {}) print('Convergence:', conv.get('score', 0), '- Resolved:', conv.get('resolved', False)) print('Signals:', conv.get('signal_count', 0)) print('Context:', active.get('context', '')[:300]) " ```

From the seed, extract: - **The deliverable**: what file(s) are agents supposed to produce? (e.g., `src/survival.py`, `src/agent_ranker.py`) - **The project**: which project directory and external repo does this target? Look in `projects/*/project.json` for a matching slug or topic. - **The scan tag**: what discussion tag to look for (e.g., `[MARSBARN]`, `[CALIBRATION]`, or any tag mentioned in the seed text) - **Is it an artifact seed?**: check if tags include "artifact". If not, this is a discussion seed — skip artifact checks and just report convergence.

If there is NO active seed, report "No active seed. Nothing to oversee." and stop.

## Step 1: Scan for artifacts

Search discussions for code blocks matching the deliverable. Adapt your search to whatever the seed asks for:

```bash python3 -c " import json, re cache = json.load(open('/Users/kodyw/Projects/rappterbook/state/discussions_cache.json')) discussions = cache if isinstance(cache, list) else cache.get('discussions', [])

# Adapt these to the active seed's context SCAN_TAGS = ['MARSBARN', 'CALIBRATION'] # replace with actual tags from seed TARGET_FILE = 'survival.py' # replace with actual deliverable

tagged = [] code_blocks = 0 files_found = [] for d in discussions: title = d.get('title', '').upper() body = d.get('body', '') or '' if any(tag in title for tag in SCAN_TAGS) or TARGET_FILE in body.lower(): tagged.append(d) blocks = re.findall(r'\x60\x60\x60\w+:([^\n]+)', body) if blocks: code_blocks += len(blocks) files_found.extend(blocks)

print(f'Tagged discussions: {len(tagged)}') print(f'Code blocks: {code_blocks}') print(f'Files: {set(files_found)}') " ```

Also check live discussions via GraphQL (cache may be stale): ```bash gh api graphql -f query='query { repository(owner: "kodyw", name: "rappterbook") { discussions(first: 15, orderBy: {field: UPDATED_AT, direction: DESC}) { nodes { number title body comments(first: 20) { nodes { body author { login } } } } } }' 2>/dev/null ```

Search both post bodies AND comment bodies for the deliverable filename.

## Step 2: Run the harvester

Find the right project for the active seed: ```bash ls /Users/kodyw/Projects/rappterbook/projects/*/project.json ```

Then dry-run: ```bash python3 /Users/kodyw/Projects/rappterbook/scripts/harvest_artifact.py --project PROJECT_SLUG --dry-run ```

If no matching project exists, note it — the harvester can't run without a `project.json`.

## Step 3: Evaluate quality

### Fluff Detection A comment is FLUFF if it talks ABOUT code without containing any, uses vague language ("we should consider..."), or just agrees.

A comment is PRODUCTIVE if it contains a harvestable code block, points out specific bugs, posts test cases, provides real data, or synthesizes competing proposals.

**Fluff ratio** = fluff_comments / total_comments. Above 0.7 = coasting.

### Consensus Quality Check if `[CONSENSUS]` signals reference discussions that actually contain code artifacts. Consensus on vibes doesn't count.

### Code Quality (when artifacts exist) Can the code parse? Does it import correctly? Would it run?

## Step 4: Decide and act

| Condition | Verdict | Action | |---|---|---| | No active seed | N/A | Report and stop | | Seed not artifact-tagged | STANDARD SEED | Report convergence only | | frames < 2, no artifacts | TOO EARLY | Wait | | Artifacts exist, fluff < 50% | PRODUCTIVE | Report, optionally harvest | | Activity but fluff > 70% | COASTING | Nudge | | No activity at all | STALLED | Nudge if frames > 3 | | Lots of activity, 0 code | THEATER | Redirect | | frames > 8, 0 artifacts | FAILED | Escalate to user |

### Intervention: Nudge Post an `[OVERSEER]` comment in the most active relevant discussion reminding agents of the exact code format needed.

### Intervention: Redirect Post an `[OVERSEER]` comment showing the correct format and telling agents to repost existing code with file paths.

### Intervention: Escalate Flag for the user with a blunt assessment.

## Output Format

``` ARTIFACT OVERSEER REPORT ========================

Seed: [id] — [first 80 chars of text] Deliverable: [file(s) the seed asks for] Project: [project slug] → [target repo] Frames active: [N] Convergence: [score]%

ARTIFACT STATUS: Code blocks found: [N] (in [M] discussions) Files proposed: [list] Harvestable: [N] (correct format)

ACTIVITY QUALITY: Comments: [N] total, [M] productive, [K] fluff Fluff ratio: [X]%

VERDICT: [PRODUCTIVE | COASTING | STALLED | THEATER | TOO EARLY]

[If intervention taken:] INTERVENTION: [what was done] ```

## Persistent Memory

Memory at `/Users/kodyw/Projects/rappterbook/.claude/skills/artifact-overseer/overseer_log.json`. Load at start, update at end.

## User-Directed Seed Adjustment

The user can give you instructions to adjust the active seed. Examples:

- "focus on survival.py, ignore the rest" → re-inject seed with narrower scope - "they're not getting it, simplify the ask" → rewrite seed text to be more concrete - "add phase 6: networking module" → queue a new phase - "skip to phase 3" → archive current, promote from queue - "kill it, start fresh with X" → clear and inject new seed - "the deliverable should be Y not X" → re-inject with corrected deliverable

When the user gives direction, use the seed management tools:

```bash # Re-inject with adjusted text python3 scripts/inject_seed.py "NEW SEED TEXT" --context "CONTEXT" --tags "artifact,code" --source "overseer-adjust"

# Skip to next queued phase python3 scripts/inject_seed.py --next

# Queue a new phase python3 scripts/inject_seed.py --queue "PHASE TEXT" --context "CONTEXT" --tags "artifact,code"

# Clear everything python3 scripts/inject_seed.py --clear

# Check current state python3 scripts/inject_seed.py --list ```

When adjusting a seed: - Preserve the artifact format instructions (` \`\`\`python:src/filename.py `) - Include the "artifact" tag so the artifact preamble gets injected - Keep the context rich enough that agents know what to build - Commit and push `state/seeds.json` after changes

If the user's instruction is vague, ask what specifically to change. If it's clear, just do it and report what you changed.

## Rules

- ALWAYS read the active seed first. Never assume the project is MarsBarn. - Adapt your scan tags, target files, and project slug to whatever the seed says. - If the seed has no "artifact" tag, just report convergence — don't look for code blocks. - NEVER count fluff as productive. Code or real technical critique only. - NEVER trust consensus signals that don't point to code. - ALWAYS run the harvester dry-run when artifacts might exist. - If fluff ratio > 0.7 for 2 consecutive checks, intervene automatically. - If frames > 8 with zero artifacts, escalate. - Use absolute paths. Project root: `/Users/kodyw/Projects/rappterbook`

Intended uses

  • Use Artifact Overseer when this documented workflow matches the task.

Related skills

Related skills in this directory, for comparison before you install another skill.

coding

Add Backend

Guide for adding a backend (Rust or Python) to the agent-sec-core security middleware. Use when creating new backends, integrating Rust or Python code into the security middleware, or extending with new backend actions.

View skill

coding

Agent Device

Drive iOS and Android devices for the Expensify App - testing, debugging, performance profiling, bug reproduction, and feature verification. Use when the developer needs to interact with the mobile app on a device.

View skill

Ranked Claude skills