Files
gstack/setup-gbrain/sections/transcript-gate.md
T

4.0 KiB

After memory sync is wired (Step 7) but before persisting the CLAUDE.md config (Step 8), ask whether this machine's coding-agent session transcripts may go into gbrain. Curated ~/.gstack/ artifacts (learnings, timeline, plans, designs, retros) sync whatever the answer; this question covers transcripts only. Transcripts are ingested only after the user picks recent or all.

Check whether the user already chose. The gate keys on has, because get prints the off default for a key that was never set:

_TIM=$(~/.claude/skills/gstack/bin/gstack-config get transcript_ingest_mode 2>/dev/null || true)
if ~/.claude/skills/gstack/bin/gstack-config has transcript_ingest_mode; then
  case "$(printf '%s' "$_TIM" | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]')" in
    recent|all|off) echo "TRANSCRIPT_MODE: $_TIM" ;;
    *) echo "TRANSCRIPT_MODE: ask (stored value '$_TIM' is from an older version)" ;;
  esac
else
  echo "TRANSCRIPT_MODE: ask (not set)"
fi
  • TRANSCRIPT_MODE: recent, all or off: the user already chose. Do not ask again; continue to Step 8.
  • TRANSCRIPT_MODE: ask: ask once, below. With SESSION_KIND: spawned or headless, do not ask and do not store a value. Consent is never auto-chosen; leave the key unset (transcripts stay skipped) and report that the next interactive /sync-gbrain will ask.

Size the question with two probes. --sources transcript makes the probe count transcripts even though none are consented yet:

bun run ~/.claude/skills/gstack/bin/gstack-memory-ingest.ts --probe --sources transcript
bun run ~/.claude/skills/gstack/bin/gstack-memory-ingest.ts --probe --sources transcript --all-history

Read Total files in window, Total bytes and the estimate from each.

No transcripts found (both probes report 0): ask yes/no instead:

"Ingest coding-agent sessions as they appear?"

Yes stores recent; No stores off.

Otherwise, AskUserQuestion with the counts. Name both session sources and the destination brain from Step 4: the user's Supabase brain (Paths 1, 2a, 2b) or the local PGLite brain on this machine (Path 3).

"Found <N_recent> Claude Code and Codex sessions from the last 90 days (<N_all> in all history, ) across the projects on this machine that your repo policy allows. Ingest them into your <Supabase | local PGLite> brain?

What you get: gstack skills load recent context from your past sessions, so the agent finds your prior work without you describing it, and you can ask 'what was I doing on day X'. Per-session pages are searchable, taggable and deletable. Secret scanning runs before any push.

What stays the same: nothing leaves this machine unless brain sync is enabled (Step 7). Per-repo trust policies still apply. The first full sync can take a while on a large history (estimate: ); skills stay usable while it runs.

Multi-machine note: with brain sync enabled, transcript pages sync across your machines. Deleting a page later removes it from gbrain, but git history keeps it in earlier commits. Use gstack-transcript-prune to delete in bulk, and git filter-repo on the brain remote to remove it from history."

Options:

  • A) Yes, last 90 days (recent)
  • B) Yes, all history (all)
  • E) No, never ingest transcripts (off)

Store the mode value, never the letter:

~/.claude/skills/gstack/bin/gstack-config set transcript_ingest_mode <recent|all|off>

For recent or all, run the first sync now:

bun run ~/.claude/skills/gstack/bin/gstack-gbrain-sync.ts --full --no-brain-sync

(--no-brain-sync because Step 7 already wired that path; this runs the code import and memory ingest stages, and all walks the full history.) For off, run nothing here; other memory still syncs on the next /sync-gbrain.

New transcripts are ingested on the next /sync-gbrain run. Nothing at skill start ingests them.

Reference doc for users: setup-gbrain/memory.md#transcripts.