Native goal development copy
From this repository, start a fresh native Pi session:
bash scripts/goal-dev.sh
Canonical source lives under extensions/. The launcher first runs scripts/sync-dev-extensions.sh, which installs verified ordinary-file copies under .pi/extensions/, then loads only the generated goal extension. Global extensions remain unloaded. The launcher keeps your usual native Pi provider authentication; it copies no credentials. Goal state and new conversation files live under .pi/state/, which is ignored by Git. Each process gets a fresh incarnation; /reload and /new in the same process retain its goal. Restarting Pi does not adopt an earlier process's active goal.
Plain pi also discovers .pi/extensions/goal/index.ts after project trust, but may load global extensions too. Use the launcher to avoid duplicate /goal registrations. This is a local development test, not a sandbox or the managed Mosaic runtime. Docker and ~/.mosaic are unchanged.
Try it
- Set
/goal <a long goal with acceptance criteria>. This starts work immediately. - Look below the editor for
Goal: Active. The old above-editor goal widget is gone. - Run bare
/goal, then pressAlt+G. Both show the entire stored goal and its status. Tab remains autocomplete. - Use
/goal stopand/goal resume. Expect Paused and Active, or Waiting if an untimed wait remains recorded. - A blocked
goal_reportdisplays Blocked. A satisfied report displays Complete and retains the full goal for recall without continuing work. /goal clearremoves the retained goal. TryNO_COLOR=1 bash scripts/goal-dev.shto check text-only labels.
Use terminal scrollback for recall longer than the screen. At narrow widths Pi may truncate its footer status row; bare /goal and Alt+G remain available.
Checks
node --test extensions/goal/test/*.test.ts
bash scripts/test-extension-package.sh
python3 scripts/test-goal-native.py
Contract tests use ordinary read-only fixture copies in test/fixtures/skills-local/, not live brain files. The executive-update fixture SHA-256 matches the parser's pinned contract, bbea48a46b1f8da7bc759f86856fb52830b7dde456b826317163c6dc6ccab319.
SOURCE-SNAPSHOT.json records the original external-source baseline, not the edited candidate. No symlinks are used. Never edit .pi/extensions/; the sync script refuses to overwrite installation drift. Make changes under extensions/, run the checks, and relaunch. To disable the test, stop its Pi process and remove .pi/extensions/. Keep .pi/state/ only if you need local test state.