Skip to content
Back to skills

Continuous Learning

ASecurity

Stop-hook session-end pattern extractor (v1) — flags sessions worth mining and saves reusable patterns as one-file learned skills under ~/.claude/skills/learned/. Use when wiring, testing, or debugging the Stop-hook extractor, tuning its config.json thresholds, or extracting a session's patterns manually via /learn. Superseded by continuous-learning-v2 (deterministic PreToolUse/PostToolUse instinct learning with confidence scoring and project scoping) for ongoing automatic capture — do NOT us...

  • 3 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 11, 2026
testingrustgobashtestingdebuggingapi

Works with

  • claude code
  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 11, 2026

npx -y skills add SkyyRoseLLC/DevSkyy --skill continuous-learning --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Continuous Learning?

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

Security grade badge for Continuous Learning
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/skyyrosellc-continuous-learning/badge)](https://www.skillsdirectory.com/skills/skyyrosellc-continuous-learning)

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: continuous-learning
description: Stop-hook session-end pattern extractor (v1) — flags sessions worth mining and saves reusable patterns as one-file learned skills under ~/.claude/skills/learned/. Use when wiring, testing, or debugging the Stop-hook extractor, tuning its config.json thresholds, or extracting a session's patterns manually via /learn. Superseded by continuous-learning-v2 (deterministic PreToolUse/PostToolUse instinct learning with confidence scoring and project scoping) for ongoing automatic capture — do NOT use this skill for instinct/confidence-scored learning, project-scoped instincts, or guaranteed per-tool-call observation; that is continuous-learning-v2.
---

# Continuous Learning Skill (v1 — Stop-hook extractor)

Runs as a **Stop hook** (`evaluate-session.sh`) that fires once at session end. The script counts
user messages in the transcript, skips short sessions (below `min_session_length`, default 10), and
emits a stderr signal telling Claude to mine the session for extractable patterns and where to save
them.

**Relationship to continuous-learning-v2:** v2 (`~/.claude/skills/continuous-learning-v2/`, also
shipped as the `skyyrose-core:continuous-learning-v2` plugin skill) supersedes this skill as the
primary learning path — deterministic PreToolUse/PostToolUse observation hooks, atomic instincts,
confidence scoring, project-scoped storage. v2's own Backward Compatibility section keeps this v1
Stop hook running in parallel as the lightweight session-end extractor, feeding
`~/.claude/skills/learned/`. Use v1 for that narrow job only; everything else belongs to v2.

## When to use

- Installing the Stop hook into `~/.claude/settings.json`, or diagnosing why it never fires.
- Tuning `config.json` (`min_session_length`, `patterns_to_detect`, `ignore_patterns`,
  `learned_skills_path`).
- Responding to the hook's end-of-session signal by extracting patterns from the just-finished
  session.
- Manual extraction mid-session via the `/learn` command
  (`~/.claude/commands/learn.md`, also present in this worktree at `.claude/commands/learn.md`).

**When NOT to use:**

- Instinct-based learning, confidence scoring, project-scoped instincts, `/evolve`, `/promote` —
  that is `continuous-learning-v2`.
- Repo engineering lessons and behavioral corrections — those go to
  `docs/engineering-learnings.md` / `tasks/lessons.md` / `.wolf/buglog.json` per CLAUDE.md §8, not
  to a learned skill file.
- One-time fixes, simple typos, external-API flakes — explicitly listed in `ignore_patterns`.

## Inputs

| Input | Required state | If absent |
|---|---|---|
| `evaluate-session.sh` + `config.json` in this skill's directory | Present, script executable | **Stop.** Nothing to wire; re-fetch the skill files |
| `jq` on `PATH` | Installed | **Stop and install.** With `config.json` present, the script calls `jq` under `set -e` — a missing `jq` kills the hook with a non-zero exit, not a graceful default |
| `CLAUDE_TRANSCRIPT_PATH` env var | Set by Claude Code when the hook fires | Manual runs without it exit `0` silently **by design** (hook no-op). For a manual test you MUST point it at a transcript fixture — never read a silent no-op as a passing test |
| Hook entry in `~/.claude/settings.json` | `Stop` hook pointing at `evaluate-session.sh` | Skill is inactive — no signal will ever appear. Wire it first (Procedure step 1) |

`config.json` knobs: `min_session_length` (default 10), `extraction_threshold`, `auto_approve`,
`learned_skills_path` (default `~/.claude/skills/learned/`), `patterns_to_detect`,
`ignore_patterns`.

## What gets extracted

- Error resolution patterns
- User correction patterns
- Framework workarounds
- Debugging techniques
- Project-specific conventions

Ignored (per `ignore_patterns`): simple typos, one-time fixes, external API issues.

## Procedure

1. Wire the Stop hook in `~/.claude/settings.json` (path adjusted to where this skill lives):

   ```json
   {
     "hooks": {
       "Stop": [{
         "matcher": "*",
         "hooks": [{
           "type": "command",
           "command": "~/.claude/skills/continuous-learning/evaluate-session.sh"
         }]
       }]
     }
   }
   ```

2. Verify the wiring exists (see Verification check 4) before trusting any "no patterns this
   session" outcome — an unwired hook is silent, and silence reads as success (fail-open,
   bug-230 pattern).

