From aria-knowledge
Extracts uncaptured knowledge (decisions, feedback, context) from the current conversation before it's lost to compaction. Use after completing a task, before switching context, or before large exploratory work.
How this skill is triggered — by the user, by Claude, or both
Slash command
/aria-knowledge:extractThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scan the current conversation since the last extraction for uncaptured insights, decisions, feedback, project context, and references. Dump everything to backlogs for review at the next knowledge audit. No confirmation dialog — just scan, deduplicate, and append.
Scan the current conversation since the last extraction for uncaptured insights, decisions, feedback, project context, and references. Dump everything to backlogs for review at the next knowledge audit. No confirmation dialog — just scan, deduplicate, and append.
Canonical resolution: This is the Claude Code variant. When both plugin-claude-code and plugin-claude-cowork are loaded in the same session (most common in Claude Desktop), bare /extract resolves to this skill — aria-knowledge (Code) is the canonical owner of all 24 dual-port skills per ADR-094 §Part 1. The Cowork variant is namespaced-only: /aria-cowork:extract.
Before Step 0: Check that the Bash tool is available in this session. If Bash is NOT available (you are running in Claude Cowork or another non-Code runtime), surface the following notification and wait for explicit user confirmation:
⚠️ Runtime mismatch — you invoked aria-knowledge's
/extractfrom a non-Code runtime.This variant writes captured items to
~/.claude/projects/.../memory/and~/.claude/aria-knowledge.local.md-scoped paths, which Cowork's persistent-grant model can't reach. For the Cowork-native variant (writes only to the attached knowledge folder), use/aria-cowork:extract.Use
/aria-cowork:extractinstead? (y/n)
Wait for an explicit reply:
y / yes — Use the Skill tool to invoke aria-cowork:extract with the same arguments the user provided to this invocation. Do not proceed with this skill's steps; the cowork variant takes over and runs to completion. This is the default-yes path — auto-redirect is the helpful action.n / no — Proceed with this (aria-knowledge) variant anyway despite the runtime mismatch. The user has explicitly opted in.This gate applies even when mode = auto per ADR-094 §Part 3. Auto mode's "implicit-yes on all gates" rule is suspended for the runtime-mismatch check — auto trusts that the user invoked the correct variant, and this gate enforces that precondition. All other auto-mode gates remain bypassed. The friction cost is now low: on y, the auto-redirect runs the correct variant with the original args.
If Bash is available, proceed to Step 0.
Read ~/.claude/aria-knowledge.local.md and extract:
knowledge_folder — requiredprojects_enabled — default falseprojects_list — default empty (only relevant if projects_enabled: true)If the config file doesn't exist, stop: "aria-knowledge is not configured. Run /setup to get started."
Use {knowledge_folder} as the base path for all file operations in subsequent steps.
projects_enabled: true)Determine the current working directory and check if it matches a configured project path:
~/Projects/path/to/proj-a).projects_list into tag:path pairs.current_project to that tag and stop iterating (first match wins).projects_remotes is configured AND git is available, fall back to git-remote matching: run git config --get remote.origin.url from the CWD; for each tag:url-pattern pair in projects_remotes, check if the remote URL contains the pattern; if so, set current_project to that tag.current_project unset — subsequent steps will skip auto-tagging.This logic mirrors the kt_project_for_path shell helper in bin/config.sh. Skills can either invoke that helper via Bash or replicate the matching logic in markdown-driven flow as above.
Examples:
~/Projects/myproject/sub-module/file.md, projects_list: myproject:myproject,other:other → current_project = myproject (substring match on myproject)~/Projects/other, projects_list: myproject:myproject,other:other → current_project = other~/Downloads/scratch-folder, projects_list: myproject:myproject,other:other → current_project unset (no configured path matches)Check if a previous extraction happened this session by looking for a timestamp marker. If this is the first extraction of the session, scan the entire conversation. If a previous extraction occurred, scan only from that point forward.
The timestamp is tracked as the last entry date in the backlogs from this session — check the most recent entry dates in:
{knowledge_folder}/intake/insights-backlog.md{knowledge_folder}/intake/decisions-backlog.md{knowledge_folder}/intake/extraction-backlog.md{knowledge_folder}/intake/ideas/ — use the YYYY-MM-DD prefix of the most recent *.md file (via ls -1 intake/ideas/*.md | sort -r | head -1)If no entries exist from today's date, treat the entire conversation as unscanned.
Review the conversation and categorize findings into six buckets. The first five (insights, decisions, feedback, project context, references) capture observations about what IS — they promote to knowledge during audit. The sixth bucket (ideas) captures proposals about what SHOULD BE different — these route via the audit's Accept submenu (tracker / roadmap / todo / adr / backlog / bundle / rule) rather than promoting directly into knowledge files.
insights-backlog.md (per-task capture may have already appended some — Step 3 dedup handles this)intake/ideas/ covering just the proposal. The audit step can refine routing if needed.For each finding, check against:
{knowledge_folder}/intake/insights-backlog.md{knowledge_folder}/intake/decisions-backlog.md{knowledge_folder}/intake/extraction-backlog.md{knowledge_folder}/intake/ideas/*.md (glob the directory; read frontmatter + body of each to compare)~/.claude/projects/ for the current project{knowledge_folder}/Skip anything already captured. Be conservative — if the content is substantively the same even with different wording, skip it.
If any deduplication source cannot be read (missing file, permissions error), note which source was skipped and include it in the Step 5 report: "Deduplication incomplete — could not read [file]. Some entries may be duplicates."
Route each finding to the appropriate backlog file. Do NOT ask for confirmation — just append.
If current_project was set in Step 0:
current_project as the [project] value in the entry header.path/to/proj-a), preserve the explicit attribution — don't override it.If current_project is unset, use the existing rules: tag with the project (or "cross") when identifiable from conversation context; otherwise omit [project] from the header (use [no-project] or just the context label).
Examples:
### 2026-04-15 — proj-a — feedback — [context]### 2026-04-15 — cross — decision — [context]### 2026-04-15 — df — insight — [context]### 2026-04-15 — [no-project] — reference — [context]{knowledge_folder}/intake/insights-backlog.mdUse existing format:
### YYYY-MM-DD — [project] — [task context]
- Insight bullet 1
- Insight bullet 2
{knowledge_folder}/intake/decisions-backlog.mdUse existing format:
### YYYY-MM-DD — [project(s)] — [decision context]
**Decision:** What was decided
**Why:** Rationale
**Alternatives considered:** What else was evaluated
{knowledge_folder}/intake/extraction-backlog.mdUse this format:
### YYYY-MM-DD — [type: feedback|project|reference] — [context]
**Content:** What was captured
**Source:** Where in the conversation this came from (brief description)
{knowledge_folder}/intake/ideas/{YYYY-MM-DD}-{project}-{slug}.md (one file per idea)Ideas use per-file storage, not a single append-only backlog. Write one new markdown file per idea under intake/ideas/.
Filename pattern:
{YYYY-MM-DD}-{project}-{slug}.md
YYYY-MM-DD — today's date (from the conversation's current date, not the OS clock; convert relative dates per Rules){project} — the project tag from Step 0's current_project, or an explicit project attribution from the finding, or cross for cross-project, or no-project if unattributed{slug} — kebab-cased short title derived from the idea: lowercase, alphanumerics + hyphens only, truncated to ~60 chars, strip trailing hyphens-2, -3, etc. to the slug until unique. Check via ls intake/ideas/ before writing.Examples:
2026-04-21-aria-force-interactive-index-steps.md2026-04-21-proj-a-extract-shared-postcard.md2026-04-21-cross-generalize-build-playbook.mdFile format (YAML frontmatter + body):
---
date: YYYY-MM-DD
project: project-tag-or-cross
type: feature | bug | design | refactor | workflow
title: Short title matching the filename slug
---
**Proposal:** What change is being proposed.
**Motivation:** Why it would help (what gap or friction it addresses).
**Source:** Where in the conversation it came up (brief description).
Ideas do NOT promote to knowledge files directly — during audit review the user picks a destination from the Accept submenu: external tracker (Linear, GitHub Issues, Jira, etc.), project ROADMAP.md or TODO.md (when present), the decisions backlog (for ADR review), a dated entry in IDEAS-BACKLOG.md, a bundled merge of related ideas, or the rules backlog (for working-rule review).
intake/ideas/ directory is missing: do not create it. Stop and tell the user: "Ideas directory intake/ideas/ is missing. Run /setup to repair the knowledge folder structure."{knowledge_folder}/intake/ideas-backlog.md exists alongside intake/ideas/, surface a one-line note in Step 5's report: "Legacy ideas-backlog.md detected — run /setup or bash ${CLAUDE_PLUGIN_ROOT}/bin/migrate-ideas-backlog.sh to migrate pre-2.11 entries." Do not attempt the migration from within /extract.After appending, output a brief summary:
## Extraction Complete
- **Insights:** N new (appended to insights-backlog.md)
- **Decisions:** N new (appended to decisions-backlog.md)
- **Feedback:** N new (appended to extraction-backlog.md)
- **Project context:** N new (appended to extraction-backlog.md)
- **References:** N new (appended to extraction-backlog.md)
- **Ideas:** N new (written to intake/ideas/ — one file per idea; routed at audit time to tracker / roadmap / todo / adr / backlog / bundle / rule)
- **Skipped:** N duplicates
Knowledge staged in backlogs for next audit to review and promote. Ideas staged for the Accept submenu — pick destination per idea at next `/audit-knowledge`.
If nothing was found:
## Extraction Complete
No uncaptured knowledge found — everything from this session is already persisted.
npx claudepluginhub mikeprasad/aria-knowledge --plugin aria-knowledgeExtracts patterns, quirks, and decisions from conversations; persists to Markdown files in knowledge/learnings/. Use /learn for quick or /learn --deep for thorough analysis.
Analyzes conversations to extract learnings, best practices, institutional knowledge, saving to topic-specific markdown KB files and updating CLAUDE.md references.
Extracts reusable strategic knowledge from session history (architecture, patterns, ops) and updates local CLAUDE.md. Triggers on 'learn', 'save knowledge', or session ends.