Files
stack/.pi

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

  1. Set /goal <a long goal with acceptance criteria>. This starts work immediately.
  2. Look below the editor for Goal: Active. The old above-editor goal widget is gone.
  3. Run bare /goal, then press Alt+G. Both show the entire stored goal and its status. Tab remains autocomplete.
  4. Use /goal stop and /goal resume. Expect Paused and Active, or Waiting if an untimed wait remains recorded.
  5. A blocked goal_report displays Blocked. A satisfied report displays Complete and retains the full goal for recall without continuing work.
  6. /goal clear removes the retained goal. Try NO_COLOR=1 bash scripts/goal-dev.sh to 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.