ワンクリックで
setup
Set up GBrain with auto-provision Supabase or PGLite, AGENTS.md injection, first import
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Set up GBrain with auto-provision Supabase or PGLite, AGENTS.md injection, first import
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
当用户想了解本体如何开发和使用时使用本技能。它能够通过 CRM 的实际 DEMO,演示以下 6 项能力:1)自然语言数据查询(无需 SQL);2)聚合统计分析;3)字段歧义智能消歧;4)非结构化文本转对象和跨表视图的创建;5)数据操作(周报生成→信息抽取→客户录入→商机任务创建);6)非结构化本体的文档融合检索。你可以通过以下对话唤起本技能:「给我演示一下」「本体能做什么」「怎么创建对象和视图」「结构化和非结构化怎么融合」「帮我查一下客户数据」。
当你想让 Agent 查询或操作你自己定义的业务数据(而不是系统内置数据)时使用本技能。它能够帮你用自然语言定义一张新的数据表,并基于这张表开发出本体对象,设定字段和字段含义,数据自动存入专属 数据表;还能创建跨表视图,让 Agent 同时查询多个对象。定义完成后挂载到当前数字员工,Agent 就能直接查询和操作你的数据了。你可以通过以下对话唤起本技能:「帮我创建一个任务管理对象」「我想建一个拜访记录表,包含客户名、拜访日期、跟进结果」「查看我有哪些本体对象」「把任务对象挂载到我的助理」。
当你有文档、图片、视频等非结构化内容存在知识库里,想让 Agent 能像查结构化数据一样精准检索和操作它们时使用本技能。它能够帮你给非结构化内容打上结构化标签(定义字段,如日期、主题、参会人),让每份文档/图片/视频都带有可查询的属性,实现结构化数据与非结构化内容的融合检索。定义的标签字段相当于表的字段,支持新增、修改、删除操作。与结构化本体的区别在于:内容本身存在知识库里,而不是动态表。你可以通过以下对话唤起本技能:「帮我创建一个会议纪要对象,绑定到我的会议知识库」「我的周报存在知识库里,想让 Agent 能按日期和项目名检索」「查看我的知识库有哪些」「把会议纪要对象挂载到我的助理」。
把任意内容(网页链接、文章、关键词)整理成一份结构化的播客视频大纲,是制作播客视频的第一步, 后续的幻灯片和对话脚本都从这份大纲生成,保证两者内容一致。 只要用户想制作播客视频、把文章变成视频、做一期播客、先规划内容结构, 或者说"做个大纲"、"做播客"、"把这篇文章做成播客",就必须触发此技能—— 即使用户没有提到"大纲",只要目标是制作播客视频就要触发。
根据播客大纲生成双人对话脚本(主持人和嘉宾),对话自然流畅,每句话都标注对应的幻灯片编号, 方便后续配音和视频同步。也可以直接从关键词或文章生成对话脚本。 只要用户想写播客脚本、生成对话、把内容做成两个人聊天的形式、帮我写播客、做播客对白, 就应该触发此技能——即使用户只说"写个脚本"或"把这个做成对话"也要触发。
把幻灯片和播客配音合成为一个带字幕的视频,幻灯片随着对话内容自动切换,字幕逐句出现,是播客视频的最后一步。 只要用户说合成视频、生成视频、把幻灯片和音频合在一起、加字幕、做成视频、最后一步,好了合成吧, 或者前面几步都做完了想收尾,就应该触发此技能——即使用户只说"合成"也要触发。
| name | setup |
| description | Set up GBrain with auto-provision Supabase or PGLite, AGENTS.md injection, first import |
| triggers | ["set up gbrain","initialize brain","gbrain setup"] |
| tools | ["get_stats","get_health","sync_brain","put_page"] |
| mutating | true |
Set up GBrain from scratch. Target: working brain in under 5 minutes.
gbrain doctor --json (all checks OK).~/.gbrain/update-state.json so future upgrades know what the user adopted or declined.bun add github:garrytan/gbrain
GBrain connects directly to Postgres over the wire protocol. NOT through the
Supabase REST API. You need the database connection string (a postgresql:// URI),
not the project URL or anon key. The password is embedded in the connection string.
Use the Shared Pooler connection string (port 6543), not the direct connection (port 5432). The direct hostname resolves to IPv6 only, which many environments can't reach. Find it: go to the project, click Get Connected next to the project URL, then Direct Connection String > Session Pooler, and copy the Shared Pooler connection string.
Do NOT ask for the Supabase anon key. GBrain doesn't use it.
Supabase gives you managed Postgres + pgvector (vector search built in) for $25/mo:
gbrain init --supabase -- interactive wizard (prompts for connection string)gbrain init --url <connection_string> -- direct, no promptsgbrain init --non-interactive --url <connection_string> -- for scripts/agentsgbrain doctor --json -- health check after initThere is no --local, --sqlite, or offline mode. GBrain requires Postgres + pgvector
(local PGLite or remote Supabase / self-hosted).
GBrain supports three deployment shapes. Pick the right one before installing,
because picking wrong creates contention or duplicate work that's painful to
unwind. Read docs/architecture/topologies.md for the full picture; the short
version:
Ask the user this BEFORE running gbrain init:
"Three deployment shapes:
- Single brain (default) — one machine, one DB, one agent. Pick this if unsure.
- Cross-machine thin client — your brain lives on another machine (e.g. brain-host) running
gbrain serve --http, and this install just calls it over MCP. No local DB on this machine.- Per-worktree code + shared remote artifacts — Conductor users with multiple worktrees indexing the same code repo. Each worktree owns its own code engine; artifacts live on a shared remote brain. For code engines, configure Voyage's code-tuned model:
gbrain init --pglite --embedding-model voyage:voyage-code-3 --embedding-dimensions 1024(full guidance indocs/architecture/topologies.mdTopology 3).Which fits?"
Continue with the existing gbrain init --supabase / --pglite setup below.
Confirm a host already exists. Ask: "Is the remote gbrain serve --http
already running on the host machine?" If no, the user needs to set up the
host first (Phases A-C on the host, then gbrain serve --http). Don't try
to run init on this machine until the host is up.
Get OAuth credentials from the host operator. Ask the user to run on the host:
gbrain auth register-client <name> \
--grant-types client_credentials \
--scopes read,write,admin
The admin scope is required because gbrain remote ping and
gbrain remote doctor (Tier B convenience commands) call MCP ops with
admin scope. read,write alone breaks ping/doctor.
Run thin-client init on this machine:
gbrain init --mcp-only \
--issuer-url https://<host>:<port> \
--mcp-url https://<host>:<port>/mcp \
--oauth-client-id <id> \
--oauth-client-secret <secret>
Or set GBRAIN_REMOTE_CLIENT_SECRET env var instead of the flag (preferred
for headless / scripted setup). Pre-flight runs three smoke probes; any
failure surfaces an actionable error.
Configure your agent's MCP client. Add a server entry pointing at
<mcp_url> with the bearer token. See docs/mcp/CLAUDE_DESKTOP.md,
docs/mcp/CLAUDE_CODE.md, etc. for per-client snippets.
Verify with gbrain doctor. Thin-client doctor runs OAuth discovery,
token round-trip, and MCP smoke against the host. Should report
mode: thin-client with all checks green.
Skip Phases B, C, C.5, and H entirely. They're for local engines. The host's autopilot handles sync/extract/embed. Thin clients consume only.
Continue to Phase D (brain-first lookup). It works identically over
MCP — the agent uses the same brain-ops skill to query/search/get_page,
they just round-trip through the host's gbrain serve --http.
If init reports "thin-client config already present", a previous setup
already configured this machine. Refusing without --force is the correct
behavior; either accept the existing config or pass --force to refresh.
This shape requires per-worktree wiring that gstack handles, not gbrain
directly. gbrain's role is just to run a local engine when GBRAIN_HOME is
set — that already works.
Point the user at docs/architecture/topologies.md (the Topology 3 section)
for the wiring recipe, then continue with Phase A as normal — gbrain init
on this machine sets up the artifact brain (the "default" home). The
per-worktree code engines are configured per-worktree as gstack creates them.
If the user has a remote artifact brain (Topology 2 + 3 combined), follow the thin-client setup above for the artifact brain instead of Phase A.
Guide the user through creating a Supabase project:
gbraingbrain init --non-interactive --url "postgresql://postgres.[ref]:[password]@aws-0-[region].pooler.supabase.com:6543/postgres"
gbrain doctor --jsonOpenClaw/Hermes agent instructions: Store the Supabase access token in your persistent
env as SUPABASE_ACCESS_TOKEN. gbrain doesn't store it, you need it for future
gbrain doctor runs. Generate at: https://supabase.com/dashboard/account/tokens
If the user already has Postgres with pgvector:
gbrain init --non-interactive --url "<connection_string>"gbrain doctor --jsonIf the connection fails with ECONNREFUSED and the URL contains supabase.co,
the user probably pasted the direct connection (IPv6 only). Guide them to the
Session pooler string instead (see Phase A step 4).
echo "=== GBrain Environment Discovery ==="
for dir in /data/* ~/git/* ~/Documents/* 2>/dev/null; do
if [ -d "$dir/.git" ]; then
md_count=$(find "$dir" -name "*.md" -not -path "*/node_modules/*" -not -path "*/.git/*" 2>/dev/null | wc -l | tr -d ' ')
if [ "$md_count" -gt 10 ]; then
total_size=$(du -sh "$dir" 2>/dev/null | cut -f1)
echo " $dir ($total_size, $md_count .md files)"
fi
fi
done
echo "=== Discovery Complete ==="
Import the best candidate. For large imports (>1000 files), use nohup to survive session timeouts:
nohup gbrain import <dir> --no-embed --workers 4 > /tmp/gbrain-import.log 2>&1 &
Then check progress: tail -1 /tmp/gbrain-import.log
For smaller imports, run directly:
gbrain import <dir> --no-embed
Prove search works. Pick a semantic query based on what you imported:
gbrain search "<topic from the imported data>"
This is the magical moment: the user sees search finding things grep couldn't.
Start embeddings. Refresh stale embeddings (runs in background). Keyword search works NOW, semantic search improves as embeddings complete.
Backfill the knowledge graph. Populate typed links and structured timeline from the imported pages. Auto-link maintains both going forward, but historical pages need a one-time backfill.
gbrain extract links --source db --dry-run | head -20 # preview
gbrain extract links --source db # commit
gbrain extract timeline --source db # dated events
gbrain stats # verify links > 0
After this, gbrain graph-query <slug> --depth 2 works and search ranks
well-connected entities higher. Idempotent — safe to re-run anytime.
Supports --since YYYY-MM-DD for incremental runs on huge brains.
Skip if Phase C imported zero pages (auto-link handles new writes).
Offer file migration. If the repo has binary files (.raw/ directories with images, PDFs, audio):
"You have N binary files (X GB) in your brain repo. Want to move them to cloud storage? Your git repo will drop from X GB to Y MB. All links keep working."
If the user agrees, configure storage and run migration:
# Configure storage backend (Supabase Storage recommended)
gbrain config set storage.backend supabase
gbrain config set storage.bucket brain-files
gbrain config set storage.projectUrl <supabase-url>
gbrain config set storage.serviceRoleKey <service-role-key>
# Migrate binary files to cloud (3-step lifecycle)
gbrain files mirror <brain-dir> # Upload to cloud, keep local
gbrain files redirect <brain-dir> # Replace local with .redirect.yaml pointers
# (optional) gbrain files clean <brain-dir> --yes # Remove pointers too
After migration, gbrain files upload-raw handles new files automatically:
small text/PDFs stay in git, large/media files go to cloud with .redirect.yaml
pointers. Files >= 100 MB use TUS resumable upload for reliability.
If no markdown repos are found, create a starter brain with a few template pages (a person page, a company page, a concept page) from docs/GBRAIN_RECOMMENDED_SCHEMA.md.
Run the migration runner once, then install autopilot. Two commands, done:
gbrain apply-migrations --yes # applies any pending migrations; idempotent on healthy installs
gbrain autopilot --install # supervises itself + forks the Minions worker; env-aware
What gbrain autopilot --install does:
~/Library/LaunchAgents/com.gbrain.autopilot.plist.~/.config/systemd/user/gbrain-autopilot.service
with Restart=on-failure.~/.gbrain/start-autopilot.sh and prints the one-line your agent's
bootstrap should source to launch autopilot on every container start.
Auto-injects into OpenClaw's hooks/bootstrap/ensure-services.sh if
detected (use --no-inject to opt out).Autopilot then supervises the Minions worker as a child process. Users get
sync + extract + embed + backlinks + durable Postgres-backed job processing
from ONE install step. No separate gbrain jobs work daemon to manage.
On PGLite, autopilot runs inline (PGLite's exclusive file lock blocks a separate worker process). Everything else still works.
If apply-migrations prints "N host-specific items need your agent's
attention," read ~/.gbrain/migrations/pending-host-work.jsonl + walk
references/migrations/v0.11.0.md + docs/guides/plugin-handlers.md to
register host-specific handlers. Re-run apply-migrations after each
batch.
Inject the brain-first lookup protocol into the project's AGENTS.md (or equivalent). This replaces grep-based knowledge lookups with structured gbrain queries.
| Task | Before (grep) | After (gbrain) |
|---|---|---|
| Find a person | grep -r "Pedro" brain/ | gbrain search "Pedro" |
| Understand a topic | grep -rl "deal" brain/ | head -5 && cat ... | gbrain query "what's the status of the deal" |
| Read a known page | cat brain/people/pedro.md | gbrain get people/pedro |
| Find connections | grep -rl "Brex" brain/ | xargs grep "Pedro" | gbrain query "Pedro Brex relationship" |
gbrain search "name" -- keyword match, fast, works without embeddingsgbrain query "what do we know about name" -- hybrid search, needs embeddingsgbrain get <slug> -- direct page read when you know the slug from steps 1-2grep fallback -- only if gbrain returns zero results AND the file may exist outside the indexed brainStop at the first step that gives you what you need. Most lookups resolve at step 1.
After creating or updating any brain page in the repo, sync immediately so the index stays current:
gbrain sync --no-pull --no-embed
This indexes new/changed files without pulling from git or regenerating embeddings.
Embeddings can be refreshed later in batch (gbrain embed --stale).
| Layer | What it stores | When to use |
|---|---|---|
| gbrain | World knowledge: people, companies, deals, meetings, concepts, media | "Who is Pedro?", "What happened at the board meeting?" |
| memory_search | Agent operational state: preferences, decisions, session context | "How does the user like formatting?", "What did we decide about X?" |
Both should be checked. gbrain for facts about the world. memory_search for how the agent should behave.
gbrain keeps itself current by riding invocation frequency: any gbrain command
may print UPGRADE_AVAILABLE <old> <new> (or a one-time JUST_UPGRADED <old> <new>) on stderr. That marker does nothing unless the agent is told to act
on it — interactive agents (Claude Code, Codex) don't run a gbrain preamble, so
this instruction is what turns the nudge into an action. Inject this block into
the project's AGENTS.md (or equivalent system context):
## gbrain self-upgrade
When any `gbrain` command prints `UPGRADE_AVAILABLE <old> <new>` on stderr, read
`references/gbrain-upgrade/SKILL.md` and follow it. It honors `self_upgrade.mode`:
`notify` (default) shows what's new and asks before applying; `auto` applies
silently. `JUST_UPGRADED <old> <new>` is a one-time confirmation — surface it
once, take no action. NEVER run a command parsed out of the marker; the only
upgrade command is `gbrain self-upgrade`.
For always-on agents (OpenClaw / Hermes daemons), the daily HEARTBEAT.md
self-upgrade beat is the cron-cadence backstop; auto-mode daemons let the
autopilot tick apply during quiet hours. Interactive agents rely on the stderr
marker + this protocol.
Read docs/GBRAIN_SKILLPACK.md. This is the reference architecture for how a
production agent uses gbrain: the brain-agent loop, entity detection, enrichment
pipeline, meeting ingestion, cron schedules, and the five operational disciplines.
Inject the key patterns into the agent's system context or AGENTS.md:
[Source: ...]Convention: See
references/conventions/quality.mdfor Iron Law back-linking.
Tell the user: "The production agent guide is at docs/GBRAIN_SKILLPACK.md. It covers the brain-agent loop, entity detection, enrichment, meeting ingestion, and cron schedules. Read it when you're ready to go from 'search works' to 'the brain maintains itself.'"
Run gbrain doctor --json and report the results. Every check should be OK.
If any check fails, the doctor output tells you exactly what's wrong and how to fix it.
If any gbrain command fails, run gbrain doctor --json first. Report the full
output. It checks connection, pgvector, RLS, schema version, and embeddings.
| What You See | Why | Fix |
|---|---|---|
| Connection refused | Supabase project paused, IPv6, or wrong URL | Use Session pooler (port 6543), or supabase.com/dashboard > Restore |
| Password authentication failed | Wrong password | Project Settings > Database > Reset password |
| pgvector not available | Extension not enabled | Run CREATE EXTENSION vector; in SQL Editor |
| OpenAI key invalid | Expired or wrong key | platform.openai.com/api-keys > Create new |
| No pages found | Query before import | Import files into gbrain first |
| RLS not enabled | Security gap | Run gbrain init again (auto-enables RLS) |
If the user's install did NOT include setting up auto-update checks (e.g., they used the manual install path or an older version of the OpenClaw/Hermes paste), offer it:
"Would you like daily GBrain update checks? I'll let you know when there's a new version worth upgrading to — including new skills and schema recommendations. You'll always be asked before anything is installed."
If they agree:
gbrain check-update --jsonIf already configured or user declines, skip.
The brain repo is the source of truth. If sync doesn't run automatically, the vector DB falls behind and gbrain returns stale answers. This phase is not optional.
Read docs/GBRAIN_SKILLPACK.md Section 18 for the full reference. Key points:
Check the connection pooler first. Sync uses transactions on every import.
If DATABASE_URL uses Supabase's Transaction mode pooler, sync will throw
.begin() is not a function and silently skip most pages. Verify the connection
string uses Session mode (port 6543, Session mode) or direct (port 5432).
Set up automatic sync. Choose the approach that fits your environment:
gbrain sync --repo /data/brain && gbrain embed --stalegbrain sync --watch --repo /data/brain under a process
manager. Pair with a cron fallback (watch exits after 5 consecutive failures).Verify sync works. Don't just check that the command ran. Check that it worked:
gbrain stats should show page count close to syncable file count in the repo.gbrain search.Chain sync + embed. Always run both: gbrain sync --repo <path> && gbrain embed --stale. For small syncs, embeddings are generated inline. The embed --stale is a safety net for any stale chunks.
Tell the user: "Live sync is configured. The brain will stay current automatically. I'll verify it's working in the next phase."
Run the full verification runbook to confirm the entire installation is working.
docs/GBRAIN_VERIFY.mdEvery check in the runbook should pass. The most important one is check 4 (live sync actually works): push a change, wait for sync, search for the corrected text. "Sync ran" is not the same as "sync worked."
Tell the user: "I've verified the full GBrain installation. Here's the status of each check: [list results]. Everything is working / [specific item] needs attention."
If already configured or user declines, skip.
Setup is done. The brain works. But it's empty. This is the most important moment — an empty brain is useless. Transition directly to the cold-start skill to fill it with the user's actual data.
Do not end setup without offering cold-start. The user just invested 15+ minutes in setup. The payoff is seeing their brain come alive with their own data. Stopping here is like installing a phone and never adding contacts.
Present this immediately after verification passes:
"✅ GBrain is set up and verified. Now let's fill it with your data.
I can connect your Google services (contacts, calendar, email), import your existing notes, pull in conversations from ChatGPT/Claude, and archive your tweets — all in one session. Each step is optional.
Ready to populate your brain?"
If the user says yes (or anything affirmative):
→ Load and execute references/cold-start/SKILL.md immediately. Do not
just print a reference — actually run the cold-start skill.
If the user says no or wants to stop:
→ Record in ~/.gbrain/cold-start-state.json:
{"deferred": true, "deferred_at": "ISO-timestamp", "phases_completed": []}
→ Tell them: "You can run cold-start anytime by asking me to 'fill my brain' or 'cold start'."
After presenting the recommended directories (Phase C/E) and the user selects which
ones to create, write ~/.gbrain/update-state.json recording:
schema_version_applied: current gbrain versionskillpack_version_applied: current gbrain versionschema_choices.adopted: directories the user createdschema_choices.declined: directories the user explicitly skippedschema_choices.custom: directories the user added that aren't in the recommended schemaThis file enables future upgrades to suggest new schema additions without re-suggesting things the user already declined.
.begin() is not a function errors and silently skips pages. Always use Session mode (port 6543).GBRAIN SETUP COMPLETE
=====================
Engine: [PGLite / Supabase Postgres]
Connection: [verified / pooler mode confirmed]
Pages imported: N
Embeddings: N/N (keyword search active, semantic improving)
Live sync: [configured / method]
Health check: all OK / [specific failures]
Verification: [GBRAIN_VERIFY.md results]
🧠 Ready to populate your brain? I can connect your Google services,
import your notes, and pull in your conversations — all in one session.
→ Launching cold-start...
The output should transition directly into cold-start (Phase J), not end with a bullet list. The bullet list is for when the user defers cold-start.
gbrain init --non-interactive --url ... -- create braingbrain import <dir> --no-embed [--workers N] -- import filesgbrain search <query> -- search braingbrain doctor --json -- health checkgbrain check-update --json -- check for updatesgbrain embed refresh -- generate embeddingsgbrain embed --stale -- backfill missing embeddingsgbrain sync --repo <path> -- one-shot sync from brain repogbrain sync --watch --repo <path> -- continuous sync pollinggbrain config get sync.last_run -- check last sync timestampgbrain stats -- page count + embed coverage