Skip to content

Commit cb9ccf2

Browse files
garrytanxingzihaicapy-ai[bot]
authored
v1.91.158.0 feat(config): plan_mode_preamble=off drops the plan-mode preamble from installed skills (port of #3213) (#3308)
* feat(gen-skill-docs): add --plan-mode=off to omit the plan-mode preamble (#3168) Generated skills ship a ~1.8 KB "## Plan Mode Safe Operations" + "## Skill Invocation During Plan Mode" block on every skill, for hosts and users who never enter plan mode. This adds a --plan-mode=off flag to gen-skill-docs that drops that block at gen time. Default builds (planMode undefined or true) keep the block byte-identically. The "PLAN MODE EXCEPTION — ALWAYS RUN" markers inside skill bodies still apply when the flag is off. (cherry picked from commit 51edee9) * style(types): fix stray indentation on TemplateContext.installRoot Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * feat(config): plan_mode_preamble key wires --plan-mode=off into setup and every installed render gstack-config plan_mode_preamble (on|off, default on) makes ./setup pass --plan-mode=off to every gen:skill-docs render, gbrain-refresh and the gstack-relink router render. The default Claude install, which otherwise serves the committed SKILL.md files, gets a plain render with the key off; the activation record notes plan_mode=off so switching back on removes the render, including on the gbrain=unknown keep branch. With the key on or unset every path and record is byte-for-byte unchanged. Fixes #3168. Finishes #3213 by @xingzihai. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * fix(setup,relink): plan_mode_preamble=off survives builds and failed renders; alias follows the router Review findings on the plan_mode_preamble wiring: - a build renders env hosts without --plan-mode=off, so with the key off setup no longer skips their re-render after a build; - with the key off the gbrain-absent branch leaves the render to the plain re-render, so a failed render keeps the previous one; - gstack-relink refreshes the _gstack-command alias after re-rendering the router (also fixes the same staleness for disabled_skills). Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: xingzihai <xingzihai@users.noreply.github.com> Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
1 parent 6237994 commit cb9ccf2

17 files changed

Lines changed: 644 additions & 44 deletions

‎CHANGELOG.md‎

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

3+
## [1.91.158.0] - 2026-10-19
4+
5+
**`gstack-config set plan_mode_preamble off` leaves the plan-mode preamble out of every installed skill, for people who never use plan mode.** The "Plan Mode Safe Operations" and "Skill Invocation During Plan Mode" sections add about 1.6 KB to each of 50 Claude skills. With the key off, the next `./setup` renders every host's skills with `gen-skill-docs --plan-mode=off`, and the default Claude install serves that render instead of the committed files. The default is on, and with it on every render and the committed SKILL.md files are byte-for-byte unchanged.
6+
7+
### Added
8+
- **`gen-skill-docs --plan-mode=off`** drops the two sections at generation time. Commands marked "PLAN MODE EXCEPTION — ALWAYS RUN" keep their marker. Hosts whose capabilities declare no plan mode already render the sections empty, so in practice the flag matters for Claude, Copilot and OpenCode. Fixes #3168. From #3213 by @xingzihai, finished with the config wiring.
9+
- **The `plan_mode_preamble` config key** (`on` | `off`, default `on`). It is a closed domain like `explain_level`: an unknown value warns and stores `on`. Setting it outside `./setup` says it applies on the next setup run and prints the `./setup --refresh-registered` command that applies it now.
10+
- **Every installed render carries the choice:** all 16 `gen:skill-docs` call sites in `setup`, the Claude render helper, `gstack-config gbrain-refresh`, and the router that `gstack-relink` re-renders in place (as it already does for `disabled_skills`). When setup has to build, `scripts/build.sh` renders Factory, OpenCode, Cursor, Copilot and Antigravity without the flag, so with the key off setup renders those hosts again afterwards.
11+
- **The default Claude install gets a render when the key is off.** Without a working gbrain (absent, or the detector failed), `gstack_claude_render_action` returns `plain` instead of serving the committed files; with gbrain the brain-aware render already runs and now carries the flag too. The activation record (`~/.gstack/render/claude.overlay`) gains `plan_mode=off`. Turning the key back on removes that render on the next setup when gbrain is absent or its detector fails (a failed detector otherwise keeps a render), and re-renders the brain-aware render with the sections when gbrain is present. A failed render with the key off keeps the previous render. Records written with the key on are unchanged.
12+
13+
### Fixed
14+
- **`gstack-relink` refreshes the `_gstack-command` router alias after it re-renders the router.** It used to copy the router before the re-render, so the alias kept the previous router (with `disabled_skills`, the full skill list) until the next relink.
15+
16+
### Changed
17+
- **Gate integrity:** new tests `test/plan-mode-off-build.test.ts` (from #3213, unchanged), `test/plan-mode-off-generation.test.ts`, `test/plan-mode-preamble-config.test.ts`, `test/plan-mode-preamble-render.test.ts` and `test/plan-mode-preamble-setup.test.ts`. No existing test was edited, and no threshold, trial count, case kind or judge changed.
18+
319
## [1.91.157.0] - 2026-10-19
420

521
**Claude SKILL.md files no longer carry a "When to invoke" body section, which saves about 20 KB across 56 skills.** Claude Code reads a skill's body only after the skill is invoked, so routing prose there never routed anything. Routing still comes from the catalog description and the CLAUDE.md routing block, and voice triggers move into the root router's routing block. From #3129 by @thanhnguyentung95.

‎README.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,8 @@ types into that element; bare `browse type <text>` types into whatever has focus
797797

798798
**Don't use some skills?** `gstack-config set disabled_skills make-pdf,pair-agent` stops registering them on every host, so their descriptions stop loading into each session. Claude Code updates right away; other hosts on their next `./setup --host <name>` or `/gstack-upgrade`. Their files stay installed, so a skill that calls a disabled one still works (you get a warning). Typos are rejected with the closest skill name, `gstack-upgrade` can't be disabled, and `gstack-config set disabled_skills ""` re-enables everything.
799799

800+
**Never use plan mode?** `gstack-config set plan_mode_preamble off` leaves the "Plan Mode Safe Operations" and "Skill Invocation During Plan Mode" sections (about 1.6 KB per skill) out of every installed skill on the next `./setup` run; the command prints the exact `./setup --refresh-registered` line that applies it. Claude Code then serves a render under `~/.gstack/render/claude` instead of the committed files. Commands marked "PLAN MODE EXCEPTION — ALWAYS RUN" keep their marker. `gstack-config set plan_mode_preamble on` (the default) and another `./setup` bring the sections back. It matters for Claude Code, Copilot and OpenCode: hosts without plan mode (Codex and others) never carry these sections.
801+
800802
**Want namespaced commands?** `cd ~/.claude/skills/gstack && ./setup --prefix` — switches from `/qa` to `/gstack-qa`. Useful if you run other skill packs alongside gstack.
801803

802804
**Codex says "Skipped loading skill(s) due to invalid SKILL.md"?** Your Codex skill descriptions are stale. `${CODEX_HOME:-~/.codex}/skills/gstack` is a runtime directory, not the checkout: `./setup --status` shows the Codex row's source checkout. Fix: `cd <that source> && git pull && ./setup --host codex` — for a repo-local install, run it from inside the project.

‎VERSION‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.91.157.0
1+
1.91.158.0

‎agents-digest/gstack-AGENTS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# gstack digest v1.91.157.0 — regenerate/re-copy after upgrading gstack
1+
# gstack digest v1.91.158.0 — regenerate/re-copy after upgrading gstack
22

33
Behavioral rules from gstack (https://github.com/garrytan/gstack), compressed
44
for agent hosts without a full skill install. The full skills add workflows,

‎bin/gstack-config‎

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,13 @@ CONFIG_HEADER='# gstack configuration — edit freely, changes take effect on ne
9494
# # (for power users who know the terms)
9595
# # Unknown values default to "default" with a warning.
9696
# # See docs/designs/PLAN_TUNING_V1.md for rationale.
97+
# plan_mode_preamble: on # on = every skill carries the plan-mode preamble
98+
# # off = rendered skills omit the "Plan Mode Safe
99+
# # Operations" and "Skill Invocation During
100+
# # Plan Mode" sections (~1.8 KB each), for
101+
# # users who never enter plan mode
102+
# # Applies on the next ./setup run. Unknown values
103+
# # default to "on" with a warning.
97104
#
98105
# ─── Artifacts sync (renamed from gbrain_sync_mode in v1.27.0.0) ─────
99106
# artifacts_sync_mode: off # off | artifacts-only | full
@@ -279,6 +286,7 @@ lookup_default() {
279286
update_check) echo "true" ;;
280287
skill_prefix) echo "false" ;;
281288
explain_level) echo "default" ;;
289+
plan_mode_preamble) echo "on" ;; # on | off — off drops the plan-mode preamble on the next ./setup (#3168)
282290
codex_reviews) echo "enabled" ;;
283291
design_detector) echo "auto" ;; # auto | off — impeccable engine pre-pass in the design skills
284292
design_detector_install_prompted) echo "false" ;; # true once the user answered the one-time engine install offer with "never ask again"
@@ -734,6 +742,10 @@ $_gstack_legacy_root"
734742
echo "Warning: explain_level '$VALUE' not recognized. Valid values: default, terse. Using default." >&2
735743
VALUE="default"
736744
fi
745+
if [ "$KEY" = "plan_mode_preamble" ] && [ "$VALUE" != "on" ] && [ "$VALUE" != "off" ]; then
746+
echo "Warning: plan_mode_preamble '$VALUE' not recognized. Valid values: on, off. Using on." >&2
747+
VALUE="on"
748+
fi
737749
if [ "$KEY" = "artifacts_sync_mode" ] && [ "$VALUE" != "off" ] && [ "$VALUE" != "artifacts-only" ] && [ "$VALUE" != "full" ]; then
738750
echo "Warning: artifacts_sync_mode '$VALUE' not recognized. Valid values: off, artifacts-only, full. Using off." >&2
739751
VALUE="off"
@@ -985,6 +997,11 @@ $_gstack_legacy_root"
985997
gstack_install_registry_rows | awk -F '\t' '$1 != "claude" { print " apply to " $1 " (" $4 "): cd " $6 " && ./setup --host " $1 }' )
986998
fi
987999
fi
1000+
# Installed skills are rendered by ./setup, so the preamble choice lands
1001+
# on its next run (every registered host).
1002+
if [ "$KEY" = "plan_mode_preamble" ] && [ -z "${GSTACK_SETUP_RUNNING:-}" ]; then
1003+
printf 'gstack-config: plan_mode_preamble=%s applies on the next ./setup run. Apply now: cd %q && ./setup --refresh-registered\n' "$VALUE" "$(cd "$(dirname "$0")/.." && pwd)"
1004+
fi
9881005
;;
9891006
unset)
9901007
KEY="${2:?Usage: gstack-config unset <key>}"
@@ -1009,7 +1026,7 @@ $_gstack_legacy_root"
10091026
echo "# ─── Active values (including defaults for unset keys) ───"
10101027
report_root_disagreement
10111028
for KEY in proactive routing_declined telemetry auto_upgrade update_check \
1012-
skill_prefix explain_level \
1029+
skill_prefix explain_level plan_mode_preamble \
10131030
codex_reviews gstack_contributor skip_eng_review workspace_root \
10141031
artifacts_sync_mode artifacts_sync_mode_prompted artifacts_sync_removals plan_tune_hooks \
10151032
timeline_stop_hook design_detector design_detector_install_prompted memorable_recall \
@@ -1034,7 +1051,7 @@ $_gstack_legacy_root"
10341051
defaults)
10351052
echo "# gstack-config defaults"
10361053
for KEY in proactive routing_declined telemetry auto_upgrade update_check \
1037-
skill_prefix explain_level \
1054+
skill_prefix explain_level plan_mode_preamble \
10381055
codex_reviews gstack_contributor skip_eng_review workspace_root \
10391056
artifacts_sync_mode artifacts_sync_mode_prompted artifacts_sync_removals plan_tune_hooks \
10401057
timeline_stop_hook design_detector design_detector_install_prompted memorable_recall \
@@ -1065,6 +1082,8 @@ $_gstack_legacy_root"
10651082
# generated SKILL.md files match your installation state.
10661083
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
10671084
. "$SCRIPT_DIR/gstack-render-claude.sh" 2>/dev/null || { echo "$0: $SCRIPT_DIR/gstack-render-claude.sh is missing. fix: reinstall with ./setup or /gstack-upgrade" >&2; exit 1; }
1085+
_PLAN_MODE_ARG=""
1086+
[ "$("$0" get plan_mode_preamble 2>/dev/null || true)" != off ] || _PLAN_MODE_ARG="--plan-mode=off"
10681087
DETECT_BIN="$SCRIPT_DIR/gstack-gbrain-detect"
10691088
DETECTION_FILE="$STATE_DIR/gbrain-detection.json"
10701089
mkdir -p "$STATE_DIR"
@@ -1133,7 +1152,7 @@ $_gstack_legacy_root"
11331152
gstack_claude_overlay "$INSTALL_DIR" "$0"
11341153
RENDER_TMP="$RENDER_DIR.tmp.$$"
11351154
rm -rf "$RENDER_TMP"
1136-
if ( cd "$INSTALL_DIR" && bun run gen:skill-docs:user --host claude --out-dir "$RENDER_TMP" --link-root "$RENDER_DIR" --model "$_GSTACK_OVERLAY" >/dev/null 2>&1 ); then
1155+
if ( cd "$INSTALL_DIR" && bun run gen:skill-docs:user --host claude --out-dir "$RENDER_TMP" --link-root "$RENDER_DIR" --model "$_GSTACK_OVERLAY" ${_PLAN_MODE_ARG:+"$_PLAN_MODE_ARG"} >/dev/null 2>&1 ); then
11371156
gstack_render_lock "$RENDER_DIR"
11381157
_swap_in_render "$RENDER_DIR" "$RENDER_TMP"
11391158
gstack_render_unlock "$RENDER_DIR"
@@ -1159,7 +1178,7 @@ $_gstack_legacy_root"
11591178
# brain blocks, so removing gbrain keeps the chosen overlay.
11601179
INSTALL_DIR="$HOME/.claude/skills/gstack"
11611180
RENDER_DIR="${GSTACK_USER_RENDER_DIR:-$STATE_DIR/render/claude}"
1162-
if { [ -d "$RENDER_DIR" ] || "$0" has claude_overlay_model; } \
1181+
if { [ -d "$RENDER_DIR" ] || "$0" has claude_overlay_model || [ -n "$_PLAN_MODE_ARG" ]; } \
11631182
&& [ -d "$INSTALL_DIR" ] && [ ! -L "$INSTALL_DIR" ] && [ -f "$INSTALL_DIR/VERSION" ] && [ -f "$INSTALL_DIR/package.json" ]; then
11641183
if ! command -v bun >/dev/null 2>&1; then
11651184
echo "Skip: bun not on PATH — the Claude render at $RENDER_DIR was not refreshed. Install bun, then re-run 'gstack-config gbrain-refresh'."

