skills/cold-start/SKILL.md
Day-one data bootstrapping for a new brain. Sequences the highest-leverage data sources to go from empty brain to useful brain in one session. Uses ClawVisor for safe credential handling — the agent never holds raw API keys. Covers Gmail import, calendar sync, contacts seeding, X/Twitter archive, conversation imports, and file archives. Use when a user has just finished gbrain setup and asks "now what?"
npx skillsauth add garrytan/gbrain cold-startInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You have a working brain. Search works. Now what?
An empty brain is a static database. A brain with your email history, calendar, contacts, conversations, and social media is a live context membrane that makes every future interaction smarter. This skill sequences the highest-leverage data sources to get you from zero to useful in one session.
~/.gbrain/cold-start-state.json so interrupted sessions
can resume.gbrain doctor --json all green)gbrain CLI commandsData sources ranked by information density × ease of import:
| Priority | Source | Why | Time | Pages Created | |----------|--------|-----|------|---------------| | 1 | Existing markdown/Obsidian | Highest density — it's already structured | 5 min | 100s-1000s | | 2 | Google Contacts | Seeds the people/ directory — names, emails, companies | 10 min | 50-500 | | 3 | Google Calendar (90 days) | Meeting history with attendee context | 15 min | 30-90 | | 4 | Gmail (recent threads) | Relationship context, active threads, org chart signals | 20 min | 50-200 | | 5 | Conversations (ChatGPT/Claude exports) | Your thinking, questions, mental models | 15 min | 10-100 | | 6 | X/Twitter archive | Your public positions, takes, engagement patterns | 20 min | 30-365 | | 7 | File archives (Dropbox/Drive/local) | Historical documents, old writing, photos | 30+ min | varies | | 8 | Meeting transcripts (Circleback/etc.) | Deep relationship context from recorded calls | 20 min | 10-50 |
Safety boundary: An AI agent with raw OAuth tokens to your Gmail, Calendar, and Contacts is an uncontrolled attack surface. One prompt injection, one malicious tool call, and your entire Google account is exposed. ClawVisor eliminates this risk class entirely.
ClawVisor is a credential gateway that sits between the agent and your APIs. The agent never sees your credentials — ClawVisor injects them at request time, enforces policies, and logs everything.
What ClawVisor gives you:
Setup (15 min):
gbrain config set clawvisor_url "https://app.clawvisor.com"
gbrain config set clawvisor_agent_token "<token>"
"Full brain bootstrapping: read emails, calendar events, and contacts to populate knowledge base. List, read, and search across all connected accounts."
gbrain config set clawvisor_task_id "<task_id>"
Critical scoping rule: Be expansive in task purposes. "Email triage" gets rejected by intent verification. "Full executive assistant email management including inbox triage, searching by any criteria, reading emails, tracking threads" works. The intent model uses the purpose to judge each request.
Do NOT fall back to direct OAuth. Instead, skip Phases 2-4 (Contacts, Calendar, Gmail) and proceed with offline-only imports:
Tell the user:
"No problem. We'll skip the Google imports for now and work with file-based sources. You can set up ClawVisor anytime to unlock Contacts, Calendar, and Gmail imports safely."
Do NOT offer direct OAuth as an alternative. An agent holding raw Google tokens is a security liability. The skill should not teach agents to store credentials they shouldn't have.
The highest-leverage first import. If the user already has a notes system, this is hundreds or thousands of structured pages ready to go.
echo "=== Markdown Repository Discovery ==="
for dir in /data/* ~/git/* ~/Documents/* ~/notes/* ~/obsidian/* 2>/dev/null; do
if [ -d "$dir" ]; then
md_count=$(find "$dir" -name "*.md" -not -path "*/node_modules/*" \
-not -path "*/.git/*" -not -path "*/.obsidian/*" 2>/dev/null | wc -l | tr -d ' ')
if [ "$md_count" -gt 5 ]; then
total_size=$(du -sh "$dir" 2>/dev/null | cut -f1)
echo " $dir ($total_size, $md_count .md files)"
fi
fi
done
# For Obsidian vaults, use the migrate skill for proper wikilink handling
gbrain migrate --from obsidian --path /path/to/vault
# For plain markdown directories
gbrain import /path/to/dir --no-embed --workers 4
# Verify
gbrain stats
gbrain search "<topic from the imported data>"
gbrain extract links --source dbgbrain extract timeline --source dbgbrain embed --stale (runs in background)Track progress:
echo '{"phase_1_complete": true, "pages_imported": N}' > ~/.gbrain/cold-start-state.json
Seeds the people/ directory. Every person in your contacts becomes a brain page with name, email, phone, company, and notes. This is the foundation that all other imports build on — when Gmail references "[email protected]", the brain already knows who John is.
// Fetch all contacts
const contacts = await clawvisor('google.contacts', 'list_contacts', {
limit: 1000,
fields: 'names,emailAddresses,phoneNumbers,organizations,biographies'
});
curl -s -H "Authorization: Bearer $GOOGLE_TOKEN" \
"https://people.googleapis.com/v1/people/me/connections?personFields=names,emailAddresses,phoneNumbers,organizations,biographies&pageSize=1000"
For each contact:
gbrain search "name" to avoid duplicates[Source: Google Contacts, YYYY-MM-DD]After importing 5 contacts, pause and show the user a sample page. Ask:
"Here's what a contact page looks like. Want me to continue with the rest, or adjust the format first?"
Meeting history with attendee context. Calendar events reveal who the user meets with, how often, and in what context. Combined with contacts, this builds a rich relationship map.
// Via ClawVisor — query ALL calendar accounts
const accounts = ['[email protected]', '[email protected]'];
for (const account of accounts) {
const events = await clawvisor(`google.calendar:${account}`, 'list_events', {
timeMin: new Date(Date.now() - 90 * 86400000).toISOString(),
timeMax: new Date().toISOString(),
singleEvents: true,
orderBy: 'startTime'
});
}
Follow the three-tier calendar architecture:
brain/daily/calendar/
├── calendar-log.md ← compiled truth (patterns, key people)
├── YYYY/
│ ├── YYYY-MM.md ← monthly summary
│ └── YYYY-MM-DD.md ← daily event log
For each event with attendees:
Relationship context and active threads. Email reveals organizational relationships, ongoing conversations, and communication patterns.
Don't import every email. Import the signal:
For each email thread:
Auto-skip (never import):
Always import:
Your thinking, captured. AI conversation exports reveal what the user was researching, building, and thinking about. This is original thinking preserved in dialog form.
conversations.jsonFor each conversation:
Only import conversations rated 3+. The brain is for signal, not noise.
Your public positions and engagement patterns. Twitter reveals what the user thinks, who they engage with, and what ideas they're developing publicly.
brain/media/x/{handle}/
├── x-log.md ← compiled truth (themes, voice, key threads)
├── daily/YYYY-MM-DD.md ← daily tweet log
├── monthly/YYYY-MM.md ← monthly rollup
└── bookmarks/ ← saved/bookmarked content
Historical documents, old writing, photos with metadata. This is the long tail — less structured but potentially very high value (old journals, letters, early writing).
Delegate to the archive-crawler skill. It handles:
Safety gate: Archive crawling can be slow and create many pages. Always start with a scan-only pass:
gbrain archive-crawler --scan-only --path /path/to/archiveShow the user the manifest before proceeding with full ingestion.
Supported sources:
Deep relationship context from recorded calls. If the user has a meeting recording service (Circleback, Otter, Fireflies, Read.ai), import recent transcripts.
Delegate to meeting-ingestion skill. Key rules:
After completing available phases:
Verify brain health:
gbrain doctor --json
gbrain stats
Test retrieval:
gbrain query "who do I meet with most often?"
gbrain query "what am I working on?"
gbrain search "<person from contacts>"
Set up live sync (if not already):
gbrain sync --repo <path> every 5-30 minutesTrack state:
// ~/.gbrain/cold-start-state.json
{
"started": "2026-01-15T10:00:00Z",
"credential_gateway": "clawvisor",
"phases_completed": [1, 2, 3, 4],
"phases_skipped": [6, 7],
"total_pages_created": 847,
"total_entities_linked": 1203,
"next_phase": 5
}
Tell the user what to do next:
"Your brain has N pages across people, calendar, email, and conversations. Live sync is configured for [sources]. From here:
- The signal-detector captures entities from every conversation
- The briefing skill can compile daily context
- The executive-assistant pattern handles email triage
- Say 'enrich [person]' to deep-dive any contact"
If the session is interrupted:
~/.gbrain/cold-start-state.jsonnext_phaseAfter each phase:
PHASE N COMPLETE: [source name]
================================
Pages created: N
Pages updated: N
Entities linked: N
Time elapsed: N min
Sample pages:
- people/jane-smith.md (created — 3 emails, 5 meetings)
- companies/acme-corp.md (updated — 2 new employees linked)
Next: Phase N+1 — [description]. Ready to proceed?
search — check for existing pages before creatingquery — hybrid search for entity deduplicationget_page — read existing pages for merge decisionsput_page — create and update brain pagesadd_link — cross-reference entitiesadd_timeline_entry — record events on entity timelinessync_brain — sync changes to the index after each phasetools
Validate and auto-repair YAML frontmatter on brain pages. Catches malformed pages before they enter the brain (missing closing ---, nested quotes, slug mismatches, null bytes, empty frontmatter, YAML parse failures). Wraps the `gbrain frontmatter` CLI for agent-driven workflows.
data-ai
Trace one idea's evolution through the brain: first mention, best articulation, related concepts, reversals, contradictions, abandoned branches, and the current live version. Use for single-idea conceptual lineage, not broad concept-map synthesis or structured entity metrics.
data-ai
Route to Venus (sharp executive-assistant voice persona). Used for logistics — calendar, tasks, recent messages, brain lookups — at sub-second phone-call latency. The default voice persona unless DEFAULT_PERSONA=mars is set.
tools
Route to Mars (introspective thought partner / demo showman voice persona). Used when the operator wants depth, meaning, or impressive social demos rather than logistics. Mars handles SOLO mode (philosophy, presence, patterns) and DEMO mode (tool-driven showmanship) automatically.