mirror of
https://github.com/garrytan/gbrain.git
synced 2026-07-27 22:15:33 +00:00
* feat: add cold-start and ask-user skills cold-start: Day-one brain bootstrapping that sequences the highest-leverage data sources (contacts, calendar, email, conversations, social, archives) to go from empty brain to useful brain. Recommends ClawVisor for credential safety. Each phase is independently valuable and gated on user consent. Includes resume protocol for interrupted sessions. ask-user: Platform-agnostic choice-gate pattern for presenting users with 2-4 options and stopping execution until they respond. Works with Telegram inline buttons, Discord, CLI, or Hermes clarify tool. Adapted from the Wintermute ask-user pattern for the general gbrain ecosystem. Also: - Updated manifest.json with both new skills - Updated RESOLVER.md with cold-start triggers and ask-user convention - Updated setup/SKILL.md to point to cold-start as natural next step - Updated GBRAIN_SKILLPACK.md with Getting Started section * fix: make cold-start the automatic next step after setup - Add Phase J to setup skill — transitions directly into cold-start after verification passes, not as a 'next steps' bullet - Agent MUST offer cold-start, not just mention it - Add anti-pattern: 'ending setup without offering cold-start' - Update output format to flow into cold-start prompt - Track deferred state if user declines * safety: make ClawVisor required for API access, not optional Phase 0 is now 'ClawVisor Setup (Required for API Access)' — not 'Credential Gateway Setup' with three options. The framing changed: - ClawVisor is the safe path. Direct OAuth is not offered as an alternative. - If user declines ClawVisor, agent skips to offline-only imports (markdown, conversation exports, Twitter archive, file archives). - Explicitly: 'Do NOT offer direct OAuth as an alternative.' - Safety boundary callout explains why: raw OAuth tokens + AI agent = uncontrolled attack surface (prompt injection → full Google account). - Anti-pattern #1 is now 'Giving the agent raw OAuth tokens.' - Revocation advantage highlighted: disable access in one click. The contract, description, manifest, and skillpack doc all updated to say 'uses' not 'recommends'. * fix: PR #802 ask-user/cold-start clear repo test gates Four contributor bugs in PR #802 fail existing test gates: - ask-user/SKILL.md missing required Contract / Anti-Patterns / Output Format sections (test/skills-conformance.test.ts). - cold-start/SKILL.md description references trigger phrase "now what?" but the triggers: list omits it (test/resolver.test.ts round-trip). - ask-user is in skills/manifest.json but has no trigger row in RESOLVER.md, breaking manifest reachability (test/resolver.test.ts). - cold-start/SKILL.md writes_to: declares daily/, media/, conversations/ which aren't in skills/_brain-filing-rules.json, failing test/check-resolvable.test.ts. Adds the missing skill sections, the missing trigger entries, and three filing-rules entries to legitimize cold-start's writes_to. The filing-rules additions describe daily/ as date-keyed (calendar + daily notes), media/ as format-prefixed for source-format ingest (media/x/{handle}/), and conversations/ for chat exports. Test surface: - bun test test/skills-conformance.test.ts → was 207 pass / 3 fail, now 209 pass / 0 fail. - bun test test/resolver.test.ts → was 82 pass / 2 fail, now 84 pass / 0 fail. - bun test test/check-resolvable.test.ts → was 24 pass / 1 fail, now 25 pass / 0 fail. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: scrub 'Hermes Agent' references from PR #802-introduced files CLAUDE.md privacy doctrine forbids naming private agent forks (Wintermute, Hermes, Neuromancer) in any public artifact: skills, README, CHANGELOG, PR titles, commit messages, comments. The canonical phrasing is "OpenClaw" or "your OpenClaw". PR #802 introduced three sites that violated the rule: - skills/ask-user/SKILL.md:79 section heading "With the `clarify` tool (Hermes Agent)". - skills/ask-user/SKILL.md:80 body line "Hermes agents have a built-in `clarify` tool". - skills/manifest.json ask-user description listed "Hermes clarify tool" alongside Telegram / Discord / CLI. Scrub is narrow: only the three PR-introduced sites. Pre-existing "Hermes" references elsewhere in the repo (README.md links to NousResearch/hermes-agent, docs/integrations/credential-gateway.md, docs/guides/cron-schedule.md, etc.) are intentional public-project references to the open-source Hermes Agent and stay in place. scripts/check-privacy.sh enforces the wintermute layer of the rule on every push; the Hermes / Neuromancer doctrine layer is doctrinal only. Future hardening (extending the script to also ban Hermes / Neuromancer in a precise allow-listed way) is filed as TODOS.md P8. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * v0.31.10 feat: cold-start + ask-user skills PR #802 ships the cold-start skill (day-one brain bootstrapping across 8 phases) and the ask-user skill (choice-gate pattern). Setup skill's Phase J auto-launches cold-start when verification passes, closing the "now what?" gap that every new gbrain user hits. Cold-start orchestrates existing recipes (email-to-brain, calendar-to-brain, x-to-brain) and skills (meeting-ingestion); it does not reinvent ingestion logic. State persists across agent crashes via ~/.gbrain/cold-start-state.json, matching the existing update-state.json convention. Trigger phrases include "cold start", "fill my brain", "now what?", "bootstrap", "import my data". Known limitations explicitly flagged in CHANGELOG: - ClawVisor required for API-backed phases (Contacts / Calendar / Gmail). v0.32 will restore the dual A / B pattern that recipes/email-to-brain.md and recipes/calendar-to-brain.md already document. - Phase-level resume granularity. Mid-phase failure restarts the phase from item 1; idempotent slug writes prevent duplicates. Per-item resume lands with the gbrain cold-start CLI counterpart in v0.32. CHANGELOG entry follows the canonical release-summary spec from CLAUDE.md:930: bold headline, 3-5 sentence lead, "What you can now do" section, "How it works under the hood", "Known limitations", "To take advantage of v0.31.10" block, "For contributors". Version bumps from 0.31.2 (branch base) past master's 0.31.3 to 0.31.10. Slots 0.31.4 through 0.31.9 are reserved for in-flight work; the gap is deliberate. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Neuromancer <neuromancer@garryslist.org> Co-authored-by: Garry Tan <garrytan@gmail.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
166 lines
8.0 KiB
JSON
166 lines
8.0 KiB
JSON
{
|
|
"version": "1.0.0",
|
|
"companion": "_brain-filing-rules.md",
|
|
"description": "Canonical (machine-readable) brain filing rules. The .md companion is the human explainer; this JSON is what `gbrain check-resolvable` audits against. Keep both in sync.",
|
|
"rules": [
|
|
{
|
|
"kind": "person",
|
|
"directory": "people/",
|
|
"examples": ["founders", "investors", "attendees", "contacts"],
|
|
"description": "A page whose primary subject is one person."
|
|
},
|
|
{
|
|
"kind": "company",
|
|
"directory": "companies/",
|
|
"examples": ["portfolio companies", "acquirers", "vendors"],
|
|
"description": "A page whose primary subject is one company or organization."
|
|
},
|
|
{
|
|
"kind": "deal",
|
|
"directory": "deals/",
|
|
"examples": ["seed rounds", "acquisitions"],
|
|
"description": "A page whose primary subject is a financing or M&A transaction."
|
|
},
|
|
{
|
|
"kind": "meeting",
|
|
"directory": "meetings/",
|
|
"examples": ["1:1s", "pitches", "pods"],
|
|
"description": "A meeting transcript or minutes. Propagate entities to companies/ and people/ pages."
|
|
},
|
|
{
|
|
"kind": "concept",
|
|
"directory": "concepts/",
|
|
"examples": ["mental models", "theses", "frameworks"],
|
|
"description": "A reusable idea, framework, or mental model not tied to a specific person/company."
|
|
},
|
|
{
|
|
"kind": "project",
|
|
"directory": "projects/",
|
|
"examples": ["internal initiatives", "multi-session work"],
|
|
"description": "A multi-session piece of work with its own arc."
|
|
},
|
|
{
|
|
"kind": "analysis",
|
|
"directory": "analysis/",
|
|
"examples": ["deep dives", "comparative studies"],
|
|
"description": "A long-form analysis of a specific topic."
|
|
},
|
|
{
|
|
"kind": "civic",
|
|
"directory": "civic/",
|
|
"examples": ["policy analysis", "government topics"],
|
|
"description": "Public-sector, policy, or civic-issue content."
|
|
},
|
|
{
|
|
"kind": "writing",
|
|
"directory": "writing/",
|
|
"examples": ["essays", "drafts", "published pieces"],
|
|
"description": "A piece of prose authored by the user."
|
|
},
|
|
{
|
|
"kind": "guide",
|
|
"directory": "guides/",
|
|
"examples": ["runbooks", "how-to docs"],
|
|
"description": "A guide or runbook authored for future reference."
|
|
},
|
|
{
|
|
"kind": "tech",
|
|
"directory": "tech/",
|
|
"examples": ["APIs", "libraries", "language notes"],
|
|
"description": "Technical references and tooling notes not tied to a specific company."
|
|
},
|
|
{
|
|
"kind": "finance",
|
|
"directory": "finance/",
|
|
"examples": ["market data", "metrics"],
|
|
"description": "Financial reference data not tied to a single deal."
|
|
},
|
|
{
|
|
"kind": "personal",
|
|
"directory": "personal/",
|
|
"examples": ["logistics", "family"],
|
|
"description": "Personal-life content — kept separate from work."
|
|
},
|
|
{
|
|
"kind": "idea",
|
|
"directory": "ideas/",
|
|
"examples": ["product ideas", "essay seeds", "back-of-envelope concepts"],
|
|
"description": "Generative ideas the user might build, write, or expand later. Stub-shaped pages that mature over time. voice-note-ingest, archive-crawler, and similar capture-flavored skills file here when content is something to potentially act on."
|
|
},
|
|
{
|
|
"kind": "research",
|
|
"directory": "research/",
|
|
"examples": ["web-research deltas", "freshness checks", "citation-verified claims"],
|
|
"description": "Web-research output: what is NEW vs already-known about a topic, citation-checked claims, freshness deltas. perplexity-research and academic-verify file here."
|
|
},
|
|
{
|
|
"kind": "original",
|
|
"directory": "originals/",
|
|
"examples": ["the user's own theses", "frameworks the user generated", "novel observations the user expressed"],
|
|
"description": "Pages where the user is the primary author of the idea — original thinking, not summarizations of someone else's work. voice-note-ingest, archive-crawler, signal-detector route content here when the user is the originator."
|
|
},
|
|
{
|
|
"kind": "voice-note",
|
|
"directory": "voice-notes/",
|
|
"examples": ["raw transcripts", "audio capture pages"],
|
|
"description": "Voice-note transcript holders, especially when the content is a random thought that doesn't cleanly fit originals/, concepts/, or another subject directory. voice-note-ingest is the primary writer."
|
|
},
|
|
{
|
|
"kind": "openclaw",
|
|
"directory": "openclaw/",
|
|
"examples": ["agent-state notes"],
|
|
"description": "Notes about the host OpenClaw agent itself, not the underlying entities."
|
|
},
|
|
{
|
|
"kind": "synthesis-output",
|
|
"directory": "media/books/",
|
|
"examples": ["personalized book mirrors", "two-column chapter analyses"],
|
|
"description": "Sanctioned exception to 'file by primary subject' for sui generis synthesized output that is one-of-one to a single book and a specific reader. Format-prefixed under media/<format>/ is allowed for synthesis output only, never for raw ingest. See _brain-filing-rules.md."
|
|
},
|
|
{
|
|
"kind": "synthesis-output",
|
|
"directory": "media/articles/",
|
|
"examples": ["personalized article reads", "long-form content tailored to reader"],
|
|
"description": "Same sanctioned exception as media/books/. One-of-one synthesis output of an article personalized for the reader. Distinct from raw article ingest, which goes to the article's primary-subject directory."
|
|
},
|
|
{
|
|
"kind": "daily",
|
|
"directory": "daily/",
|
|
"examples": ["daily/calendar/YYYY-MM-DD.md", "daily/notes/YYYY-MM-DD.md"],
|
|
"description": "Date-keyed pages for events, calendar entries, or daily notes. Calendar imports land at daily/calendar/YYYY-MM-DD.md with attendees cross-linked to people/. Use when the primary subject is the date itself, not a person or topic."
|
|
},
|
|
{
|
|
"kind": "media-format",
|
|
"directory": "media/",
|
|
"examples": ["media/x/{handle}/", "media/audio/", "media/video/"],
|
|
"description": "Format-prefixed parent for media-by-source-format ingest. Subdirectories like media/x/{handle}/ hold X/Twitter archives, media/audio/ holds podcast/voice captures. The format-prefix lives only when the content is sui generis to the source format AND lacks a clean primary-subject directory. Prefer subject-by-subject filing; fall through to media/ only when the source format IS the unifying frame."
|
|
},
|
|
{
|
|
"kind": "conversation",
|
|
"directory": "conversations/",
|
|
"examples": ["conversations/chatgpt/{thread-slug}.md", "conversations/claude/{thread-slug}.md"],
|
|
"description": "Imported chat exports (ChatGPT, Claude, etc.) where the conversation itself is the artifact. Cross-link concepts and people from the conversation; the conversation page is the source-of-truth for the dialog. Distinct from voice-notes/ (which holds raw voice capture)."
|
|
}
|
|
],
|
|
"sources_dir": {
|
|
"directory": "sources/",
|
|
"purpose": "ONLY for raw data: bulk imports, API dumps, periodic captures. A page with a clear primary subject (person, company, concept) does NOT belong here.",
|
|
"not_for": ["articles about a person", "analyses of a company", "reusable frameworks"]
|
|
},
|
|
"notes": [
|
|
"The PRIMARY SUBJECT of the content determines the directory, not the format or source skill.",
|
|
"When in doubt: what would you search for to find this page again?",
|
|
"Cross-link from related directories via back-links — do not duplicate content."
|
|
],
|
|
"dream_synthesize_paths": {
|
|
"description": "Single source of truth for the v0.23 dream-cycle synthesize/patterns trusted-workspace allow-list. The cycle's synthesize phase reads this list and threads it as `allowed_slug_prefixes` to every subagent it dispatches; put_page enforces it server-side. Editing this list is the ONLY way to add a new directory the synthesis subagent may write to.",
|
|
"globs": [
|
|
"wiki/personal/reflections/*",
|
|
"wiki/originals/*",
|
|
"wiki/personal/patterns/*",
|
|
"wiki/people/*",
|
|
"dream-cycle-summaries/*"
|
|
]
|
|
}
|
|
}
|