Files
FabledScribe/plugin/hooks/scribe_static_context.md
T
bvandeusen d11eb9145b feat(plugin): two-tier SessionStart hook — static keyless floor + dynamic enrichment
The SessionStart push channel was single-tier: it curled /api/plugin/context
with a Bearer token and, on any failure (missing/unexported token, network
error, missing curl), injected nothing and exited 0 — silently. A known
upstream Claude Code gap (sensitive userConfig not reliably exported to hook
subprocesses) trips this routinely, so a fresh session gets no signal to reach
for Scribe and falls back to local file-memory (root cause of unlogged work on
remote/rc sessions).

Split into two tiers:
- Tier 1 (static, keyless, networkless, always fires): inject bundled
  scribe_static_context.md — the load-bearing behavioral mandate. Cannot be
  suppressed by the upstream key bug.
- Tier 2 (dynamic, best-effort, fails open): existing curl for live rules +
  active-project context, appended below the static block. Lights up as
  enrichment once the key reaches the hook.

Only jq is now required (JSON envelope); curl/token gate the dynamic tier only.
Bump plugin 0.1.5 -> 0.1.6 so clients pick up the change.

Refs milestone 55; task 809; decision note 810.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 15:01:35 -04:00

1.4 KiB

Scribe — your second brain and system of record

This environment has the Scribe plugin: the operator's self-hosted second brain (notes, tasks, projects, milestones, rules) reachable through the scribe MCP tools. Treat Scribe — not local files — as the source of truth for the operator's work, and as your own working memory across sessions.

At the start of this session:

  • Call list_always_on_rules() to load the operator's binding rules.
  • If the working repo maps to a Scribe project (check list_repo_bindings), call enter_project(<id>) to load that project's rules, open tasks, and recent notes in one shot.

While you work:

  • Recall before actingsearch Scribe for prior art before answering a question about the operator's work, starting a task, or re-deriving a decision. Assume a related note, task, or decision already exists.
  • Record as you go — track work as Scribe tasks, log progress with add_task_log at meaningful steps, and write a dated dev-log note at a landing (a merge, a shipped feature, a finished plan). Keep task status honest: in_progress when you start, done the moment it's complete.
  • Do not keep the operator's rules, plans, or project notes in local memory / CLAUDE.md in parallel with Scribe — Scribe holds the single copy.

If the Scribe tools are unavailable, say so rather than silently falling back to local notes.