Skip to content
Back to skills

Bullpen Learn

ASecurity

Use this skill after a bullpen agent completes a task to extract 0-3 durable learnings (decisions, patterns, preferences, failures, or code snippets) and write them to the project's local memory store (`<project>/.bullpen/memory.json`) under that agent's namespace. The matching Intern agent runs this. Keep each learning self-contained and project-scoped.

  • 9 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 1, 2026
ai-agentspythonbashsqlnodegitapifrontendbackendperformance

Works with

  • api

Security analysis

A100/100

Scanned June 1, 2026

npx -y skills add Manavarya09/bullpen --skill bullpen-learn --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Bullpen Learn?

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

Security grade badge for Bullpen Learn
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/manavarya09-bullpen-learn/badge)](https://www.skillsdirectory.com/skills/manavarya09-bullpen-learn)

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: bullpen-learn
description: Use this skill after a bullpen agent completes a task to extract 0-3 durable learnings (decisions, patterns, preferences, failures, or code snippets) and write them to the project's local memory store (`<project>/.bullpen/memory.json`) under that agent's namespace. The matching Intern agent runs this. Keep each learning self-contained and project-scoped.
---

# bullpen-learn

This skill is invoked by the matching Intern after a senior bullpen agent finishes a task. It extracts durable learnings and persists them so future sessions can recall them via `bullpen-memory`.

## When to use

After every senior agent task completes successfully OR fails informatively. Triggered by the `post-agent.sh` hook enqueueing the (`agent_id`, `timestamp`, `status`) tuple.

Skip if:
- The senior agent's output was trivially short (under ~200 chars) — nothing durable to learn.
- The task was a pure read (`/bullpen-knowledge`, etc.) — no new learning.
- An identical learning already exists in the namespace (deduplicate by exact text).

## Intern routing

Pick the right Intern based on the senior agent's department:

| Senior Department | Logging Intern | Namespace |
|---|---|---|
| Frontend, Mobile, CSS, UI Designer, Brand Designer | Pip (frontend-intern) | senior's role |
| Backend, API, Node, Python, Microservices, Infra (all), QA, Test Auto, Performance, Game Dev, Graphics, Hardware, IoT, AR/VR, Blockchain | Ash (backend-intern) | senior's role |
| Product Designer, UX Designer, UX Researcher, Game Designer | Wren (design-intern) | senior's role |
| DBA, Data Engineer, Data Scientist, ML, AI/LLM | Skye (data-intern) | senior's role |
| Marketing (all), Sales (all) | Lex (marketing-intern) | senior's role |
| Leadership, PM, EM, CEO, CTO, Operations, Legal, Finance, HR, R&D, Solutions Architect, Tech Writer, Code Reviewer, Coach | (no intern persona) | `bullpen-shared` |

## What to extract

Read the senior's task summary + output. Identify 0-3 **durable** facts that would help the same agent next time. Each gets a `type`:

- **decision** — a choice the user made between alternatives. *"User chose Postgres over MySQL because of JSONB."*
- **pattern** — a code or design convention now established in the project. *"All forms use `useFormHook` wrapper."*
- **preference** — a personal preference of the user. *"User prefers Tailwind over CSS modules."*
- **failure** — a thing that didn't work and should be avoided. *"Tried Drizzle migrations — user reverted, prefers Prisma."*
- **snippet** — a short, reusable code excerpt (≤500 chars) tied to context.

**Skip non-durable noise**: one-off task descriptions, conversational chatter, questions the user asked, generic best-practice advice not specific to this project.

## How to write

Memory lives at `<project root>/.bullpen/memory.json` — per-project, plain JSON, no daemons. Use the bundled memory module:

```bash
node ${CLAUDE_PLUGIN_ROOT}/scripts/memory.js upsert <namespace> '<json-record>'
```

Record shape:

```json
{
  "id": "<uuid>",
  "text": "<the learning, natural language, complete sentence>",
  "type": "decision | pattern | preference | failure | snippet",
  "agent_role": "<senior_role>",
  "project_path": "<absolute path>",
  "created_at": "<ISO 8601>",
  "session_id": "<session id>",
  "ref_files": "<comma-separated list of files referenced, may be empty>"
}
```

The store auto-creates `<project>/.bullpen/memory.json` on first write and adds `.bullpen/` to `.gitignore` so memory stays private by default. Users can manually `git add .bullpen/memory.json` if they want team-shared learnings.

## After writing

If at least one learning was written, emit a short stderr line that the status-line script can pick up briefly:

```
(•) Pip logged 2 learnings
```

(Replace `Pip` with the intern's persona name and the count with the actual number.)

## Rules

- Each learning is one complete sentence. No bullet lists, no nested structure.
- Project-scope every learning by setting `project_path`. The reader filters on this first.
- Idempotency: if the new learning's text is already present (case-insensitive exact match) in the namespace, skip the upsert.
- Never log secrets, API keys, full file contents, or PII. The Intern's system prompt enforces this.
- Cap output at 3 learnings per task even if more are tempting — quality over quantity keeps retrieval signal high.

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.