AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified Apache-2.0 Self-run

Learn

skill-mattjaikaran-meridian-learn · by mattjaikaran

A Claude skill from mattjaikaran/meridian.

No reviews yet
0 installs
33 views
0.0% view→install

Install

$ agentstack add skill-mattjaikaran-meridian-learn

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access Used
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-mattjaikaran-meridian-learn)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
4mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Learn? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

/meridian:learn — Execution Learning System

Capture patterns and mistakes as persistent rules injected into future subagent prompts.

Arguments

  • `` — The learning to capture (freeform text)
  • --list — Show all learnings
  • --prune — Remove stale/unused learnings
  • --delete — Remove a specific learning
  • --scope — Scope for the learning (default: project)
  • --source — How the learning was discovered (default: manual)
  • --extract [] — Extract structured learnings from phase artifacts
  • --extract --all — Extract from all completed phases missing LEARNINGS.md
  • --extract --pending — List phases that need extraction (dry-run, no writes)

Keywords

learn, learning, rule, pattern, remember, lesson, mistake, capture, inject, extract

Procedure

Step 1: Route by argument

If --list: Show all learnings:

PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
import json
from scripts.db import open_project
from scripts.learnings import list_learnings
with open_project('.') as conn:
    learnings = list_learnings(conn)
    print(json.dumps(learnings, indent=2, default=str))
"

Display grouped by scope (global → project → phase), showing ID, rule, source, category, and applied_count.

Also show extraction status:

PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
import json
from pathlib import Path
from scripts.extract_learnings import check_extraction_pending
status = check_extraction_pending(Path('.'))
print(json.dumps(status, indent=2))
"

If pending list is non-empty, print:

Tip: {N} phase(s) have no LEARNINGS.md — run /meridian:learn --extract to capture them.

If --prune: Remove stale learnings:

PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
from scripts.db import open_project
from scripts.learnings import prune_stale
with open_project('.') as conn:
    count = prune_stale(conn)
    print(f'Pruned {count} stale learnings')
"

If --delete : Remove specific learning:

PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
from scripts.db import open_project
from scripts.learnings import delete_learning
with open_project('.') as conn:
    deleted = delete_learning(conn, )
    print('Deleted' if deleted else 'Not found')
"

Step 1b: Route --extract variants

If --extract --pending: Show phases awaiting extraction, no writes:

PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
import json
from pathlib import Path
from scripts.extract_learnings import check_extraction_pending
status = check_extraction_pending(Path('.'))
print(json.dumps(status, indent=2))
"

Display as a table:

Phase extraction status:
  Total phase dirs : N
  Already extracted: N
  Pending          : N

Pending phases:
  - 01-database-foundation
  - 03-command-routing
  ...

If --extract --all: Extract from all pending phase dirs:

PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
import json
from pathlib import Path
from scripts.db import open_project
from scripts.extract_learnings import (
    find_phases_without_learnings,
    extract_from_phase_dir,
    write_learnings_md,
    save_extracted_to_db,
)
with open_project('.') as conn:
    pending = find_phases_without_learnings(Path('.'))
    results = []
    for phase_dir in pending:
        extraction = extract_from_phase_dir(phase_dir)
        out_path = write_learnings_md(phase_dir, extraction)
        saved = save_extracted_to_db(conn, extraction, project_id='default')
        results.append({
            'phase': phase_dir.name,
            'artifacts': extraction['artifacts_read'],
            'saved_to_db': len(saved),
            'learnings_md': str(out_path),
        })
    print(json.dumps(results, indent=2))
"

Display summary per phase showing decisions/patterns/surprises/failures counts.

If --extract with a phase dir argument (e.g., --extract 07-roadmap-automation):

Resolve the phase dir:

  • If argument looks like a path: use as-is
  • Otherwise: look under .planning/phases/ for a dir matching the slug (prefix or exact)
PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
import json
from pathlib import Path
from scripts.db import open_project
from scripts.extract_learnings import (
    extract_from_phase_dir,
    write_learnings_md,
    save_extracted_to_db,
)
phase_dir = Path('.planning/phases/')
with open_project('.') as conn:
    extraction = extract_from_phase_dir(phase_dir)
    out_path = write_learnings_md(phase_dir, extraction)
    saved = save_extracted_to_db(conn, extraction, project_id='default')
    print(json.dumps({
        'phase_dir': str(phase_dir),
        'artifacts_read': extraction['artifacts_read'],
        'decisions': extraction['decisions'],
        'patterns': extraction['patterns'],
        'surprises': extraction['surprises'],
        'failures': extraction['failures'],
        'saved_to_db': len(saved),
        'learnings_md': str(out_path),
    }, indent=2))
"

If --extract with no argument: Extract from the most recently completed phase (most recent dir in .planning/phases/ without LEARNINGS.md):

PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
from pathlib import Path
from scripts.extract_learnings import find_phases_without_learnings
pending = find_phases_without_learnings(Path('.'))
if pending:
    print(str(pending[-1]))
else:
    print('none')
"

If result is 'none', print "All phase dirs already have LEARNINGS.md." and stop.

Otherwise use the returned path as the phase dir and run the single-phase extraction above.


Step 2: Add New Learning (freeform rule, no --extract flag)

Check for duplicates first:

PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
import json
from scripts.db import open_project
from scripts.learnings import find_similar
with open_project('.') as conn:
    match = find_similar(conn, '')
    print(json.dumps(match, indent=2, default=str) if match else 'null')
"

If a similar learning exists (>70% match), show it and ask user whether to:

  • Update the existing learning
  • Add anyway as a separate learning
  • Skip (already captured)

If no duplicate, add the learning:

PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
import json
from scripts.db import open_project
from scripts.learnings import add_learning
with open_project('.') as conn:
    learning = add_learning(conn, '', scope='', source='')
    print(json.dumps(learning, indent=2, default=str))
"

Step 3: Confirm

Display the stored learning with its ID, scope, and category (if set).


Auto-Trigger: After Phase Completion

When /meridian:next or /meridian:execute transitions a phase to complete, check:

PYTHONPATH=$MERIDIAN_HOME uv run --project $MERIDIAN_HOME -- python -c "
import json
from pathlib import Path
from scripts.extract_learnings import check_extraction_pending
status = check_extraction_pending(Path('.'))
print(json.dumps(status, indent=2))
"

If pending is non-empty, emit this suggestion (non-blocking):

Learning extraction available:
  Run /meridian:learn --extract to capture decisions, patterns, surprises, and failures
  from the completed phase artifacts into LEARNINGS.md and the project DB.

Displaying Extracted Results

After extraction, display a structured summary:

Phase: 07-roadmap-automation
Artifacts read: 07-01-PLAN.md, 07-01-SUMMARY.md, VERIFICATION.md

Decisions (2):
  - We decided to use roadmap_sync.py for checkbox sync to keep state.py clean
  - Chose slug-based phase matching over ID-based for human readability

Patterns (1):
  - Always run roadmap sync as non-blocking side-effect in transition_phase

Surprises (1):
  - Turns out SQLite row_factory must be set before the first execute call

Failures (0):
  _None detected_

Saved to DB: 4 new learnings
Written: .planning/phases/07-roadmap-automation/LEARNINGS.md

When to Use

  • After fixing a recurring mistake
  • After a review catches a pattern you want to avoid
  • After debugging reveals a root cause pattern
  • When you discover a project-specific convention
  • After any phase completes — run --extract to capture artifact insights

When NOT to Use

  • For one-time fixes (just fix the code)
  • For code style preferences (use linter config)
  • On phases with no artifacts (empty dirs produce no signal)

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.