Skip to content

Commit db9447c

Browse files
garrytanclaude
andauthored
v1.26.3.0 feat: /sync-gbrain skill + native code-surface orchestrator (#1314)
* feat: native gbrain code-surface orchestrator + ensureSourceRegistered helper Replaces gbrain import (markdown only) with gbrain sources add + sync --strategy code (or reindex-code on --full). Adds lib/gbrain-sources.ts exporting ensureSourceRegistered/probeSource/sourcePageCount, plus lock file + tmp-rename atomicity + dry-run write skip in the orchestrator. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat: setup-gbrain Step 8 writes ## GBrain Search Guidance after smoke test Extends Step 8 to write a machine-agnostic guidance block that teaches the agent when to prefer gbrain CLI (search/query/code-def/code-refs/ code-callers/code-callees) over Grep. Gated on smoke test pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat: /sync-gbrain skill — keep gbrain current and refresh agent guidance New top-level skill that wraps gstack-gbrain-sync with state probing, capability check (write+search round-trip, not gbrain doctor), CLAUDE.md guidance lifecycle (write iff healthy, remove iff broken), and a per-source verdict block. Re-runnable, idempotent. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat: preamble emits gbrain-availability block when capability ok Extends generate-brain-sync-block.ts to emit Variant A (steady-state, 4 lines) when cwd page_count > 0 or Variant B (empty-corpus emergency, 3 lines) when 0; empty string otherwise. Reads cached page_count from .gbrain-sync-state.json (handles pretty + compact JSON). Refreshes ship golden fixtures and bumps the plan-review preamble byte budget to 35K to absorb the new block. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: register /sync-gbrain in AGENTS.md and docs/skills.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: regenerate SKILL.md across all hosts (gen:skill-docs) Mechanical regeneration after preamble + setup-gbrain template + new sync-gbrain skill. Run via: bun run gen:skill-docs --host all. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: bump version and changelog (v1.26.3.0) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: add /sync-gbrain to README skills table and gbrain section Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 30fe6bb commit db9447c

59 files changed

Lines changed: 3408 additions & 75 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ Invoke them by name (e.g., `/office-hours`).
6363
| `/benchmark-models` | Cross-model benchmark for skills (Claude, GPT, Gemini side-by-side). |
6464
| `/cso` | OWASP Top 10 + STRIDE security audit. |
6565
| `/setup-gbrain` | Set up gbrain for cross-machine session memory sync. |
66+
| `/sync-gbrain` | Keep gbrain current with this repo's code; refresh agent search guidance in CLAUDE.md. |
6667

6768
### Browser + agent integration
6869

CHANGELOG.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,47 @@
11
# Changelog
22

3+
## [1.26.3.0] - 2026-05-03
4+
5+
## **`/sync-gbrain` keeps your brain current and teaches the agent when to use it.**
6+
7+
Two functional gaps closed in one ship: the cwd repo wasn't actually being indexed by gbrain (the orchestrator called `gbrain import` which only handles markdown directories, not code), and the coding agent had no idea gbrain existed in any session that didn't explicitly opt in. Both fixed by switching to gbrain v0.20.0+'s native code surfaces and adding a CLAUDE.md guidance block that's gated on a working capability check.
8+
9+
### What you can now do
10+
11+
- **Run `/sync-gbrain` to refresh gbrain against this repo's code.** Default is `--incremental` (mtime fast-path, ~50ms). `--full` runs `gbrain reindex-code` for a full re-index. `--dry-run` previews what would sync without writing anywhere. `--code-only`, `--no-memory`, `--no-brain-sync`, `--quiet` all work.
12+
- **Use `gbrain code-def`/`code-refs`/`code-callers`/`code-callees` against your repo.** /sync-gbrain registers the cwd as a federated source via `gbrain sources add` (idempotent — id is `gstack-code-<repo_slug>`), then runs `gbrain sync --strategy code`. The native code surfaces just work afterward.
13+
- **Get gbrain hints in every gstack skill preamble.** When gbrain is configured AND the cwd source has page_count > 0, every skill start emits a 4-line "prefer `gbrain search`/`code-def`/`code-refs` over Grep" hint. When configured but the corpus is empty, you get a 3-line emergency hint nudging you to run `/sync-gbrain --full`. When gbrain isn't configured, the hint resolves to empty string — zero context tax for non-gbrain users.
14+
- **Find the long-form guidance in CLAUDE.md.** `/sync-gbrain` (and `/setup-gbrain` Step 8) write a `## GBrain Search Guidance` block delimited by HTML comments, with concrete CLI commands for semantic search, symbol-aware code lookup, and curated-memory queries. The block is removed automatically when the capability check fails, so a Mac with synced repo CLAUDE.md but no local gbrain doesn't end up telling the agent to use tools that don't exist.
15+
16+
### What gets safer
17+
18+
- **Concurrent /sync-gbrain runs from two terminals don't corrupt CLAUDE.md or `.gbrain-sync-state.json`.** Lock file at `~/.gstack/.sync-gbrain.lock` with PID + timestamp. Stale-lock takeover after 5 min. Both files written via tmp+atomic-rename. SIGINT/SIGTERM trap releases the lock.
19+
- **`--dry-run` actually doesn't write anywhere.** Previously the orchestrator skipped only the `gbrain import` call; now it skips `sources add`, `sync --strategy code`, the state file, AND the CLAUDE.md guidance block. Print "would: ..." lines for every action.
20+
- **The capability check is narrower than `gbrain doctor`.** Doctor exits "unhealthy" for unrelated reasons (`resolver_health` warnings, `minions_migration` partial-installs) on otherwise-functional brains. /sync-gbrain uses a write+search round-trip (`gbrain put $SLUG | gbrain search ping | grep $SLUG`) which actually tests what we care about: can the agent search.
21+
22+
### Itemized changes
23+
24+
#### Added
25+
- New `lib/gbrain-sources.ts``ensureSourceRegistered(id, path, options)` + `probeSource(id, env)` + `sourcePageCount(id, env)` helpers. Production callers leave `env` unset (inherit `process.env`); tests pass a custom env to point at a fake `gbrain` on PATH.
26+
- New `sync-gbrain/SKILL.md.tmpl` — top-level skill, ~250 lines.
27+
- New `test/gbrain-sources.test.ts` — 9 unit tests with a fake gbrain shell script on PATH (jq-driven state file, no real DB needed).
28+
- Lock-file primitives (`acquireLock` / `releaseLock`) in the orchestrator.
29+
- New code-stage detail schema in `.gbrain-sync-state.json`: `last_stages.code.detail = {source_id, source_path, page_count, last_imported, status}`.
30+
31+
#### Changed
32+
- `bin/gstack-gbrain-sync.ts` `runCodeImport` rewritten to use `gbrain sources add` + `gbrain sync --strategy code` (incremental) or `gbrain reindex-code --yes` (`--full`) instead of `gbrain import`. State file written via tmp+rename for atomicity.
33+
- `setup-gbrain/SKILL.md.tmpl` Step 8 now writes both `## GBrain Configuration` AND `## GBrain Search Guidance` blocks, gated on Step 9 smoke test pass.
34+
- `scripts/resolvers/preamble/generate-brain-sync-block.ts` emits Variant A (4 lines, healthy) / Variant B (3 lines, empty corpus) / empty string (gbrain not configured). Reads cached cwd page_count from the state file (handles pretty + compact JSON via `tr -d '\n'` flatten).
35+
- `test/gen-skill-docs.test.ts` plan-review preamble byte budget bumped 33000 → 35000 to absorb the new context-load block.
36+
- `test/gstack-gbrain-sync.test.ts` updated for native code surfaces (12 tests, was 8) — adds source-id derivation, dry-run no-lock, stale-lock takeover, fresh-lock blocking.
37+
- `test/skill-e2e-memory-pipeline.test.ts` updated to assert `would: gbrain sources add` instead of `would: gbrain import`.
38+
- Ship golden fixtures (`test/fixtures/golden/{claude,codex,factory}-ship-SKILL.md`) refreshed.
39+
40+
#### For contributors
41+
- The 4-digit `MAJOR.MINOR.PATCH.MICRO` version in `package.json` and `VERSION` is the source of truth.
42+
- Run `bun run gen:skill-docs --host all` after editing any `.tmpl` to regenerate per-host SKILL.md files; commit both.
43+
- gbrain v0.25.1 already ships `gbrain sync --watch [--interval N]` and `gbrain sync --install-cron` natively. The previously-deferred V1.5 P0 daemon can wire through to those rather than building a gstack-side watcher.
44+
345
## [1.26.2.0] - 2026-05-03
446

547
## **`/plan-eng-review` always asks. Never silently writes findings to your plan first.**

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ Each skill feeds into the next. `/office-hours` writes a design doc that `/plan-
226226
| `/open-gstack-browser` | **GStack Browser** — launch GStack Browser with sidebar, anti-bot stealth, auto model routing (Sonnet for actions, Opus for analysis), one-click cookie import, and Claude Code integration. Clean up pages, take smart screenshots, edit CSS, and pass info back to your terminal. |
227227
| `/setup-deploy` | **Deploy Configurator** — one-time setup for `/land-and-deploy`. Detects your platform, production URL, and deploy commands. |
228228
| `/setup-gbrain` | **GBrain Onboarding** — from zero to running gbrain in under 5 minutes. PGLite local, Supabase existing URL, or auto-provision a new Supabase project via Management API. MCP registration for Claude Code + per-repo trust triad (read-write/read-only/deny). [Full guide](USING_GBRAIN_WITH_GSTACK.md). |
229+
| `/sync-gbrain` | **Keep Brain Current** — re-index this repo's code into gbrain via `gbrain sources add` + `gbrain sync --strategy code`, refresh the `## GBrain Search Guidance` block in CLAUDE.md, and auto-remove guidance when the capability check fails. `--incremental` (default), `--full`, `--dry-run`. Idempotent; safe to re-run. |
229230
| `/gstack-upgrade` | **Self-Updater** — upgrade gstack to latest. Detects global vs vendored install, syncs both, shows what changed. |
230231

231232
### New binaries (v0.19)
@@ -385,6 +386,8 @@ Three paths, pick one:
385386

386387
After init, the skill offers to register gbrain as an MCP server for Claude Code (`claude mcp add gbrain -- gbrain serve`) so `gbrain search`, `gbrain put_page`, etc. show up as first-class typed tools — not bash shell-outs.
387388

389+
**Keeping the brain current.** Run `/sync-gbrain` from any repo to re-index its code into gbrain (incremental by default, `--full` for a full reindex, `--dry-run` to preview). The skill registers the cwd as a federated source via `gbrain sources add`, runs `gbrain sync --strategy code`, and writes a `## GBrain Search Guidance` block to your project's CLAUDE.md so the agent prefers `gbrain search`/`code-def`/`code-refs` over Grep. The block is removed automatically if the capability check fails — no stale guidance pointing at tools that aren't installed.
390+
388391
**Per-remote trust policy.** Each repo on your machine gets one of three tiers:
389392

390393
- `read-write` — agent can search the brain AND write new pages back from this repo
@@ -454,7 +457,7 @@ Use /browse from gstack for all web browsing. Never use mcp__claude-in-chrome__*
454457
Available skills: /office-hours, /plan-ceo-review, /plan-eng-review, /plan-design-review,
455458
/design-consultation, /design-shotgun, /design-html, /review, /ship, /land-and-deploy,
456459
/canary, /benchmark, /browse, /open-gstack-browser, /qa, /qa-only, /design-review,
457-
/setup-browser-cookies, /setup-deploy, /setup-gbrain, /retro, /investigate, /document-release,
460+
/setup-browser-cookies, /setup-deploy, /setup-gbrain, /sync-gbrain, /retro, /investigate, /document-release,
458461
/codex, /cso, /autoplan, /pair-agent, /careful, /freeze, /guard, /unfreeze, /gstack-upgrade, /learn.
459462
```
460463

SKILL.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,35 @@ _BRAIN_REMOTE_FILE="$HOME/.gstack-brain-remote.txt"
278278
_BRAIN_SYNC_BIN="~/.claude/skills/gstack/bin/gstack-brain-sync"
279279
_BRAIN_CONFIG_BIN="~/.claude/skills/gstack/bin/gstack-config"
280280

281+
# /sync-gbrain context-load: teach the agent to use gbrain when it's available.
282+
# Mutually exclusive variants per /plan-eng-review §4. Empty string when gbrain
283+
# is not configured (zero context cost for non-gbrain users).
284+
_GBRAIN_CONFIG="$HOME/.gbrain/config.json"
285+
if [ -f "$_GBRAIN_CONFIG" ] && command -v gbrain >/dev/null 2>&1; then
286+
_GBRAIN_VERSION_OK=$(gbrain --version 2>/dev/null | grep -c '^gbrain ' || echo 0)
287+
if [ "$_GBRAIN_VERSION_OK" -gt 0 ] 2>/dev/null; then
288+
_SYNC_STATE="$_GSTACK_HOME/.gbrain-sync-state.json"
289+
_CWD_PAGES=0
290+
if [ -f "$_SYNC_STATE" ]; then
291+
# Flatten newlines so the regex works against pretty-printed JSON too.
292+
_CWD_PAGES=$(tr -d '\n' < "$_SYNC_STATE" 2>/dev/null \
293+
| grep -o '"name": *"code"[^}]*"detail": *{[^}]*"page_count": *[0-9]*' \
294+
| grep -o '"page_count": *[0-9]*' | grep -o '[0-9]\+' | head -1)
295+
_CWD_PAGES=${_CWD_PAGES:-0}
296+
fi
297+
if [ "$_CWD_PAGES" -gt 0 ] 2>/dev/null; then
298+
echo "GBrain configured. Prefer \`gbrain search\`/\`gbrain query\` over Grep for"
299+
echo "semantic questions; use \`gbrain code-def\`/\`code-refs\`/\`code-callers\` for"
300+
echo "symbol-aware code lookup. See \"## GBrain Search Guidance\" in CLAUDE.md."
301+
echo "Run /sync-gbrain to refresh."
302+
else
303+
echo "GBrain configured but this repo isn't indexed yet. Run \`/sync-gbrain --full\`"
304+
echo "before relying on \`gbrain search\` for code questions in this repo."
305+
echo "Falls back to Grep until indexed."
306+
fi
307+
fi
308+
fi
309+
281310
_BRAIN_SYNC_MODE=$("$_BRAIN_CONFIG_BIN" get gbrain_sync_mode 2>/dev/null || echo off)
282311

283312
if [ -f "$_BRAIN_REMOTE_FILE" ] && [ ! -d "$_GSTACK_HOME/.git" ] && [ "$_BRAIN_SYNC_MODE" = "off" ]; then

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.26.2.0
1+
1.26.3.0

autoplan/SKILL.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,35 @@ _BRAIN_REMOTE_FILE="$HOME/.gstack-brain-remote.txt"
346346
_BRAIN_SYNC_BIN="~/.claude/skills/gstack/bin/gstack-brain-sync"
347347
_BRAIN_CONFIG_BIN="~/.claude/skills/gstack/bin/gstack-config"
348348

349+
# /sync-gbrain context-load: teach the agent to use gbrain when it's available.
350+
# Mutually exclusive variants per /plan-eng-review §4. Empty string when gbrain
351+
# is not configured (zero context cost for non-gbrain users).
352+
_GBRAIN_CONFIG="$HOME/.gbrain/config.json"
353+
if [ -f "$_GBRAIN_CONFIG" ] && command -v gbrain >/dev/null 2>&1; then
354+
_GBRAIN_VERSION_OK=$(gbrain --version 2>/dev/null | grep -c '^gbrain ' || echo 0)
355+
if [ "$_GBRAIN_VERSION_OK" -gt 0 ] 2>/dev/null; then
356+
_SYNC_STATE="$_GSTACK_HOME/.gbrain-sync-state.json"
357+
_CWD_PAGES=0
358+
if [ -f "$_SYNC_STATE" ]; then
359+
# Flatten newlines so the regex works against pretty-printed JSON too.
360+
_CWD_PAGES=$(tr -d '\n' < "$_SYNC_STATE" 2>/dev/null \
361+
| grep -o '"name": *"code"[^}]*"detail": *{[^}]*"page_count": *[0-9]*' \
362+
| grep -o '"page_count": *[0-9]*' | grep -o '[0-9]\+' | head -1)
363+
_CWD_PAGES=${_CWD_PAGES:-0}
364+
fi
365+
if [ "$_CWD_PAGES" -gt 0 ] 2>/dev/null; then
366+
echo "GBrain configured. Prefer \`gbrain search\`/\`gbrain query\` over Grep for"
367+
echo "semantic questions; use \`gbrain code-def\`/\`code-refs\`/\`code-callers\` for"
368+
echo "symbol-aware code lookup. See \"## GBrain Search Guidance\" in CLAUDE.md."
369+
echo "Run /sync-gbrain to refresh."
370+
else
371+
echo "GBrain configured but this repo isn't indexed yet. Run \`/sync-gbrain --full\`"
372+
echo "before relying on \`gbrain search\` for code questions in this repo."
373+
echo "Falls back to Grep until indexed."
374+
fi
375+
fi
376+
fi
377+
349378
_BRAIN_SYNC_MODE=$("$_BRAIN_CONFIG_BIN" get gbrain_sync_mode 2>/dev/null || echo off)
350379

351380
if [ -f "$_BRAIN_REMOTE_FILE" ] && [ ! -d "$_GSTACK_HOME/.git" ] && [ "$_BRAIN_SYNC_MODE" = "off" ]; then

benchmark-models/SKILL.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,35 @@ _BRAIN_REMOTE_FILE="$HOME/.gstack-brain-remote.txt"
280280
_BRAIN_SYNC_BIN="~/.claude/skills/gstack/bin/gstack-brain-sync"
281281
_BRAIN_CONFIG_BIN="~/.claude/skills/gstack/bin/gstack-config"
282282

283+
# /sync-gbrain context-load: teach the agent to use gbrain when it's available.
284+
# Mutually exclusive variants per /plan-eng-review §4. Empty string when gbrain
285+
# is not configured (zero context cost for non-gbrain users).
286+
_GBRAIN_CONFIG="$HOME/.gbrain/config.json"
287+
if [ -f "$_GBRAIN_CONFIG" ] && command -v gbrain >/dev/null 2>&1; then
288+
_GBRAIN_VERSION_OK=$(gbrain --version 2>/dev/null | grep -c '^gbrain ' || echo 0)
289+
if [ "$_GBRAIN_VERSION_OK" -gt 0 ] 2>/dev/null; then
290+
_SYNC_STATE="$_GSTACK_HOME/.gbrain-sync-state.json"
291+
_CWD_PAGES=0
292+
if [ -f "$_SYNC_STATE" ]; then
293+
# Flatten newlines so the regex works against pretty-printed JSON too.
294+
_CWD_PAGES=$(tr -d '\n' < "$_SYNC_STATE" 2>/dev/null \
295+
| grep -o '"name": *"code"[^}]*"detail": *{[^}]*"page_count": *[0-9]*' \
296+
| grep -o '"page_count": *[0-9]*' | grep -o '[0-9]\+' | head -1)
297+
_CWD_PAGES=${_CWD_PAGES:-0}
298+
fi
299+
if [ "$_CWD_PAGES" -gt 0 ] 2>/dev/null; then
300+
echo "GBrain configured. Prefer \`gbrain search\`/\`gbrain query\` over Grep for"
301+
echo "semantic questions; use \`gbrain code-def\`/\`code-refs\`/\`code-callers\` for"
302+
echo "symbol-aware code lookup. See \"## GBrain Search Guidance\" in CLAUDE.md."
303+
echo "Run /sync-gbrain to refresh."
304+
else
305+
echo "GBrain configured but this repo isn't indexed yet. Run \`/sync-gbrain --full\`"
306+
echo "before relying on \`gbrain search\` for code questions in this repo."
307+
echo "Falls back to Grep until indexed."
308+
fi
309+
fi
310+
fi
311+
283312
_BRAIN_SYNC_MODE=$("$_BRAIN_CONFIG_BIN" get gbrain_sync_mode 2>/dev/null || echo off)
284313

285314
if [ -f "$_BRAIN_REMOTE_FILE" ] && [ ! -d "$_GSTACK_HOME/.git" ] && [ "$_BRAIN_SYNC_MODE" = "off" ]; then

benchmark/SKILL.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,35 @@ _BRAIN_REMOTE_FILE="$HOME/.gstack-brain-remote.txt"
280280
_BRAIN_SYNC_BIN="~/.claude/skills/gstack/bin/gstack-brain-sync"
281281
_BRAIN_CONFIG_BIN="~/.claude/skills/gstack/bin/gstack-config"
282282

283+
# /sync-gbrain context-load: teach the agent to use gbrain when it's available.
284+
# Mutually exclusive variants per /plan-eng-review §4. Empty string when gbrain
285+
# is not configured (zero context cost for non-gbrain users).
286+
_GBRAIN_CONFIG="$HOME/.gbrain/config.json"
287+
if [ -f "$_GBRAIN_CONFIG" ] && command -v gbrain >/dev/null 2>&1; then
288+
_GBRAIN_VERSION_OK=$(gbrain --version 2>/dev/null | grep -c '^gbrain ' || echo 0)
289+
if [ "$_GBRAIN_VERSION_OK" -gt 0 ] 2>/dev/null; then
290+
_SYNC_STATE="$_GSTACK_HOME/.gbrain-sync-state.json"
291+
_CWD_PAGES=0
292+
if [ -f "$_SYNC_STATE" ]; then
293+
# Flatten newlines so the regex works against pretty-printed JSON too.
294+
_CWD_PAGES=$(tr -d '\n' < "$_SYNC_STATE" 2>/dev/null \
295+
| grep -o '"name": *"code"[^}]*"detail": *{[^}]*"page_count": *[0-9]*' \
296+
| grep -o '"page_count": *[0-9]*' | grep -o '[0-9]\+' | head -1)
297+
_CWD_PAGES=${_CWD_PAGES:-0}
298+
fi
299+
if [ "$_CWD_PAGES" -gt 0 ] 2>/dev/null; then
300+
echo "GBrain configured. Prefer \`gbrain search\`/\`gbrain query\` over Grep for"
301+
echo "semantic questions; use \`gbrain code-def\`/\`code-refs\`/\`code-callers\` for"
302+
echo "symbol-aware code lookup. See \"## GBrain Search Guidance\" in CLAUDE.md."
303+
echo "Run /sync-gbrain to refresh."
304+
else
305+
echo "GBrain configured but this repo isn't indexed yet. Run \`/sync-gbrain --full\`"
306+
echo "before relying on \`gbrain search\` for code questions in this repo."
307+
echo "Falls back to Grep until indexed."
308+
fi
309+
fi
310+
fi
311+
283312
_BRAIN_SYNC_MODE=$("$_BRAIN_CONFIG_BIN" get gbrain_sync_mode 2>/dev/null || echo off)
284313

285314
if [ -f "$_BRAIN_REMOTE_FILE" ] && [ ! -d "$_GSTACK_HOME/.git" ] && [ "$_BRAIN_SYNC_MODE" = "off" ]; then

0 commit comments

Comments
 (0)