‎bin/gstack-relink‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -461,19 +461,26 @@ done
461461
# (in place, like gstack-patch-names). Clearing the list restores the committed
462462
# bytes. Only a generated router is rewritten, and only from a checkout that
463463
# carries the generator; a failed render keeps the current router.
464+
# plan_mode_preamble=off (#3168) renders it without the plan-mode preamble the
465+
# same way, and turning it back on restores the committed bytes.
464466
_ROUTER="$INSTALL_DIR/SKILL.md"
465467
_GEN_SRC="$(cd "$SCRIPT_DIR/.." && pwd)"
466-
if { [ "$DISABLED" != " " ] || grep -q '^Disabled on this install' "$_ROUTER" 2>/dev/null; } \
468+
_PLAN_MODE_ARG=""
469+
[ "$("$GSTACK_CONFIG" get plan_mode_preamble 2>/dev/null || true)" != off ] || _PLAN_MODE_ARG="--plan-mode=off"
470+
if { [ "$DISABLED" != " " ] || grep -q '^Disabled on this install' "$_ROUTER" 2>/dev/null \
471+
|| [ -n "$_PLAN_MODE_ARG" ] \
472+
|| { grep -q 'PLAN MODE EXCEPTION' "$_ROUTER" 2>/dev/null && ! grep -q '^## Plan Mode Safe Operations' "$_ROUTER" 2>/dev/null; }; } \
467473
&& grep -q '<!-- AUTO-GENERATED from' "$_ROUTER" 2>/dev/null && [ -f "$_GEN_SRC/scripts/gen-skill-docs.ts" ]; then
468474
_ROUTER_TMP="$(mktemp -d "${TMPDIR:-/tmp}/gstack-router.XXXXXX")" || _ROUTER_TMP=""
469475
_DISABLED_CSV="$(printf '%s' "$DISABLED" | xargs | tr ' ' ',')"
470476
if [ -n "$_ROUTER_TMP" ] && command -v bun >/dev/null 2>&1 \
471-
&& (cd "$_GEN_SRC" && bun run scripts/gen-skill-docs.ts --host claude --out-dir "$_ROUTER_TMP" ${_DISABLED_CSV:+"--disabled-skills=$_DISABLED_CSV"} >/dev/null 2>&1) \
477+
&& (cd "$_GEN_SRC" && bun run scripts/gen-skill-docs.ts --host claude --out-dir "$_ROUTER_TMP" ${_DISABLED_CSV:+"--disabled-skills=$_DISABLED_CSV"} ${_PLAN_MODE_ARG:+"$_PLAN_MODE_ARG"} >/dev/null 2>&1) \
472478
&& [ -s "$_ROUTER_TMP/SKILL.md" ] && cp "$_ROUTER_TMP/SKILL.md" "$_ROUTER.tmp.$$" && mv "$_ROUTER.tmp.$$" "$_ROUTER"; then
479+
_link_root_skill_alias
473480
[ -n "$_DISABLED_CSV" ] && echo "Router: disabled skills left out of $_ROUTER"
474481
else
475482
rm -f "$_ROUTER.tmp.$$"
476-
echo "gstack-relink: could not re-render the router for disabled_skills (bun missing or generation failed); $_ROUTER still lists every skill. Fix: install Bun, then run $0" >&2
483+
echo "gstack-relink: could not re-render the router for disabled_skills or plan_mode_preamble (bun missing or generation failed); $_ROUTER is unchanged. Fix: install Bun, then run $0" >&2
477484
fi
478485
[ -z "$_ROUTER_TMP" ] || rm -rf "$_ROUTER_TMP"
479486
fi