3. At session end the hook prints to stderr either
   `[ContinuousLearning] Session too short (N messages), skipping` or
   `[ContinuousLearning] Session has N messages - evaluate for extractable patterns` plus the
   save path. On the second signal, review the session against `patterns_to_detect` and drop
   anything matching `ignore_patterns`.

4. Save each extracted pattern to `learned_skills_path` as `[pattern-name].md` — kebab-case name,
   **one pattern per file**:

   ```markdown
   # [Pattern Name]
   **Context:** [When this applies]
   ## Problem - Solution - When to Use
   ```

5. For mid-session extraction without waiting for the Stop hook, run `/learn`.

## Verification

Run from the skill directory (`SKILL=/Users/theceo/DevSkyy/.claude/worktrees/glimmering-crafting-shannon/.claude/skills/continuous-learning`).
Each check can return "no":

```bash
bash -n "$SKILL/evaluate-session.sh"        # 1. PASS: exits 0 (script parses)
jq empty "$SKILL/config.json"               # 2. PASS: exits 0 (config parses)
T=$(mktemp -d)                              # 3. prove the length gate can fail BOTH ways
printf '{"type":"user"}\n{"type":"user"}\n{"type":"user"}\n' > "$T/short.jsonl"
CLAUDE_TRANSCRIPT_PATH="$T/short.jsonl" bash "$SKILL/evaluate-session.sh"
                                            #    PASS: stderr "Session too short (3 messages), skipping", exits 0
for i in $(seq 1 12); do printf '{"type":"user"}\n'; done > "$T/long.jsonl"
CLAUDE_TRANSCRIPT_PATH="$T/long.jsonl" bash "$SKILL/evaluate-session.sh"
                                            #    PASS: stderr "evaluate for extractable patterns" + save path
grep -c 'continuous-learning/evaluate-session.sh' ~/.claude/settings.json
                                            # 4. PASS: prints >= 1. 0 = hook INACTIVE (unwired)
```

Checks 1–3 earn `[repro]` (ran and observed); check 4 earns `[repo]` (reads the settings file, not
live hook execution). A run where check 3's short fixture does not print the skip line, or the long
fixture does not print the evaluate line, is a broken gate — do not proceed to extraction.

## Worked example

Real run, 2026-07-29, this worktree (`$SCRATCH` = the session scratchpad dir; fixtures were
synthetic transcripts):

```bash
$ bash -n "$SKILL/evaluate-session.sh"; echo "syntax-check exit:$?"
syntax-check exit:0
$ jq empty "$SKILL/config.json"; echo "config-parse exit:$?"
config-parse exit:0
$ printf '{"type":"user"}\n{"type":"user"}\n{"type":"user"}\n' > "$SCRATCH/short-transcript.jsonl"
$ CLAUDE_TRANSCRIPT_PATH="$SCRATCH/short-transcript.jsonl" bash "$SKILL/evaluate-session.sh"
[ContinuousLearning] Session too short (3 messages), skipping
$ for i in $(seq 1 12); do printf '{"type":"user"}\n'; done > "$SCRATCH/long-transcript.jsonl"
$ CLAUDE_TRANSCRIPT_PATH="$SCRATCH/long-transcript.jsonl" bash "$SKILL/evaluate-session.sh"
[ContinuousLearning] Session has 12 messages - evaluate for extractable patterns
[ContinuousLearning] Save learned skills to: /Users/theceo/.claude/skills/learned/
```

Both branches of the length gate observed firing — the 3-message fixture was skipped, the
12-message fixture triggered extraction with the save path. `[repro]`

## Failure modes

- **Hook never wired → silent inactivity.** No error, no signal, and "no learned skills" looks
  identical to "nothing worth learning". This is the fail-open pattern (bug-230): absence of the
  gate reads as a pass. Verification check 4 exists for exactly this.
- **`jq` missing → hook dies.** `set -e` + command substitution means a missing `jq` exits the
  script non-zero when `config.json` is present. Symptom: Stop-hook error at session end.
- **Manual run without `CLAUDE_TRANSCRIPT_PATH` → deceptive green.** The script exits 0 having
  done nothing. Only a run against a fixture (Verification check 3) proves behavior.
- **Extracting noise.** One-time fixes, typos, and external-API flakes are in `ignore_patterns`
  for a reason — a learned-skills directory full of noise buries the real patterns.
- **Multiple patterns in one file.** Keep skills focused — one pattern per file, kebab-case
  filename, or downstream reuse and pruning both degrade.
- **Expecting guaranteed capture from v1.** Skill/Stop-hook-based observation is session-end-only
  and coarse; v2 moved to PreToolUse/PostToolUse hooks precisely because per-tool-call capture
  must be deterministic. Needing that guarantee here means you are in the wrong skill — use
  `continuous-learning-v2`.

Files in this skill

  • SKILL.md8.7 KB
  • config.json391 B
  • evaluate-session.sh2 KB

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.