mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-08 21:49:45 +08:00
New bin/gstack-paths emits GSTACK_STATE_ROOT, PLAN_ROOT, TMP_ROOT exports for
skill bash blocks to source via eval. Honors GSTACK_HOME → CLAUDE_PLUGIN_DATA →
$HOME/.gstack → .gstack (and parallel chains for plan/tmp roots) so skills work
the same in plugin installs, global installs, and CI containers without HOME.
Eight skills migrate off inline ${CLAUDE_PLUGIN_DATA:-...} or ${GSTACK_HOME:-...}
chains: careful, freeze, guard, unfreeze, investigate, context-save,
context-restore, learn, office-hours, plan-tune, codex. Resolved values are
identical, so existing tests cover correctness; the win is consolidating 11
copy-pasted fallback chains behind one helper.
codex/SKILL.md.tmpl gets a new Step 0.6 Resolve portable roots that sources
gstack-paths once, then replaces hardcoded ~/.claude/plans/*.md and
/tmp/codex-*-XXXXXX.txt with "$PLAN_ROOT"/*.md and "$TMP_ROOT/codex-*-XXXXXX.txt".
Hardening direction credited to the McGluut/gstack fork; this is upstream's
factoring of the per-skill chain the fork inlined.
Tests: test/gstack-paths.test.ts covers all three fallback chains with 8 unit
tests (HOME unset, CLAUDE_PLUGIN_DATA set, GSTACK_HOME wins, etc).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
45 lines
1.4 KiB
Cheetah
45 lines
1.4 KiB
Cheetah
---
|
|
name: unfreeze
|
|
version: 0.1.0
|
|
description: |
|
|
Clear the freeze boundary set by /freeze, allowing edits to all directories
|
|
again. Use when you want to widen edit scope without ending the session.
|
|
Use when asked to "unfreeze", "unlock edits", "remove freeze", or
|
|
"allow all edits". (gstack)
|
|
triggers:
|
|
- unfreeze edits
|
|
- unlock all directories
|
|
- remove edit restrictions
|
|
allowed-tools:
|
|
- Bash
|
|
- Read
|
|
sensitive: true
|
|
---
|
|
|
|
# /unfreeze — Clear Freeze Boundary
|
|
|
|
Remove the edit restriction set by `/freeze`, allowing edits to all directories.
|
|
|
|
```bash
|
|
mkdir -p ~/.gstack/analytics
|
|
echo '{"skill":"unfreeze","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> ~/.gstack/analytics/skill-usage.jsonl 2>/dev/null || true
|
|
```
|
|
|
|
## Clear the boundary
|
|
|
|
```bash
|
|
eval "$(~/.claude/skills/gstack/bin/gstack-paths)"
|
|
STATE_DIR="$GSTACK_STATE_ROOT"
|
|
if [ -f "$STATE_DIR/freeze-dir.txt" ]; then
|
|
PREV=$(cat "$STATE_DIR/freeze-dir.txt")
|
|
rm -f "$STATE_DIR/freeze-dir.txt"
|
|
echo "Freeze boundary cleared (was: $PREV). Edits are now allowed everywhere."
|
|
else
|
|
echo "No freeze boundary was set."
|
|
fi
|
|
```
|
|
|
|
Tell the user the result. Note that `/freeze` hooks are still registered for the
|
|
session — they will just allow everything since no state file exists. To re-freeze,
|
|
run `/freeze` again.
|