‎bin/gstack-render-claude.sh‎

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@
99
# upgrade falls back to `claude` with the reason printed.
1010
#
1111
# Each render keeps a plain-text activation record beside it
12-
# (<render dir>.overlay: overlay, source, model, version, gbrain, render), so
12+
# (<render dir>.overlay: overlay, source, model, version, gbrain, render, and
13+
# plan_mode=off for a render without the plan-mode preamble), so
1314
# `./setup --status` and the change-only banner never need bun. No record
1415
# means the default `claude` overlay on the committed render.
1516
#
17+
# Callers set _PLAN_MODE_ARG to --plan-mode=off when gstack-config
18+
# plan_mode_preamble is off (#3168); empty or unset means on. The committed
19+
# files carry the preamble, so with it off the default install is rendered.
20+
#
1621
# Callers define `_swap_in_render` (setup and bin/gstack-config each keep
1722
# their tested copy) and may define `log` and `bun_cmd`; plain echo and bun
1823
# are used otherwise.
@@ -81,15 +86,18 @@ gstack_render_unlock() {
8186

8287
# gstack_claude_render_action RENDER_DIR GBRAIN — what the default install's
8388
# render dir needs: `user` (brain-aware :user render), `plain` (pinned
84-
# overlay, no brain blocks), `remove` (serve the committed files) or `keep`.
89+
# overlay or plan-mode preamble off, no brain blocks), `remove` (serve the
90+
# committed files) or `keep`.
8591
# GBRAIN is ok, absent or unknown (detector missing or failed: no brain
86-
# blocks, and a render is left alone unless an overlay change needs it).
92+
# blocks, and a render is left alone unless an overlay or plan-mode change
93+
# needs it).
8794
gstack_claude_render_action() {
8895
local render_dir="$1" gbrain="$2" previous
8996
if [ "$gbrain" = ok ]; then _GSTACK_RENDER_ACTION=user; return 0; fi
90-
if [ "$_GSTACK_OVERLAY" != claude ]; then _GSTACK_RENDER_ACTION=plain; return 0; fi
97+
if [ "$_GSTACK_OVERLAY" != claude ] || [ -n "${_PLAN_MODE_ARG:-}" ]; then _GSTACK_RENDER_ACTION=plain; return 0; fi
9198
previous="$(gstack_claude_overlay_field "$render_dir.overlay" overlay)"
92-
if [ "$gbrain" = unknown ] && [ "${previous:-claude}" = claude ]; then
99+
if [ "$gbrain" = unknown ] && [ "${previous:-claude}" = claude ] \
100+
&& [ -z "$(gstack_claude_overlay_field "$render_dir.overlay" plan_mode)" ]; then
93101
_GSTACK_RENDER_ACTION=keep
94102
else
95103
_GSTACK_RENDER_ACTION=remove
@@ -102,8 +110,8 @@ gstack_claude_render_plain() {
102110
local src="$1" RENDER_DIR="$2" RENDER_TMP out rc=0
103111
RENDER_TMP="$RENDER_DIR.tmp.$$"
104112
rm -rf "$RENDER_TMP"
105-
_gstack_render_say "Rendering Claude skills with the $_GSTACK_OVERLAY overlay into $RENDER_DIR (source checkout stays clean)..."
106-
out="$(cd "$src" && _gstack_render_bun run gen:skill-docs --host claude --out-dir "$RENDER_TMP" --link-root "$RENDER_DIR" --model "$_GSTACK_OVERLAY" ${_DISABLED_CSV:+"--disabled-skills=$_DISABLED_CSV"} 2>&1)" || rc=$?
113+
_gstack_render_say "Rendering Claude skills with the $_GSTACK_OVERLAY overlay${_PLAN_MODE_ARG:+ and no plan-mode preamble} into $RENDER_DIR (source checkout stays clean)..."
114+
out="$(cd "$src" && _gstack_render_bun run gen:skill-docs --host claude --out-dir "$RENDER_TMP" --link-root "$RENDER_DIR" --model "$_GSTACK_OVERLAY" ${_DISABLED_CSV:+"--disabled-skills=$_DISABLED_CSV"} ${_PLAN_MODE_ARG:+"$_PLAN_MODE_ARG"} 2>&1)" || rc=$?
107115
if [ "$rc" -ne 0 ]; then
108116
rm -rf "$RENDER_TMP"
109117
printf '%s\n' "$out" | tail -3
@@ -150,9 +158,11 @@ gstack_claude_render_settle() {
150158
if [ "$render_kind" = committed ] && [ "$_GSTACK_OVERLAY_SOURCE" = default ]; then
151159
rm -f "$record"
152160
else
153-
printf 'overlay=%s\nsource=%s\nmodel=%s\nversion=%s\ngbrain=%s\nrender=%s\n' \
154-
"$served" "$_GSTACK_OVERLAY_SOURCE" "$_GSTACK_OVERLAY_ID" "${version:-unknown}" "$gbrain" "$render_kind" \
155-
> "$record.tmp.$$" && mv "$record.tmp.$$" "$record"
161+
{
162+
printf 'overlay=%s\nsource=%s\nmodel=%s\nversion=%s\ngbrain=%s\nrender=%s\n' \
163+
"$served" "$_GSTACK_OVERLAY_SOURCE" "$_GSTACK_OVERLAY_ID" "${version:-unknown}" "$gbrain" "$render_kind"
164+
[ "$render_kind" != user ] || [ -z "${_PLAN_MODE_ARG:-}" ] || printf 'plan_mode=off\n'
165+
} > "$record.tmp.$$" && mv "$record.tmp.$$" "$record"
156166
fi
157167
gstack_render_unlock "$render_dir"
158168
if [ "$served" != "${previous:-claude}" ]; then

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gstack",
3-
"version": "1.91.157",
3+
"version": "1.91.158",
44
"description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.",
55
"license": "MIT",
66
"type": "module",

0 commit comments

Comments
 (0)