Browse, search, and generate Wikipedia-style knowledge articles from the brain. Auto-generated from brain DB entities, emails, docs, and decisions.
npx skills add https://github.com/coco-research/coco --skill brain:wiki
Browse, search, and generate Wikipedia-quality articles about people, systems, teams,
and org units across all CoCo brain DB projects.
Articles are auto-generated from the brain DB by the daily knowledge engine cron
(~/.coco/knowledge/cron.py). Each article synthesizes all evidence available about
an entity — decisions, events, relationships, tasks — into a structured, versioned
knowledge artifact.
/brain-wiki [entity] — Show article (or list all)With entity name: Look up and display a knowledge article.
python3 ~/.claude/skills/brain/scripts/brain/brain_cli.py wiki --name "{entity}"
Display format:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
{Title} [{type}]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Infobox: Projects: {list} | Role: {role} | Team: {team}
{Summary paragraph}
## Role
{content}
## Relationships
{content}
## Timeline
{content}
## Decisions
{content}
## Open Questions
{content}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Generated: {date} · Confidence: {0-100}% · Sources: N chunks
GID: {uuid} · v{version}
If article not found → run wiki-search with the entity name as query and show top 3 candidates:
No article found for "{entity}". Did you mean:
1. {title} ({confidence}%) — /brain-wiki {gid}
2. {title} ({confidence}%)
3. {title} ({confidence}%)
Warnings to show inline:
⚠ Low confidence — this article needs more source data. Run /brain-update after adding more context.ℹ Possible duplicate: matches "{other_name}" ({similarity}%) — run /brain-wiki review-merges to resolveWithout entity name: List all available articles.
python3 ~/.claude/skills/brain/scripts/brain/brain_cli.py wiki-search "*" --limit 50
Display as table:
KNOWLEDGE BASE · N articles
═══════════════════════════════════════════════════════════
Name Type Confidence Updated
─────────────────────────────────────────────────────────
Alice Example person 87% 2h ago
VendorPortal system 91% yesterday
DataPipeline system 76% 2d ago
Platform Team team 82% 2d ago
...
/brain-wiki search <query> — Unified FTS5 + semantic searchpython3 ~/.claude/skills/brain/scripts/brain/brain_cli.py wiki-search "{query}"
Runs both FTS5 keyword search and MemPalace semantic search, merges via RRF.
Display format:
SEARCH: "{query}" · N results · FTS5 + semantic
══════════════════════════════════════════════════════════════
# Name Type Confidence Projects Updated
─────────────────────────────────────────────────────────────────
1 {title} {type} {conf}% {projects} {time}
2 ...
Run /brain-wiki {name} to read the full article.
If 0 results:
No articles found for "{query}".
Entity may not be in any brain DB yet, or articles haven't been generated.
Run: /brain-wiki generate to generate articles for all brain entities.
/brain-wiki generate [project] — Generate / refresh articlesGenerates or refreshes knowledge articles from brain DB evidence.
Procedure:
Generate articles for project "{project}"?
This will use Claude API (estimated $0.XX for N entities).
[Y/n]
If no project specified, confirm all:
Generate articles for ALL registered projects?
Registered: {slug1}, {slug2}, ... (N projects, ~N entities)
Estimated cost: $0.XX · Estimated time: N minutes
[Y/n]
# Single project
python3 ~/.coco/knowledge/cron.py --run --project {slug} --phases 2,3,5
# All projects
python3 ~/.coco/knowledge/cron.py --run --phases 2,3,5
Phase 2: Harvesting evidence...
✓ {project}: N entities, N evidence chunks
Phase 3: Generating articles...
✓ Generated: Alice Example (confidence: 87%)
✓ Generated: VendorPortal (confidence: 91%)
~ Skipped: 3 entities (unchanged)
Phase 5: Indexing...
✓ N articles indexed (FTS5)
─────────────────────────────────────────
KNOWLEDGE ENGINE
================
Articles generated: N new, N updated
FTS5 indexed: N
Estimated cost: $0.XXX
Articles written to: ~/.coco/knowledge/articles/
Search with: /brain-wiki search "{project}"
--force flag to regenerate all articles regardless of staleness./brain-wiki people — Show cross-project people graphShow all person-type articles and cross-project relationship statistics.
Procedure:
import sys, sqlite3, json
sys.path.insert(0, str(Path("~/.coco/knowledge").expanduser()))
from schema import KNOWLEDGE_DB_PATH
conn = sqlite3.connect(KNOWLEDGE_DB_PATH)
# People articles
people = conn.execute("""
SELECT ge.canonical_name, ge.aliases_json, ge.merged_from_json,
a.confidence, a.generated_at, a.version
FROM global_entities ge
LEFT JOIN articles a ON a.gid = ge.gid
WHERE ge.type = 'person'
ORDER BY a.confidence DESC NULLS LAST
""").fetchall()
# Pending merges
merges = conn.execute("""
SELECT COUNT(*) FROM cross_project_connections
WHERE connection_type = 'proposed_merge'
""").fetchone()[0]
# Works-with edges
edges = conn.execute("""
SELECT COUNT(*) FROM cross_project_connections
WHERE connection_type = 'works_with'
""").fetchone()[0]
PEOPLE GRAPH · N people across N projects
════════════════════════════════════════════════════════
Name Projects Confidence Updated
─────────────────────────────────────────────────────────
Alice Example my-project 87% 2h ago
...
Works-with relationships: N edges inferred
Pending merge proposals: N — run /brain-wiki review-merges to resolve
No people articles found. Run /brain-wiki generate to build the knowledge base.
/brain-wiki review-merges — Review and approve entity merge proposalsInteractively review merge proposals (entities that may be duplicates).
Procedure:
python3 ~/.claude/skills/brain/scripts/brain/brain_cli.py wiki --list-merges
MERGE PROPOSAL (similarity: 92%)
══════════════════════════════════════════════════════════
KEEP candidate A: KEEP candidate B:
───────────────────────────── ─────────────────────────
Name: Alice Example Name: Alice Examplé
GID: {uuid-a} GID: {uuid-b}
Projects: project-a, project-b Projects: vendor-integration
Summary A: {2-3 sentences} Summary B: {2-3 sentences}
══════════════════════════════════════════════════════════
Action: [A=keep A | B=keep B | s=skip | q=quit]
python3 ~/.claude/skills/brain/scripts/brain/brain_cli.py wiki --approve-merge {gid_keep} {gid_remove}
This:
DELETE FROM articles_fts WHERE gid=gid_remove then re-INSERT with gid_keep
MERGE REVIEW COMPLETE
=====================
Approved: N merges
Skipped: N pairs
Remaining: N pending
/brain-wiki install-cron — Set up daily improvement cronInstall the daily knowledge engine job via macOS launchd.
Procedure:
python3 ~/.coco/knowledge/cron.py --install
KNOWLEDGE CRON INSTALLED
========================
Schedule: Daily at 02:00
Claude binary: {resolved path}
Python binary: {resolved path}
Plist: ~/Library/LaunchAgents/com.coco.knowledge-cron.plist
Log: ~/.coco/knowledge/cron.log
To uninstall: /brain-wiki uninstall-cron
To test now: python3 ~/.coco/knowledge/cron.py --run --dry-run
_find_claude_binary() with install instructions.To uninstall:
python3 ~/.coco/knowledge/cron.py --uninstall
/brain-wiki stats — Show knowledge engine statisticsDisplay current state of the knowledge engine without running any generation.
Procedure:
Query knowledge.db directly:
import sqlite3, json
from pathlib import Path
conn = sqlite3.connect(Path("~/.coco/knowledge/knowledge.db").expanduser())
stats = {
"entities": conn.execute("SELECT COUNT(*) FROM global_entities").fetchone()[0],
"articles": conn.execute("SELECT COUNT(*) FROM articles").fetchone()[0],
"fts_rows": conn.execute("SELECT COUNT(*) FROM articles_fts").fetchone()[0],
"pending_merges": conn.execute(
"SELECT COUNT(*) FROM cross_project_connections WHERE connection_type='proposed_merge'"
).fetchone()[0],
"works_with": conn.execute(
"SELECT COUNT(*) FROM cross_project_connections WHERE connection_type='works_with'"
).fetchone()[0],
"last_gen": conn.execute(
"SELECT MAX(run_at) FROM generation_log WHERE phase='3_generate' AND status='ok'"
).fetchone()[0],
"last_sync": conn.execute(
"SELECT MAX(run_at) FROM generation_log WHERE phase='6_sync' AND status='ok'"
).fetchone()[0],
"by_type": conn.execute(
"SELECT type, COUNT(*) FROM global_entities GROUP BY type"
).fetchall(),
}
Display format:
KNOWLEDGE ENGINE STATS
══════════════════════════════════════════════════
Entities: N (person: N, system: N, team: N ...)
Articles: N (FTS5 indexed: N)
Relationships: N works_with edges
Pending merges: N proposals awaiting review
Last generation: {time ago}
Last MemPalace sync: {time ago}
Articles directory: ~/.coco/knowledge/articles/ (N files)
DB size: {KB/MB}
══════════════════════════════════════════════════
Commands: /brain-wiki generate · /brain-wiki search · /brain-wiki review-merges
If knowledge.db does not exist:
Knowledge engine not initialized.
Run /brain-wiki generate to bootstrap, or /brain-wiki install-cron for daily automation.
Score normalization: score = 1.0 / (1.0 + abs(rank)) — higher score = more relevant.
(FIX M5 from review findings.)
section["content"] from each section in body_json before inserting into articles_fts.
(FIX C3 from review findings.)
DELETE WHERE gid=? then re-INSERT for any gid change (e.g., merge approvals).
(FIX M6 from review findings.)
python3 ~/.claude/skills/brain/scripts/brain/brain_cli.py wiki-register \
--slug {slug} --db {path/to/project_brain.db}
brain-init Step 8 calls this automatically. (FIX M1 from review findings.)
~/.coco/disabled exists, all brain-wiki commands should exit silently(consistent with CoCo kill switch convention).
Interactive daily standup/meeting update generator. Use when user says 'daily', 'standup', 'scrum update', 'status update', 'what did I do yesterday', 'prepare for meeting', 'morning update', or 'team sync'. Pulls activity from GitHub, Jira, and Claude Code session history. Conducts 4-question interview (yesterday, today, blockers, discussion topics) and generates formatted Markdown update.
Start your day with a prioritized sales briefing. Works standalone when you tell me your meetings and priorities, supercharged when you connect your calendar, CRM, and email. Trigger with "morning briefing", "daily brief", "what's on my plate today", "prep my day", or "start my day".
Full ICP-to-leads pipeline. Describe your ideal customer in plain English and get a ranked table of enriched decision-maker leads with emails and phone numbers.
Analyze meeting notes to find action items and create Jira tasks for assigned work. When an agent needs to: (1) Create Jira tasks or tickets from meeting notes, (2) Extract or find action items from notes or Confluence pages, (3) Parse meeting notes for assigned tasks, or (4) Analyze notes and generate tasks for team members. Identifies assignees, looks up account IDs, and creates tasks with proper context.
When the user wants to optimize post-signup onboarding, user activation, first-run experience, or time-to-value. Also use when the user mentions "onboarding flow," "activation rate," "user activation," "first-run experience," "empty states," "onboarding checklist," "aha moment," or "new user experience." For signup/registration optimization, see signup-flow-cro. For ongoing email sequences, see email-sequence.
Prepare for tomorrow''s meetings and tasks. Pulls calendar from Outlook via WorkIQ, cross-references open tasks and workspace context, classifies meetings, detects conflicts and day-fit issues, finds learning and deep-work slots, and generates a structured HTML prep file with productivity recommendations.
Design meeting rhythms, metric reporting, quarterly planning, and decision-making velocity for scaling companies. Use when decisions are slow, planning is broken, the company is growing but alignment is worse, or leadership meetings consume all time without producing decisions.
Add Google Calendar as an MCP tool (list calendars, list/search/create events, free/busy queries) using OneCLI-managed OAuth. Multi-calendar and multi-account supported. Mirrors /add-gmail-tool's stub pattern — no raw credentials ever reach the container; OneCLI injects real tokens at request time.
Take coco-research/brain:wiki from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.