learn
Skill178 starsChanged 4 months agoMITView on GitHub
Manage project learnings across sessions. Review, search, prune, and export what superstack has learned. Use when asked to "what have we learned", "show learnings", "prune stale learnings", "export learnings", or "remember this". Proactively suggest when the user asks about past patterns or wonders "didn't we fix this before?"
- Sends data out
195 other projects use a version of this.
Adopted by
Most recently taken up by
- Doist/todoist-aitheir own version, first seen Nov 9, 2026
- Doist/todoist-clitheir own version, first seen Nov 8, 2026
- HughYau/AcademicForgetheir own version, first seen Nov 8, 2026
- dimsedra/skillstheir own version, first seen Nov 8, 2026
- rajanrx/skillstheir own version, first seen Nov 8, 2026
- edwinidrus/dragonhoardtheir own version, first seen Nov 8, 2026
Used with
Projects with it also use add-anydoc, add-clidash and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
TomGranotSkilladd-anydoc
Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when agents need to read attached Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV, or text-based PDF files without uploading them to a hosted parser.
Also in 5 projects that use this
TomGranotSkilladd-clidash
Add clidash — a zero-dependency, read-only web dashboard that derives its tabs and tables at runtime from any CLI that lists resources as JSON. Ships pre-wired for NanoClaw's ncl CLI (agent groups, sessions, channels, users, roles), plus message-activity charts, a log tail, and a read-only file viewer for group skills/CLAUDE.md/profiles.
Also in 5 projects that use this
seek888Skillopen-gstack-browser
Launch GStack Browser — AI-controlled Chromium with the sidebar extension baked in. Opens a visible browser window where you can watch every action in real time. The sidebar shows a live activity feed and chat. Anti-bot stealth built in. Use when asked to "open gstack browser", "launch browser", "connect chrome", "open chrome", "real browser", "launch chrome", "side panel", or "control my browser". Voice triggers (speech-to-text aliases): "show me the browser".
Also in 11 projects that use this
Saqlain-811Skillios-sync
Regenerate the iOS debug bridge against the latest upstream gstack templates. (gstack)
Also in 6 projects that use this
MicrosoftSkilladd-codex
Use Codex (CLI + AppServer) as the full agent provider — planning, tool orchestration, native compaction, MCP tools, session resume — in place of the Claude Agent SDK. ChatGPT subscription or OPENAI_API_KEY. Per-group via agent_provider. Distinct from using OpenAI as an MCP tool (where Claude remains the planner).
Also in 6 projects that use this
MicrosoftSkilladd-deltachat
Add DeltaChat channel integration via @deltachat/stdio-rpc-server. Native adapter — no Chat SDK bridge. Email-based messaging with end-to-end encryption.
Also in 6 projects that use this
- +5 more from TomGranot
- +1 more from microsoft
Other versions195 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 195
- garrytan/gstack★ 141ksame name
- rohitg00/ai-engineering-from-scratch★ 78ksame name
- gavrielc/nanoclaw★ 31ksame name
- nanocoai/nanoclaw★ 31ksame name
- qwibitai/nanoclaw★ 31ksame name
- tigerless-labs/autoharness★ 11ksame name
- tw93/claude-health★ 7.5ksame name
- tw93/Waza★ 7.5ksame name
- nykooi1/vibe-wise★ 3.5ksame name
- HughYau/AcademicForge★ 2.6ksame name
185 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository34 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- animation-reverse-engineeringSkill
- brand-designSkill
- build-data-pipelineSkill
- build-defi-protocolSkill
- build-mobileSkill
- build-with-claudeSkill
- csoSkill
- debug-programSkill
- design-tasteSkill
- frontend-design-guidelinesSkill
- launch-tokenSkill
- navigate-skillsSkill
- number-formattingSkill
- page-load-animationsSkill
- product-reviewSkill
- review-and-iterateSkill
- roast-my-productSkill
- scaffold-projectSkill
- verify-humanity-pohSkill
- virtual-solana-incubatorSkill
- colosseum-copilotSkill
- competitive-landscapeSkill
- defillama-researchSkill
- find-next-crypto-ideaSkill
- solana-beginnerSkill
- validate-ideaSkill
- apply-grantSkill
- create-pitch-deckSkill
- deploy-to-mainnetSkill
- marketing-videoSkill
- submit-to-hackathonSkill
- video-craftSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
20 rules. 0 are common, 14 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 170 edited versions we read keep these.
14
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 31
If TEL_PROMPTED is no: Before starting the skill workflow, ask the user about telemetry.
- Distinctive: line 41
If A: run this bash:
- Distinctive: line 48
If B: run this bash:
- Very specific: line 138
If the file does not exist, respond: "No learnings yet.
- Distinctive: line 146
Search across all entry fields (key, insight, source, files) for the query string (case-insensitive)
- Very specific: line 148
If no matches: "No learnings match '{query}'.
- Very specific: line 152
Read all entries from .superstack/learnings.md
- Distinctive: line 154
Use Glob to check if the referenced files still exist
- Distinctive: line 155
If any file is missing, flag the entry as stale
- Distinctive: line 192
Use AskUserQuestion to ask: "Where should I put the exported learnings?"
- Distinctive: line 218
Use AskUserQuestion to gather each field one at a time:
- Very specific: line 226
Read .superstack/learnings.md (create with the template header if missing)
- Distinctive: line 228
Check if the key already exists:
- Distinctive: line 229
If yes, append the new entry below the existing one (latest wins)
- Distinctive: line 231
If no, append the entry at the end of the section
- Distinctive: line 232
Write the updated file
- Distinctive: line 271
De-duplication: If the same key already exists in the section, append the new entry below it.
- Distinctive: line 290
Always use AskUserQuestion: before removing or modifying existing entries.
- Distinctive: line 292
Check file existence: before claiming a learning is current (use Glob on referenced files).
- Very specific: line 298
After the skill workflow completes (success, error, or abort), log the telemetry event.
“Common” is measured: kept by at least 6 in 10 of the 170 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Preamble (run first)
_TEL_TIER=$(cat ~/.superstack/config.json 2>/dev/null | grep -o '"telemetryTier": *"[^"]*"' | head -1 | sed 's/.*"telemetryTier": *"//;s/"$//' || echo "anonymous")
_TEL_TIER="${_TEL_TIER:-anonymous}"
_TEL_PROMPTED=$([ -f ~/.superstack/.telemetry-prompted ] && echo "yes" || echo "no")
_TEL_START=$(date +%s)
_SESSION_ID="$$-$(date +%s)"
mkdir -p ~/.superstack
echo "TELEMETRY: $_TEL_TIER"
echo "TEL_PROMPTED: $_TEL_PROMPTED"
if [ "$_TEL_TIER" != "off" ]; then
_TEL_EVENT='{"skill":"learn","phase":"idea","event":"started","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}'
echo "$_TEL_EVENT" >> ~/.superstack/telemetry.jsonl 2>/dev/null || true
_CONVEX_URL=$(cat ~/.superstack/config.json 2>/dev/null | grep -o '"convexUrl":"[^"]*"' | head -1 | cut -d'"' -f4 || echo "")
[ -n "$_CONVEX_URL" ] && curl -s -X POST "$_CONVEX_URL/api/mutation" -H "Content-Type: application/json" -d '{"path":"telemetry:track","args":{"skill":"learn","phase":"idea","status":"success","version":"0.2.0","platform":"'$(uname -s)-$(uname -m)'","timestamp":'$(date +%s)000'}}' >/dev/null 2>&1 &
true
fiIf TEL_PROMPTED is no: Before starting the skill workflow, ask the user about telemetry.
Use AskUserQuestion:
Help superstack get better! We track which skills get used and how long they take — no code, no file paths, no PII. Change anytime in
~/.superstack/config.json.
Options:
- A) Sure, help superstack improve (anonymous)
- B) No thanks
If A: run this bash:
echo '{"telemetryTier":"anonymous"}' > ~/.superstack/config.json
_TEL_TIER="anonymous"
touch ~/.superstack/.telemetry-promptedIf B: run this bash:
echo '{"telemetryTier":"off"}' > ~/.superstack/config.json
_TEL_TIER="off"
touch ~/.superstack/.telemetry-promptedThis only happens once. If TEL_PROMPTED is yes, skip this entirely and proceed to the skill workflow.
Wrong skill? See SKILL_ROUTER.md for all available skills.
Adapted from gstack learn skill.
Project Learnings
You manage the project's knowledge base. Learnings are stored in a single human-readable markdown file at .superstack/learnings.md, grouped by type: Patterns, Pitfalls, Preferences, Architecture, and Tools. Each entry has a key, insight, confidence score, source skill, relevant files, and date.
This skill is read/write for the learnings file ONLY. You never modify project code.
Commands
| Command | Action |
/learn | Show recent learnings (last 20 entries across all types) |
/learn search <query> | Search learnings by keyword |
/learn prune | Check for stale or contradictory entries |
/learn export | Format learnings for CLAUDE.md |
/learn stats | Summary statistics |
/learn add | Manually add a learning |
Learnings File Format
File: .superstack/learnings.md
# Project Learnings
> Managed by `/learn`. Append-only — latest entry wins on conflicts.
## Patterns
### pda-seed-convention
- **Insight:** Use [program_id, user_pubkey, "vault"] as PDA seeds
- **Confidence:** 8/10
- **Source:** build-with-claude
- **Files:** programs/src/lib.rs
- **Date:** 2026-03-28
## Pitfalls
### cpi-signer-missing
- **Insight:** CPI calls require PDA signer seeds, not just the address
- **Confidence:** 9/10
- **Source:** debug-program
- **Files:** programs/src/instructions/settle.rs
- **Date:** 2026-03-28
## Preferences
(entries here)
## Architecture
(entries here)
## Tools
(entries here)Each entry follows this structure:
### kebab-case-key
- **Insight:** One clear sentence describing the learning
- **Confidence:** N/10
- **Source:** skill-name-that-generated-this
- **Files:** relevant/file/path.rs, another/file.ts (optional)
- **Date:** YYYY-MM-DDCommand Implementations
Show Recent (/learn)
- Read
.superstack/learnings.md - If the file does not exist, respond: "No learnings yet. As you use skills, superstack captures patterns and insights automatically. Use
/learn addto manually record something." - Parse all entries across all type sections
- Display the 20 most recent entries (sorted by Date descending)
- Show total count at the bottom: "Showing 20 of N total learnings."
Search (/learn search <query>)
- Read
.superstack/learnings.md - Search across all entry fields (key, insight, source, files) for the query string (case-insensitive)
- Display all matching entries, grouped by type
- If no matches: "No learnings match '{query}'. Try a broader search or check
/learn statsfor what's recorded."
Prune (/learn prune)
- Read all entries from
.superstack/learnings.md - For each entry that has a Files field:
- Use Glob to check if the referenced files still exist
- If any file is missing, flag the entry as stale
- Check for contradictions:
- Entries with the same key but different insights
- Entries where one says "do X" and another says "don't do X" on related topics
- For each flagged entry, present via AskUserQuestion:
- A) Remove — delete the entry
- B) Keep — mark as still valid (update date to today)
- C) Update — provide a new insight (ask for the updated text)
- Apply changes and save the file
Export (/learn export)
- Read all entries from
.superstack/learnings.md - Format as a clean markdown section:
## Learnings
Key patterns, pitfalls, and preferences discovered during development.
### Patterns
- **pda-seed-convention:** Use [program_id, user_pubkey, "vault"] as PDA seeds (8/10)
- **another-pattern:** Description here (7/10)
### Pitfalls
- **cpi-signer-missing:** CPI calls require PDA signer seeds, not just the address (9/10)
### Preferences
...
### Architecture
...
### Tools
...- Use AskUserQuestion to ask: "Where should I put the exported learnings?"
- A) Append to CLAUDE.md — add the section at the end of the project's CLAUDE.md
- B) Save to
.superstack/learnings-export.md— standalone file - C) Print only — display without saving
Stats (/learn stats)
- Read all entries from
.superstack/learnings.md - Compute and display as a table:
| Metric | Value |
| Total entries | N |
| Unique keys | N |
| Patterns | N |
| Pitfalls | N |
| Preferences | N |
| Architecture | N |
| Tools | N |
| Top source | skill-name (N entries) |
| Avg confidence | X.X/10 |
| Oldest entry | YYYY-MM-DD |
| Newest entry | YYYY-MM-DD |
Manual Add (/learn add)
- Use AskUserQuestion to gather each field one at a time:
- Type: pattern / pitfall / preference / architecture / tool
- Key: kebab-case identifier (suggest one based on context if possible)
- Insight: one clear sentence
- Confidence: 1-10 (suggest a default based on certainty)
- Files: relevant file paths, comma-separated (optional — offer to skip)
- Set Source to
manual - Set Date to today
- Read
.superstack/learnings.md(create with the template header if missing) - Find the correct type section (e.g.,
## Patterns) - Check if the key already exists:
- If yes, append the new entry below the existing one (latest wins)
- Inform the user: "Updated existing learning '{key}' — latest entry wins."
- If no, append the entry at the end of the section
- Write the updated file
- Confirm: "Added {type} learning '{key}' with {confidence}/10 confidence."
How Other Skills Write Learnings
Other skills (build-with-claude, debug-program, scaffold-project, etc.) should append learnings by following this protocol:
- Read
.superstack/learnings.md— if it does not exist, create it with this template:
# Project Learnings
> Managed by `/learn`. Append-only — latest entry wins on conflicts.
## Patterns
## Pitfalls
## Preferences
## Architecture
## Tools- Find the right section — match the type to the heading (
## Patterns,## Pitfalls, etc.) - Append a new entry under that section using the standard format:
### kebab-case-key
- **Insight:** One clear sentence
- **Confidence:** N/10
- **Source:** skill-name
- **Files:** path/to/file.rs
- **Date:** YYYY-MM-DD- De-duplication: If the same key already exists in the section, append the new entry below it. The latest entry (by date) wins. Do not delete the old entry — it serves as history.
- When to write a learning:
- A non-obvious pattern was discovered during implementation
- A pitfall was hit and resolved (especially if it cost > 10 minutes)
- The user expressed a preference ("I prefer X over Y")
- An architectural decision was made with trade-offs
- A tool or library was chosen for specific reasons
- When NOT to write a learning:
- Trivial or obvious information
- Temporary workarounds that will be removed
- Information already in the project's README or CLAUDE.md
Non-Negotiables
- NEVER modify project code. This skill manages learnings only.
- Always use AskUserQuestion before removing or modifying existing entries.
- Append-only by default — latest entry for a given key wins. Old entries are history.
- Check file existence before claiming a learning is current (use Glob on referenced files).
- Respect the format — other skills and tools parse this file programmatically.
- No silent writes — always confirm with the user what was added or changed.
Telemetry (run last)
After the skill workflow completes (success, error, or abort), log the telemetry event.
Determine the outcome from the workflow result: success if completed normally, error
if it failed, abort if the user interrupted.
Run this bash:
_TEL_END=$(date +%s)
_TEL_DUR=$(( _TEL_END - ${_TEL_START:-$_TEL_END} ))
_TEL_TIER=$(cat ~/.superstack/config.json 2>/dev/null | grep -o '"telemetryTier": *"[^"]*"' | head -1 | sed 's/.*"telemetryTier": *"//;s/"$//' || echo "anonymous")
if [ "$_TEL_TIER" != "off" ]; then
echo '{"skill":"learn","phase":"idea","event":"completed","outcome":"OUTCOME","duration_s":"'"$_TEL_DUR"'","session":"'"$_SESSION_ID"'","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","platform":"'$(uname -s)-$(uname -m)'"}' >> ~/.superstack/telemetry.jsonl 2>/dev/null || true
true
fiReplace OUTCOME with success/error/abort based on the workflow result.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

