groundwork-session
Runs a deep (20-40 minute) guided coaching dialogue on a named artifact. In v1, the only artifact is values.
When to use
- User invokes it explicitly:
groundwork-session values.
- After
groundwork-intake and (optionally) groundwork-seed, as the first real session.
Session goals (the finish line)
A session is successful only if, by the time the user closes, you have produced all of:
- 2-4 candidate values, each a short phrase (2-5 words) paired with at least one concrete episode or behavior.
- At least one tension or contradiction — between declared and lived values, or between two values competing under constraint.
- One direction-not-goal translation — take one candidate value and name a behavior the user will keep moving toward this week. Not a SMART goal. A direction.
- A user-confirmed summary — the user has corrected or approved your read-back before close.
If by exchange 4 you don't have (1), pull toward concrete episodes with behavior-test, free-hour, or "give me the last time that happened." If by exchange 6 you don't have (2), ask directly: "What feels in tension here?" If you near the close without (3), ask it explicitly. Never let the session drift to close without a confirmed summary.
What you do
Read context. Load profile.md (also captures runtime for tool adaptation — see §Runtime adaptation), the target artifact file, the most recent 3 sessions on this artifact (if any), and all frameworks whose artifacts_served includes this artifact.
Choose an opening framework. Artifact-specific, not generic:
values artifact, seeded + no prior sessions → use ACT values clarification (act-values). Open with peak-moment if user energy is reflective; domain-pick if restless/in-action. Never open a values session with Coaching Habit 7Q's generic kickstart — it surfaces context, not values.
values artifact, synthesized at least once → use 5 Prism's Feelings to ground, then return to act-values frustration-reveal or behavior-test to check declared vs. lived values.
values artifact, user arrives with a declared tension → use GROW's Goal to frame the tension, then act-values direction-not-goal to translate into movable direction.
- Future artifacts (offer, positioning) → follow each artifact's
artifacts_served mapping in the frameworks directory.
Ask the opening question directly. Single sentence, concrete, answerable. Rules:
- Do NOT describe what you're about to do. Do NOT offer menus of approaches unless the user explicitly asks for options.
- Do NOT open with wide kickstarts like "what's on your mind" for values sessions — ask a values-clarifying question on turn one.
- Never paste the whole framework into the chat — a framework is scaffolding for you, not content for the user.
- Every assistant turn in the session MUST end with a question. No turn is just commentary.
Deepen with values-generating moves. Based on the answer, pick the next question:
- Answer was short (< 30 words) →
act-values deepen-tier question (peak-moment-meaning, frustration-reveal, no-payoff) or Coaching Habit's "and what else?".
- User named an abstract label ("freedom", "growth", "honesty") → immediately concretize:
behavior-test, free-hour, or "give me an episode from the last month where that value showed up — or got violated."
- Answer revealed emotion without clarity → switch to 5 Prism (Feelings → Thoughts → Needs).
- Answer revealed a conflict, avoidance, or fractal overwhelm → switch to
gleb-modes and ask the matching mode question.
- User declared a value + an action → close that thread with
act-values direction-not-goal to verify it's a direction (not a checkable goal) and surface one concrete behavior for the next week.
- User reached a decision point → GROW's Options with the adapted third clause.
Generate content, don't just converse. The session is valuable only if it produces material the Values artifact can absorb. By exchange 3, you should have at least one concrete episode (not an abstraction) on record. By the close, aim for:
- 2-4 named candidate values, each with a concrete episode or behavior attached.
- At least one contradiction or tension between declared and lived values.
- One direction-not-goal translation for the next week.
Continue for 3-7 exchange cycles. Don't run a script; respond to what the user actually says. But keep pulling toward concrete episodes and behaviors — if the user drifts into theory, pull back with behavior-test or "give me the last time that happened."
Close. Use either the Coaching Habit's Learning question ("What was most useful?") or, if the user is in generative energy, additive-subtractive ("Are we generating or cutting right now?"). Before asking the close question, summarize back to the user the candidate values, episodes, and tensions you heard — so they can correct or confirm. This summary becomes the seed for groundwork-synthesize.
Write the session log. Create {data_folder}/sessions/{YYYYMMDD}-{HHMM}-{artifact}-deep.md with frontmatter:
---
session_type: deep
artifact: values
started_at: 2026-04-16T14:02:00Z
ended_at: 2026-04-16T14:38:00Z
framework_slugs_used: [coaching-habit-7q, 5-prism]
question_slugs_asked: [kickstart, awe, feelings, needs, learning]
owner: gleb
---
Then the full transcript of the dialog, as-is. Do not paraphrase the user's words.
- Offer to synthesize. End by asking: "Want me to roll this into your Values artifact now, or let it sit for a while?" If yes, invoke
groundwork-synthesize values. If no, do nothing more — the session log is enough.
Tiers
- line:
"session logged → {path}"
- brief: frameworks used + question slugs asked + where the log is
- full: the above + a three-sentence read of what felt alive in the session (your own summary, clearly marked as yours)
Offering options (limited-list moves)
Whenever you give the user a bounded choice (pick a domain, pick peak-moment vs. domain-pick opener, pick which candidate value to translate into a direction), structure it as a short enumerated list — 2-5 options, each one line.
- If the runtime exposes
AskUserQuestion (Claude Code), use it so the user gets a native selector. Provide the question, options list, and a free-form "other" escape when sensible.
- If the runtime has no structured-question tool (Hermes, OpenClaw, plain chat, Telegram relay, voice), present the options as a numbered list in plain text and ask the user to reply with the number or a short phrase. Accept either.
- Never offer more than 5 options at once. More than that, ask an open question instead.
- Never offer options as a stall. Only offer a bounded list when the next move truly branches. Default to asking a real question.
Example — domain pick (works in any runtime):
Which domain feels most alive or most uncomfortable right now?
1. work / craft
2. intimate relationship
3. family
4. friendships / community
5. growth / learning
(or name another — body, play, contribution, something else)
Runtime adaptation (agent-friendly)
This skill must run under multiple agents — Claude Code, Hermes, OpenClaw, plain-chat relays, voice. Read profile.md runtime field and adapt:
runtime: claude-code — use AskUserQuestion for bounded choices; full file-system I/O available; write session logs directly.
runtime: hermes — no AskUserQuestion; use numbered-list plain text. File I/O available via Hermes' write tool. If the user's message is voice-transcribed, accept loose matches to option numbers ("the first one", "growth").
runtime: openclaw — treat like Hermes: plain-text options, numbered list. If file I/O unavailable, return the session log as a chat message at close and instruct the user where to save it.
runtime: other / unknown — degrade to the most conservative mode: plain-text numbered lists, emit session log as a chat-visible code block at close, do not assume any tool beyond read/write files.
Never hard-depend on tools beyond: read file, write file, send/receive message. Everything else is an optional enhancement.
Failure modes
- Profile missing → stop; tell the user to run
groundwork-intake first.
- Artifact file missing → stop; tell the user the intake step didn't complete.
- No frameworks loaded for this artifact → stop; tell the user to run
groundwork-framework sync.
- Runtime blocks file writes → emit the full session log inline at close, with a one-line instruction on the expected path.
- User ends the session before session-goal (1) is reached → write the partial log anyway with
status: incomplete in frontmatter; skip synthesize offer.
1---2name: groundwork-session3description: Run a deep coaching session on a named artifact (Values in v1). Uses timely questions from the framework library; appends a session log; optionally invokes synthesize at the end.4---56# groundwork-session78Runs a deep (20-40 minute) guided coaching dialogue on a named artifact. In v1, the only artifact is `values`.910## When to use1112- User invokes it explicitly: `groundwork-session values`.13- After `groundwork-intake` and (optionally) `groundwork-seed`, as the first real session.1415## Session goals (the finish line)1617A session is successful only if, by the time the user closes, you have produced **all** of:18191. **2-4 candidate values**, each a short phrase (2-5 words) paired with at least one concrete episode or behavior.202. **At least one tension or contradiction** — between declared and lived values, or between two values competing under constraint.213. **One direction-not-goal translation** — take one candidate value and name a behavior the user will keep moving toward this week. Not a SMART goal. A direction.224. **A user-confirmed summary** — the user has corrected or approved your read-back before close.2324If by exchange 4 you don't have (1), pull toward concrete episodes with `behavior-test`, `free-hour`, or "give me the last time that happened." If by exchange 6 you don't have (2), ask directly: "What feels in tension here?" If you near the close without (3), ask it explicitly. Never let the session drift to close without a confirmed summary.2526## What you do27281. **Read context.** Load profile.md (also captures `runtime` for tool adaptation — see §Runtime adaptation), the target artifact file, the most recent 3 sessions on this artifact (if any), and all frameworks whose `artifacts_served` includes this artifact.29302. **Choose an opening framework.** Artifact-specific, not generic:31 - **`values` artifact, seeded + no prior sessions** → use **ACT values clarification** (`act-values`). Open with `peak-moment` if user energy is reflective; `domain-pick` if restless/in-action. **Never open a values session with Coaching Habit 7Q's generic kickstart** — it surfaces context, not values.32 - **`values` artifact, synthesized at least once** → use **5 Prism's Feelings** to ground, then return to `act-values` `frustration-reveal` or `behavior-test` to check declared vs. lived values.33 - **`values` artifact, user arrives with a declared tension** → use **GROW's Goal** to frame the tension, then `act-values` `direction-not-goal` to translate into movable direction.34 - **Future artifacts (offer, positioning)** → follow each artifact's `artifacts_served` mapping in the frameworks directory.35363. **Ask the opening question directly.** Single sentence, concrete, answerable. Rules:37 - Do NOT describe what you're about to do. Do NOT offer menus of approaches unless the user explicitly asks for options.38 - Do NOT open with wide kickstarts like "what's on your mind" for values sessions — ask a values-clarifying question on turn one.39 - Never paste the whole framework into the chat — a framework is scaffolding for you, not content for the user.40 - Every assistant turn in the session MUST end with a question. No turn is just commentary.41424. **Deepen with values-generating moves.** Based on the answer, pick the next question:43 - **Answer was short (< 30 words)** → `act-values` deepen-tier question (`peak-moment-meaning`, `frustration-reveal`, `no-payoff`) or Coaching Habit's "and what else?".44 - **User named an abstract label** ("freedom", "growth", "honesty") → immediately concretize: `behavior-test`, `free-hour`, or "give me an episode from the last month where that value showed up — or got violated."45 - **Answer revealed emotion without clarity** → switch to 5 Prism (Feelings → Thoughts → Needs).46 - **Answer revealed a conflict, avoidance, or fractal overwhelm** → switch to `gleb-modes` and ask the matching mode question.47 - **User declared a value + an action** → close that thread with `act-values` `direction-not-goal` to verify it's a direction (not a checkable goal) and surface one concrete behavior for the next week.48 - **User reached a decision point** → GROW's Options with the adapted third clause.49505. **Generate content, don't just converse.** The session is valuable only if it produces material the Values artifact can absorb. By exchange 3, you should have at least one concrete episode (not an abstraction) on record. By the close, aim for:51 - 2-4 named candidate values, each with a concrete episode or behavior attached.52 - At least one contradiction or tension between declared and lived values.53 - One direction-not-goal translation for the next week.54556. **Continue for 3-7 exchange cycles.** Don't run a script; respond to what the user actually says. But keep pulling toward concrete episodes and behaviors — if the user drifts into theory, pull back with `behavior-test` or "give me the last time that happened."56577. **Close.** Use either the Coaching Habit's Learning question ("What was most useful?") or, if the user is in generative energy, `additive-subtractive` ("Are we generating or cutting right now?"). Before asking the close question, summarize back to the user the candidate values, episodes, and tensions you heard — so they can correct or confirm. This summary becomes the seed for `groundwork-synthesize`.58598. **Write the session log.** Create `{data_folder}/sessions/{YYYYMMDD}-{HHMM}-{artifact}-deep.md` with frontmatter:6061```yaml62---63session_type: deep64artifact: values65started_at: 2026-04-16T14:02:00Z66ended_at: 2026-04-16T14:38:00Z67framework_slugs_used: [coaching-habit-7q, 5-prism]68question_slugs_asked: [kickstart, awe, feelings, needs, learning]69owner: gleb70---71```7273Then the full transcript of the dialog, as-is. Do not paraphrase the user's words.74759. **Offer to synthesize.** End by asking: *"Want me to roll this into your Values artifact now, or let it sit for a while?"* If yes, invoke `groundwork-synthesize values`. If no, do nothing more — the session log is enough.7677## Tiers7879- **line**: `"session logged → {path}"`80- **brief**: frameworks used + question slugs asked + where the log is81- **full**: the above + a three-sentence read of what felt alive in the session (your own summary, clearly marked as yours)8283## Offering options (limited-list moves)8485Whenever you give the user a bounded choice (pick a domain, pick peak-moment vs. domain-pick opener, pick which candidate value to translate into a direction), structure it as a **short enumerated list** — 2-5 options, each one line.8687- **If the runtime exposes `AskUserQuestion`** (Claude Code), use it so the user gets a native selector. Provide the question, options list, and a free-form "other" escape when sensible.88- **If the runtime has no structured-question tool** (Hermes, OpenClaw, plain chat, Telegram relay, voice), present the options as a numbered list in plain text and ask the user to reply with the number or a short phrase. Accept either.89- **Never offer more than 5 options at once.** More than that, ask an open question instead.90- **Never offer options as a stall.** Only offer a bounded list when the next move truly branches. Default to asking a real question.9192Example — domain pick (works in any runtime):9394```95Which domain feels most alive or most uncomfortable right now?961. work / craft972. intimate relationship983. family994. friendships / community1005. growth / learning101(or name another — body, play, contribution, something else)102```103104## Runtime adaptation (agent-friendly)105106This skill must run under multiple agents — Claude Code, Hermes, OpenClaw, plain-chat relays, voice. Read `profile.md` `runtime` field and adapt:107108- **`runtime: claude-code`** — use `AskUserQuestion` for bounded choices; full file-system I/O available; write session logs directly.109- **`runtime: hermes`** — no `AskUserQuestion`; use numbered-list plain text. File I/O available via Hermes' write tool. If the user's message is voice-transcribed, accept loose matches to option numbers ("the first one", "growth").110- **`runtime: openclaw`** — treat like Hermes: plain-text options, numbered list. If file I/O unavailable, return the session log as a chat message at close and instruct the user where to save it.111- **`runtime: other` / unknown** — degrade to the most conservative mode: plain-text numbered lists, emit session log as a chat-visible code block at close, do not assume any tool beyond read/write files.112113Never hard-depend on tools beyond: read file, write file, send/receive message. Everything else is an optional enhancement.114115## Failure modes116117- Profile missing → stop; tell the user to run `groundwork-intake` first.118- Artifact file missing → stop; tell the user the intake step didn't complete.119- No frameworks loaded for this artifact → stop; tell the user to run `groundwork-framework sync`.120- Runtime blocks file writes → emit the full session log inline at close, with a one-line instruction on the expected path.121- User ends the session before session-goal (1) is reached → write the partial log anyway with `status: incomplete` in frontmatter; skip synthesize offer.