| name | fstack-profile |
| version | 0.7.0 |
| description | Inspect, edit, and switch fstack archetypes. Archetypes are behavior-derived (production, sprint, exploration, etc.) and reference repo/branch combinations via context_distribution. |
| allowed-tools | ["Bash","Read","Edit","AskUserQuestion"] |
| triggers | ["show my profile","edit my profile","update my profile","which archetype am I in","profile gap","switch archetype","new manual subprofile","create profile","list profiles"] |
/fstack-profile
Writes target the active subprofile. To affect a different one, switch first.
Seven dimensions at developer.*. Both ends of each spectrum are legitimate working styles; pick where the user actually lives, not where you think is "best."
| Key | Low end | High end |
|---|
risk_tolerance | stability | speed |
bias_for_action | deliberate | action |
scope_appetite | focused | ambitious |
test_rigor | lean | rigorous |
architecture_care | pragmatic | principled |
detail_preference | detail-oriented | big-picture |
autonomy | seek-permission | ask-forgiveness |
Five preferences at preferences.*:
code_style (functional, oop, mixed)
comment_level (none, minimal, verbose)
abstraction (low, medium, high)
error_handling (try-catch, result-types, propagate)
type_safety (strict, balanced, loose)
Preamble
_FSTACK_BIN=""
_skill_md="$HOME/.claude/skills/fstack-profile/SKILL.md"
if [ -L "$_skill_md" ]; then _src="$(readlink "$_skill_md")"; _FSTACK_BIN="$(cd "$(dirname "$_src")/../bin" && pwd)"; fi
if [ ! -x "$_FSTACK_BIN/fstack-config" ]; then
for cand in "$HOME/Workspaces/fstack/bin" "$HOME/fstack/bin"; do [ -x "$cand/fstack-config" ] && _FSTACK_BIN="$cand" && break; done
fi
"$_FSTACK_BIN/fstack-config" exists || { echo "uninitialized. run /fstack"; exit 0; }
echo "ACTIVE: $("$_FSTACK_BIN/fstack-config" active)"
"$_FSTACK_BIN/fstack-profile" list
Branch
- show / inspect
- list subprofiles
- switch (use)
- create
- clone (create + copy from another)
- rename
- remove
- edit a dimension (writes to active)
- edit a preference (writes to active)
- show gap (active)
- reset (active)
Ambiguous? Ask which.
1. Show
"$_FSTACK_BIN/fstack-profile" show
"$_FSTACK_BIN/fstack-profile" show <key>
If active has sample_count >= 5:
"$_FSTACK_BIN/fstack-observe" rollup >/dev/null
"$_FSTACK_BIN/fstack-observe" gap
Surface any |gap| ≥ 0.2.
2. List
"$_FSTACK_BIN/fstack-profile" list
Active marked with *.
3. Switch (use)
"$_FSTACK_BIN/fstack-profile" use <key>
Confirm in one line: "active: ." Show the vibe afterward.
If the user said "switch to " but no subprofile by that name exists, offer to create.
4. Create
Ask:
- Key (slug, kebab-case). Validate.
- Label (free text, defaults to key).
- Description (one line, optional).
- Walk setup now or leave unset?
"$_FSTACK_BIN/fstack-profile" create <key> --label "<label>" --description "<desc>"
If "walk setup now": switch to the new key, then run /fstack's setup flow.
5. Clone
Use when the new profile is mostly the same as an existing one with tweaks.
"$_FSTACK_BIN/fstack-profile" create <new-key> --label "<label>" --clone-from <existing-key>
Clone copies developer + preferences + stack. Resets inferred + declared_at so the new profile records its own observations.
After clone, ask: "Tweak any dimensions now?" Branch into 8 if yes.
6. Rename
"$_FSTACK_BIN/fstack-profile" rename <old> <new>
Confirm via AskUserQuestion before mutating.
7. Remove
"$_FSTACK_BIN/fstack-profile" remove <key>
Cannot remove the last subprofile (binary enforces). Confirm via AskUserQuestion. If removed and was active, active falls back to the first remaining key.
8. Edit a dimension (writes to active)
Map phrasing. Both directions are normal working styles; don't assume one end is improvement.
- more stable / less risky →
risk_tolerance down
- faster / less risk-averse →
risk_tolerance up
- more deliberate / plan more →
bias_for_action down
- more action / ship more →
bias_for_action up
- more focused / smaller scope →
scope_appetite down
- more ambitious / boil-the-ocean →
scope_appetite up
- more rigorous / thorough tests →
test_rigor up
- leaner tests →
test_rigor down
- more principled / structured →
architecture_care up
- more pragmatic / direct →
architecture_care down
- more detail-oriented →
detail_preference down
- more big-picture →
detail_preference up
- seek permission more / consult →
autonomy down
- ask forgiveness more / delegate →
autonomy up
Read current. Compute new (delta ±0.2, clamp 0..1, or use explicit number).
Confirm via AskUserQuestion. Then:
"$_FSTACK_BIN/fstack-config" set-active developer.<dim> <new>
"$_FSTACK_BIN/fstack-config" set-active declared_at "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
If the user phrasing implies the change is mode-specific ("for prod I'm careful"), ask whether to apply to active or create a new subprofile.
9. Edit a preference (writes to active)
"$_FSTACK_BIN/fstack-config" set-active preferences.<key> <value>
Reject values outside the enum.
10. Show gap (active)
"$_FSTACK_BIN/fstack-observe" rollup >/dev/null
"$_FSTACK_BIN/fstack-observe" gap
Translate per line:
- |gap| < 0.1: "close."
- 0.1..0.3: "drifting."
-
0.3: "mismatch. Either declared is stale or behavior isn't what you'd say."
Ask: update declared to observed? keep declared? leave as-is? Apply only what the user agrees to:
"$_FSTACK_BIN/fstack-config" set-active developer.<dim> <observed>
"$_FSTACK_BIN/fstack-config" set-active declared_at "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
11. Reset (active)
Confirm. If yes:
"$_FSTACK_BIN/fstack-config" set-active-json developer '{"risk_tolerance":null,"bias_for_action":null,"scope_appetite":null,"test_rigor":null,"architecture_care":null,"detail_preference":null,"autonomy":null}'
"$_FSTACK_BIN/fstack-config" set-active declared_at null
Invoke /fstack to re-declare.
Voice
Confirm before mutating declared values. Writes default to active. The user has to switch first to edit a different subprofile.