
wiki-agent
Search one AI agent's raw history for a specific topic, ingest only matching sessions, and return a synthesized answer. Use for targeted cross-agent recall; use wiki-history-ingest for bulk archival ingestion.
- Installs
- 2.4K
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/ar9av/obsidian-wiki --skill wiki-agent- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads wiki-agent automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Wiki Agent — Targeted Cross-Agent History Search + Ingest
You are doing a query-driven targeted ingest from one specific AI agent's raw conversation history. The user is typically working in a different agent right now and wants to pull in context from another agent's past sessions.
This is not bulk ingest. You find sessions about a specific topic, extract the relevant blobs, distill them into the wiki, and return a synthesized answer the user can act on immediately.
Command Routing
Parse the invocation to determine the target agent and optional query:
| Command | Target | Example |
|---|---|---|
/wiki-claude [query] | Claude Code history | /wiki-claude "how did I set up auth middleware" |
/wiki-codex [query] | Codex CLI history | /wiki-codex "rust ownership patterns" |
/wiki-hermes [query] | Hermes agent history | /wiki-hermes "memory architecture" |
/wiki-openclaw [query] | OpenClaw history | /wiki-openclaw "project planning approach" |
/wiki-copilot [query] | Copilot chat history | /wiki-copilot "test strategy for API routes" |
/wiki-pi [query] | Pi agent history | /wiki-pi "how did I refactor the auth module" |
If no query is given, default to recent sessions mode: ingest the last 5 unprocessed sessions from that agent and return a summary of what was found. This is equivalent to a focused wiki-history-ingest for that agent only.
Before You Start
Writing profile: Before drafting or rewriting natural-language Markdown, read and apply the Writing Profile Resolution section in llm-wiki/SKILL.md. Framework schema, provenance, safety, and operation-specific requirements take precedence.
WRITING.md preferences apply only to newly drafted or rewritten natural-language Markdown; preserve source content and structured records.
- Resolve config — follow the Config Resolution Protocol in
llm-wiki/SKILL.md(inline@nameoverride → walk up CWD for.env→ global config → prompt setup). This givesOBSIDIAN_VAULT_PATH. - Read
$OBSIDIAN_VAULT_PATH/.manifest.json→ know what's already ingested. - Read
$OBSIDIAN_VAULT_PATH/hot.mdif it exists → warm context on recent wiki activity.
Step 1: Locate the Agent's History Root
| Agent | Default path | Config override |
|---|---|---|
claude | ~/.claude + ~/Library/Application Support/Claude/local-agent-mode-sessions/ | CLAUDE_HISTORY_PATH in .env |
codex | ~/.codex | CODEX_HISTORY_PATH in .env |
hermes | ~/.hermes | HERMES_HOME in env or .env |
openclaw | ~/.openclaw | OPENCLAW_HOME in .env |
copilot | ~/.copilot | COPILOT_HISTORY_PATH in .env |
pi | ~/.pi/agent/sessions | PI_HISTORY_PATH in .env |
If the history root doesn't exist, stop and tell the user: "No <agent> history found at <path>. Have you run <agent> on this machine? You can set a custom path with <CONFIG_VAR> in .env."
Step 2: Build Session Inventory
Use the cheapest index source for each agent — don't open session files until you know which ones are relevant.
Claude
Primary index: ~/.claude/projects/ (directories = projects, files = sessions)
Session files: ~/.claude/projects/*/*.jsonl
Desktop index: find ~/Library/Application Support/Claude/local-agent-mode-sessions -name "local_*.json"
Signal fields: sessionId, cwd, startedAt, title (in local_*.json)
Build a list of sessions: {path, project_dir, modified_at, already_ingested}.
Codex
Primary index: ~/.codex/session_index.jsonl
Session files: ~/.codex/sessions/**/rollout-*.jsonl
Signal fields: thread_id, name/title, updated_at (in session_index.jsonl)
Read session_index.jsonl as the inventory. Each line: {thread_id, name, updated_at}. Map thread IDs to rollout files by matching directory names.
Hermes
Primary index: ~/.hermes/memories/*.md (fast to scan)
Session files: ~/.hermes/sessions/**/*.jsonl
Signal fields: file names, memory titles, first 3 lines of each memory
Scan memory filenames first (they're often titled by topic). Fall back to session listing.
OpenClaw
Primary index: ~/.openclaw/workspace/memory/MEMORY.md (structured long-term memory)
Daily notes: ~/.openclaw/workspace/memory/YYYY-MM-DD.md
Session index: ~/.openclaw/agents/*/sessions/sessions.json
Session files: ~/.openclaw/agents/*/sessions/*.jsonl
Read MEMORY.md sections first — it's the pre-compiled summary of everything. Daily notes give recency signal.
Copilot
Primary index: session filenames / directory listing
Session files: varies by client (VS Code: ~/.copilot/sessions/*.jsonl or similar)
Signal fields: session timestamps, file names
Pi
Primary index: ~/.pi/agent/sessions/--<cwd>--/ directories
Session files: ~/.pi/agent/sessions/--<cwd>--/<timestamp>_<uuid>.jsonl
Signal fields: cwd (decoded from dir name), session_info.name, timestamp in filename
Scan session directories first. Decode --<cwd>-- to get the working directory. Read the first line (session header) and any session_info entries for the session name. No separate index file — the filesystem is the index.
Step 3: Score Sessions Against the Query
If a query was given, score each session in the inventory without opening full session files:
-
Name/title match — does the session name or thread title contain the query terms? Score: +3
-
CWD/project match — does the working directory suggest the right project? Score: +2
-
Recency — apply exponential time decay with a 90-day half-life, as a multiplier on the match score rather than a bonus added to it:
base = name_match(3) + cwd_match(2) score = base * (0.35 + 0.65 * 0.5 ** (age_days / 90))The 0.35 floor is deliberate: an old session that matches the query exactly must still outrank a recent one that barely matches, or the skill can never answer "how did I first solve this?". This is the same decay
session-brainuses, so the two skills rank consistently. -
Already ingested — if this session was previously ingested and the wiki page already covers the query (check
hot.md+index.md), flag as "covered" but still show in results
Select the top 3–5 sessions by score. If no query was given, select the 5 most recent unprocessed sessions.
Step 4: Extract the Relevant Blob
Open each selected session file and extract only the content relevant to the query. Do not read the full session if it's large — use targeted extraction.
Per-Agent Extraction Strategy
Claude (JSONL conversation):
- Each line:
{role, content, timestamp, ...} - Search with:
rg -i "<query terms>" <session.jsonl>to find the relevant lines - Extract: the surrounding conversation window (10 lines before + 20 lines after each hit)
- Special signal: tool calls (Read/Write/Bash/Edit) reveal what was actually done — extract these even without keyword matches if they're in the relevant window
Codex (rollout JSONL):
- Each line:
{type: "session_meta|turn_context|event_msg|response_item", ...} - Filter to
type: "event_msg"(user turns) andtype: "response_item"(model output) - Search with:
rg -i "<query terms>" <rollout.jsonl> - Extract: matching turns + their parent context (the
turn_contextpreceding the match) - Skip:
session_metaevents (operational metadata, not knowledge)
Hermes (memory files + session JSONL):
- For memory files: read the full file (they're short — typically <500 words each)
- For session JSONL:
rg -i "<query terms>"+ surrounding window - Memory files with title matches → read fully; others → grep only
OpenClaw (MEMORY.md + daily notes + session JSONL):
MEMORY.md: grep for section headers containing query terms → extract that section- Daily notes: grep most recent 30 days for query terms → extract matching paragraphs
- Session JSONL: same grep-window approach as Claude
- Prefer MEMORY.md/daily notes over session JSONL (they're pre-synthesized)
Copilot (session JSONL):
- Same grep-window approach as Claude
- Look for checkpoint files if available (pre-summarized)
Pi (structured JSONL with tree layout):
- Each line is a tree entry:
{type, id, parentId, timestamp, message?, ...} - Build the active branch: map entries by
id, find leaf (last entry with no children), walkparentIdto root - Search with:
rg -i "<query terms>" <session.jsonl>to find matching entries - Extract: the matching entries + their ancestors on the active branch (follow parent chain)
- Special signal:
toolCallblocks inside assistant messages reveal what was actually done — extract these even without keyword matches if they're in the relevant window - Prefer
compactionandbranch_summaryentries when available — they're pre-synthesized summaries - Skip
thinkingcontent blocks (noise) andmodel_change/thinking_level_changeentries
Step 5: Distill Blobs into Wiki Pages
For each extracted blob, determine where it belongs in the wiki:
- Check if a wiki page already covers this — grep
index.mdand page frontmatter for the topic. If yes, update the existing page rather than creating a new one. - Determine category using standard rules (from
llm-wiki/SKILL.md):- Technique / how-to →
skills/ - Abstract concept / pattern →
concepts/ - Tool / library / person →
entities/ - Cross-cutting insight →
synthesis/
- Technique / how-to →
- Write or update the page with required frontmatter:
Set
--- title: <topic> category: skill|concept|entity|synthesis tags: [tag1, tag2] sources: [<agent>://<path/to/session>] created: <date> updated: <date> confidence: high|medium|low lifecycle: stable|draft ---sourceswith the agent prefix somemory-bridgecan find it later. - Add cross-links to related wiki pages found in
index.md.
Distillation rules (same as all ingest skills):
- Extract durable knowledge, not operational telemetry
- One wiki page per concept, not one per session
- Merge into existing pages rather than duplicating
- Keep the signal: decisions made, patterns discovered, techniques that worked, bugs explained
Step 6: Return Synthesized Answer
After ingesting, immediately synthesize and return an answer from the newly ingested + existing wiki content:
## From <agent> history: "<query>"
**Found in:** <N> sessions (<session names/titles>)
**Key insights:**
<Synthesized answer — 3–5 bullet points of the most useful knowledge>
**Wiki pages updated/created:**
- [[page-name]] — <what was added>
- [[page-name]] — <what was added>
**Sessions ingested:**
| Session | Date | Relevance |
|---------|------|-----------|
| <name> | <date> | <one-line why it was selected> |
**Gaps:** <What the sessions didn't cover that might be relevant>
If a query was given but no relevant sessions were found, say so explicitly: "No sessions about '<query>' found in <agent> history. The most recent sessions covered: <list topics from last 3 sessions>."
Step 7: Update Tracking Files
Update .manifest.json for each session file processed:
{
"<path>": {
"ingested_at": "<now>",
"source_type": "<agent>_conversation",
"modified_at": "<file mtime>",
"pages_created": [...],
"pages_updated": [...]
}
}
One locked call updates the log, the index, and the hot cache:
obsidian-wiki memory sync WIKI-AGENT \
agent=<agent> query="<query>" \
sessions_searched=<N> sessions_ingested=<M> \
pages_created=<X> pages_updated=<Y> \
--takeaways "<one line: what was pulled in and what it changes>"
Never hand-edit index.md, log.md, or hot.md — the command takes the lock that keeps a parallel writer from dropping your update.
See .skills/llm-wiki/references/MEMORY.md for the full procedure.
Cross-Agent Use Patterns
These are the primary use cases this skill is designed for:
"I'm on Codex. What did I figure out about X in Claude?"
→ /wiki-claude "X" — finds Claude sessions about X, ingests them, returns the answer
"I solved a bug in Hermes last week. I need that context now in Claude Code."
→ /wiki-hermes "bug description" — surfaces and ingests the Hermes session
"What are all the approaches I've tried for X across all my tools?"
→ Run /wiki-claude "X", /wiki-codex "X", /wiki-hermes "X" in sequence — each ingests its slice, the wiki accumulates the cross-agent picture, then /memory-bridge diff shows what each tool uniquely contributed
No query — just "catch me up on recent Codex work"
→ /wiki-codex — ingests last 5 Codex sessions and returns a summary
"I'm on Claude Code. What did I figure out about X in Pi?"
→ /wiki-pi "X" — finds Pi sessions about X, ingests them, returns the answer
No query — just "catch me up on recent Pi work"
→ /wiki-pi — ingests last 5 Pi sessions and returns a summary
QMD Refresh After Vault Writes
QMD is a search index, not the source of truth. If $QMD_WIKI_COLLECTION is empty or unset, skip this step. Run it only after this skill has written or rewritten vault markdown. If QMD refresh fails, do not roll back the vault changes; report the QMD status separately.
Use $QMD_CLI if set; otherwise use qmd.
${QMD_CLI:-qmd} update
If the output says vectors are needed or embeddings may be stale, run:
${QMD_CLI:-qmd} embed
Verify the collection with either:
${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"
or, when a specific page path is known:
${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5
Record one of:
QMD refreshed: update + embed + verifiedQMD refreshed: update only + verifiedQMD skipped: QMD_WIKI_COLLECTION unsetQMD skipped: qmd CLI unavailableQMD failed: <short error summary>
FAQ
What does the wiki-agent skill do?
Search one AI agent's raw history for a specific topic, ingest only matching sessions, and return a synthesized answer. Use for targeted cross-agent recall; use wiki-history-ingest for bulk archival ingestion.
How do I install wiki-agent?
Run npx skills add https://github.com/ar9av/obsidian-wiki --skill wiki-agent in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/wiki-agent/ (personal) or .claude/skills/wiki-agent/ (project).
Which AI agents can use wiki-agent?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is wiki-agent safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains wiki-agent?
It is published by ar9av in ar9av/obsidian-wiki. It has 2,401 recorded installs.
More from ar9av/obsidian-wiki
llm-wiki
ar9av/obsidian-wiki
Explain and apply the foundational LLM Wiki architecture and knowledge-management strategy. Use for setup, architecture, schema, or organization decisions; operational ingest/query/lint work uses dedicated skills.
wiki-ingest
ar9av/obsidian-wiki
Ingest new documents, raw text, folders, or URLs into the Obsidian wiki as distilled, linked knowledge. Use for general wiki ingestion when no more specific ingest skill applies, including processing raw/ staged content.
wiki-setup
ar9av/obsidian-wiki
Initialize or repair an Obsidian wiki vault's required structure and configuration. Use for new-vault setup, .env/config creation, reconfiguration, or broken setup recovery.
wiki-query
ar9av/obsidian-wiki
Search and synthesize answers from the compiled Obsidian wiki, including cited and multi-hop answers. Use for questions about existing wiki knowledge or fast index-only lookups, and for challenge requests ("challenge this", "argue against X", "poke holes in my plan") that look for the vault's own evidence against a plan. Supports named-vault routing such as wiki-query @work; not for ingesting new sources.
wiki-lint
ar9av/obsidian-wiki
Audit wiki health: broken links, orphans, contradictions, stale content, lifecycle and tag issues. Use for maintenance or health checks. Default is report-only; use wiki-dedup for page-identity merges.
wiki-status
ar9av/obsidian-wiki
Report wiki ingestion/completeness state, pending source delta, structural insights, or maintenance equilibrium. Use for remaining-work/status questions, hubs and bridges, or whether maintenance skills still have pending changes. wiki-digest summarizes learned knowledge instead.
Popular ai & agents skills
google-agents-cli-publish
google/agents-cli
This skill should be used when the user wants to "publish an agent", "publish my ADK agent", "register an agent with Gemini", "publish to Gemini" (formerly Gemini Enterprise), or needs guidance on the agents-cli publish gemini command. Also use when the user wants to "manage agents in Agent Registry", "list/update/delete registered agents", or "register an MCP server". Covers ADK vs A2A registration modes, programmatic and interactive usage, flag reference, auto-detection from deployment metadata, Agent Registry fleet management, and troubleshooting. Part of the agents-cli skills suite. Do NOT use for deployment (use google-agents-cli-deploy).
google-agents-cli-eval
google/agents-cli
This skill should be used when the user wants to "run an evaluation", "evaluate my agent", "evaluate my ADK agent", "write an eval dataset", "analyze eval failures", "compare eval results", "optimize agent", or needs guidance on the Gemini platform eval methodology and the Quality Flywheel. Covers eval metrics, dataset schema, LLM-as-judge scoring, and common failure causes. Applies to any agents-cli project, whatever framework the agent is written in. Do NOT use for agent API code patterns (ADK: use google-agents-cli-adk-code), deployment (use google-agents-cli-deploy), or project scaffolding (use google-agents-cli-scaffold).
skill-creator
anthropics/skills
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
codex-pet
prime-skills/runcomfy-agent-skills
Codex Pet generator on RunComfy. Build a Codex-compatible Codex Pet spritesheet.webp + pet.json from a single reference image, drop it into ${CODEXHOME:-$HOME/.codex}/pets/ / and Codex picks it up as a custom Codex Pet next to the 8 built-ins. This skill produces the exact Codex Pet atlas Codex expects (1536x1872 PNG/WebP, 8 cols x 9 rows, 192x208 cells, 9 animation states — idle, running-right, running-left, waving, jumping, failed, waiting, running, review). Calls OpenAI GPT Image 2 edit ONCE via the local RunComfy CLI as runcomfy run openai/gpt-image-2/edit to produce a canonical Codex Pet pose, then assembles all 9 animation rows programmatically with ImageMagick micro-transforms — no Codex Pro, no $imagegen, no OPENAIAPIKEY required, only RUNCOMFYTOKEN. Triggers on "codex pet", "create codex pet", "make codex pet", "hatch codex pet", "/hatch image", "desktop pet codex", "codex pets", "spritesheet.webp", or any explicit ask to build a custom pet for OpenAI Codex.
full-output-enforcement
leonxlnx/taste-skill
Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output.
executing-plans
obra/superpowers
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available