elliot-stack 1.0.36 → 1.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +21 -21
  2. package/bin/install.cjs +981 -981
  3. package/hooks/repo-search-nudge.js +32 -32
  4. package/package.json +1 -1
  5. package/skills/estack-active-learning-tutor/SKILL.md +339 -339
  6. package/skills/estack-better-title/SKILL.md +64 -64
  7. package/skills/estack-better-title/scripts/rename.sh +55 -55
  8. package/skills/estack-chris-voss/SKILL.md +80 -80
  9. package/skills/estack-chris-voss/references/elliot-notes.md +120 -120
  10. package/skills/estack-chris-voss/references/voss-principles.md +210 -210
  11. package/skills/estack-customer-discovery/SKILL.md +60 -60
  12. package/skills/estack-flight-planner/SKILL.md +332 -332
  13. package/skills/estack-flight-planner/references/config_schema.md +156 -156
  14. package/skills/estack-flight-planner/references/flight_history_schema.md +97 -97
  15. package/skills/estack-flight-planner/references/shuttle_schedules.md +98 -98
  16. package/skills/estack-flight-planner/scripts/check_setup.sh +89 -89
  17. package/skills/estack-flight-planner/scripts/fetch_flights.py +99 -99
  18. package/skills/estack-flight-planner/scripts/filter_flights.py +265 -265
  19. package/skills/estack-flight-planner/scripts/pair_shuttles.py +173 -173
  20. package/skills/estack-github-issue-tracker/SKILL.md +322 -322
  21. package/skills/estack-github-issue-tracker/bin/tracker-tools.cjs +1358 -1358
  22. package/skills/estack-github-issue-tracker/references/gh-cli-patterns.md +124 -124
  23. package/skills/estack-github-issue-tracker/references/result-file-schema.md +156 -156
  24. package/skills/estack-github-issue-tracker/references/tracker-schema.md +96 -96
  25. package/skills/estack-github-issue-tracker/tracker-template.md +58 -58
  26. package/skills/estack-leadership-coach/SKILL.md +1 -1
  27. package/skills/estack-leadership-coach/adding-references.md +1 -1
  28. package/skills/estack-migrate-claude-session-history/SKILL.md +15 -2
  29. package/skills/estack-pdf-to-md/SKILL.md +1 -2
  30. package/skills/estack-prompt-builder-coach/SKILL.md +81 -81
  31. package/skills/estack-prompt-builder-coach/definition-of-done-generator.md +42 -42
  32. package/skills/estack-prompt-builder-coach/prompt-builder.md +37 -37
  33. package/skills/estack-prompt-builder-coach/task-shaper.md +36 -36
  34. package/skills/estack-prompt-builder-coach/vague-ask-auditor.md +37 -37
  35. package/skills/estack-read-claude-session-history/SKILL.md +228 -204
  36. package/skills/estack-read-claude-session-history/references/jsonl-schema.md +126 -126
  37. package/skills/estack-read-claude-session-history/references/modes.md +455 -423
  38. package/skills/estack-read-claude-session-history/references/recipes.md +300 -271
  39. package/skills/estack-read-claude-session-history/scripts/lib/__init__.py +1 -1
  40. package/skills/estack-read-claude-session-history/scripts/lib/parser.py +460 -460
  41. package/skills/estack-read-claude-session-history/scripts/lib/paths.py +234 -234
  42. package/skills/estack-read-claude-session-history/scripts/lib/search.py +179 -179
  43. package/skills/estack-read-claude-session-history/scripts/lib/subagents.py +88 -88
  44. package/skills/estack-read-claude-session-history/scripts/lib/tools.py +144 -144
  45. package/skills/estack-read-claude-session-history/scripts/read_transcript.py +1914 -1776
  46. package/skills/estack-read-claude-session-history/scripts/tests/conftest.py +40 -40
  47. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/README.md +20 -20
  48. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/all-noise.jsonl +4 -4
  49. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/basic-session.jsonl +2 -2
  50. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-gaps.jsonl +9 -9
  51. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-noise.jsonl +7 -7
  52. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-parallel-a.jsonl +3 -3
  53. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-parallel-b.jsonl +3 -3
  54. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/engagement-waiting.jsonl +5 -5
  55. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/interrupted.jsonl +2 -2
  56. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/multi-compact.jsonl +8 -8
  57. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/pending-user.jsonl +2 -2
  58. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-no-meta/subagents/agent-aaa.jsonl +2 -2
  59. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-no-meta.jsonl +2 -2
  60. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-parent/subagents/agent-xyz123.jsonl +2 -2
  61. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-parent/subagents/agent-xyz123.meta.json +1 -1
  62. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/subagent-parent.jsonl +4 -4
  63. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/time-spread.jsonl +6 -6
  64. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/timeline-day-test.jsonl +5 -5
  65. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/tool-usage-parent/subagents/agent-sub1.jsonl +3 -0
  66. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/tool-usage-parent.jsonl +3 -0
  67. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/tool-zoo.jsonl +10 -10
  68. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/truncated.jsonl +2 -2
  69. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/unicode.jsonl +2 -2
  70. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/with-advisor.jsonl +3 -3
  71. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/with-compact.jsonl +5 -5
  72. package/skills/estack-read-claude-session-history/scripts/tests/fixtures/with-thinking.jsonl +2 -2
  73. package/skills/estack-read-claude-session-history/scripts/tests/test_backup_roots.py +56 -56
  74. package/skills/estack-read-claude-session-history/scripts/tests/test_engagement.py +239 -239
  75. package/skills/estack-read-claude-session-history/scripts/tests/test_json_format.py +201 -201
  76. package/skills/estack-read-claude-session-history/scripts/tests/test_modes.py +323 -199
  77. package/skills/estack-read-claude-session-history/scripts/tests/test_parser.py +195 -195
  78. package/skills/estack-read-claude-session-history/scripts/tests/test_paths.py +133 -133
  79. package/skills/estack-read-claude-session-history/scripts/tests/test_search.py +78 -78
  80. package/skills/estack-read-claude-session-history/scripts/tests/test_subagents.py +43 -43
  81. package/skills/estack-read-claude-session-history/scripts/tests/test_timeline.py +179 -179
  82. package/skills/estack-read-claude-session-history/scripts/tests/test_timezone_and_project.py +212 -212
  83. package/skills/estack-read-claude-session-history/scripts/tests/test_tools.py +80 -80
@@ -1,67 +1,67 @@
1
- ---
2
- name: estack-better-title
3
- version: 1.0.3
4
- description: (better-title) Suggest better chat session titles and rename the session
5
- disable-model-invocation: true
6
- allowed-tools: Bash, AskUserQuestion
7
- ---
8
-
9
- # Better Title
10
-
11
- The current session ID is: ${CLAUDE_SESSION_ID}
12
-
13
- ## Your task
14
-
15
- Suggest **3 descriptive titles** for this chat session based on the conversation so far. The goal is to make sessions easy to find later.
16
-
17
- ### Before drafting, do this quick mental pass
18
-
19
- Ask yourself:
20
- 1. What were the **goals** going in?
21
- 2. What **got built / decided / fixed** that the user might reference later?
22
- 3. What was **noise** — mistakes, abandoned approaches, things they had to redirect you on, dead ends? (These do NOT belong in the title.)
23
- 4. What's **temporary** vs. **lasting**? Temporary states should be mentioned briefly, not led with.
24
-
25
- Write the title from those answers, NOT from a chronological recap of the chat.
26
-
27
- ### Good titles
28
-
29
- - Summarize **what was accomplished**, not what was attempted
30
- - **Title the outputs, not the journey** — exclude mistakes, dead ends, and abandoned approaches. They're not searchable and not useful context for future-you.
31
- - **Use plain language a future-you would search for.** Avoid jargon like "passthrough," "edge cases," "toggle logic," "auto-cd," "refactored," "overhaul." Say what it does in normal words.
32
- - **Weight by long-term reference value.** If something will stop mattering in weeks or months (temporary fixes, current-state notes, "until X is available" workarounds), mention it briefly but don't lead with it.
33
- - List key outputs separated by dashes, commas, or similar (e.g. "Reverse-Engineering /rename, PR #33165 Comment, and Building /estack-better-title Skill")
34
- - Cover 2-4 main outputs. Resist cramming everything in — first-pass attempts tend to over-include.
35
- - Are detailed enough that someone skimming a session list can tell exactly what they'd find inside
36
- - Typically 8-20 words — longer is fine if it adds useful detail
37
-
38
- ## Format
39
-
40
- Present the 3 options using `AskUserQuestion` with a single-select question (`multiSelect: false`):
41
- - Each option's `label` is the full title text
42
- - Each option's `description` is a brief rationale for why it's a good title
43
- - The user can also select "Other" (provided automatically) to give feedback
44
-
45
- ## Interaction loop
46
-
47
- - If the user selects one of the 3 titles, use that title.
48
- - If the user selects "Other" and provides feedback (e.g. "shorter", "more specific", "mention X"), generate 3 new suggestions incorporating their feedback and present again via `AskUserQuestion`.
49
- - Keep iterating until the user selects a title or gives you an exact title.
50
-
51
- ## Renaming
52
-
53
- Once the user has chosen a title, run the rename script using a quoted heredoc to pass the title safely:
54
-
55
- ```bash
56
- bash "${CLAUDE_SKILL_DIR}/scripts/rename.sh" "${CLAUDE_SESSION_ID}" <<'__CLAUDE_TITLE__'
57
- <chosen title>
58
- __CLAUDE_TITLE__
59
- ```
60
-
61
- Replace `<chosen title>` with the actual chosen title. The quoted heredoc (`<<'__CLAUDE_TITLE__'`) prevents the shell from interpreting any special characters in the title — quotes, apostrophes, dollar signs, backticks, etc. are all passed through literally. After running, confirm the rename succeeded.
62
-
63
- **Important:** The live UI border won't update until the next session resume — the persisted title will show in the session list and on next `/resume`.
64
-
1
+ ---
2
+ name: estack-better-title
3
+ version: 1.0.3
4
+ description: (better-title) Suggest better chat session titles and rename the session
5
+ disable-model-invocation: true
6
+ allowed-tools: Bash, AskUserQuestion
7
+ ---
8
+
9
+ # Better Title
10
+
11
+ The current session ID is: ${CLAUDE_SESSION_ID}
12
+
13
+ ## Your task
14
+
15
+ Suggest **3 descriptive titles** for this chat session based on the conversation so far. The goal is to make sessions easy to find later.
16
+
17
+ ### Before drafting, do this quick mental pass
18
+
19
+ Ask yourself:
20
+ 1. What were the **goals** going in?
21
+ 2. What **got built / decided / fixed** that the user might reference later?
22
+ 3. What was **noise** — mistakes, abandoned approaches, things they had to redirect you on, dead ends? (These do NOT belong in the title.)
23
+ 4. What's **temporary** vs. **lasting**? Temporary states should be mentioned briefly, not led with.
24
+
25
+ Write the title from those answers, NOT from a chronological recap of the chat.
26
+
27
+ ### Good titles
28
+
29
+ - Summarize **what was accomplished**, not what was attempted
30
+ - **Title the outputs, not the journey** — exclude mistakes, dead ends, and abandoned approaches. They're not searchable and not useful context for future-you.
31
+ - **Use plain language a future-you would search for.** Avoid jargon like "passthrough," "edge cases," "toggle logic," "auto-cd," "refactored," "overhaul." Say what it does in normal words.
32
+ - **Weight by long-term reference value.** If something will stop mattering in weeks or months (temporary fixes, current-state notes, "until X is available" workarounds), mention it briefly but don't lead with it.
33
+ - List key outputs separated by dashes, commas, or similar (e.g. "Reverse-Engineering /rename, PR #33165 Comment, and Building /estack-better-title Skill")
34
+ - Cover 2-4 main outputs. Resist cramming everything in — first-pass attempts tend to over-include.
35
+ - Are detailed enough that someone skimming a session list can tell exactly what they'd find inside
36
+ - Typically 8-20 words — longer is fine if it adds useful detail
37
+
38
+ ## Format
39
+
40
+ Present the 3 options using `AskUserQuestion` with a single-select question (`multiSelect: false`):
41
+ - Each option's `label` is the full title text
42
+ - Each option's `description` is a brief rationale for why it's a good title
43
+ - The user can also select "Other" (provided automatically) to give feedback
44
+
45
+ ## Interaction loop
46
+
47
+ - If the user selects one of the 3 titles, use that title.
48
+ - If the user selects "Other" and provides feedback (e.g. "shorter", "more specific", "mention X"), generate 3 new suggestions incorporating their feedback and present again via `AskUserQuestion`.
49
+ - Keep iterating until the user selects a title or gives you an exact title.
50
+
51
+ ## Renaming
52
+
53
+ Once the user has chosen a title, run the rename script using a quoted heredoc to pass the title safely:
54
+
55
+ ```bash
56
+ bash "${CLAUDE_SKILL_DIR}/scripts/rename.sh" "${CLAUDE_SESSION_ID}" <<'__CLAUDE_TITLE__'
57
+ <chosen title>
58
+ __CLAUDE_TITLE__
59
+ ```
60
+
61
+ Replace `<chosen title>` with the actual chosen title. The quoted heredoc (`<<'__CLAUDE_TITLE__'`) prevents the shell from interpreting any special characters in the title — quotes, apostrophes, dollar signs, backticks, etc. are all passed through literally. After running, confirm the rename succeeded.
62
+
63
+ **Important:** The live UI border won't update until the next session resume — the persisted title will show in the session list and on next `/resume`.
64
+
65
65
  ---
66
66
 
67
67
  ## Skill Feedback
@@ -1,55 +1,55 @@
1
- #!/usr/bin/env bash
2
- # Renames a Claude Code session by appending title entries (append-only, never rewrites)
3
- # Usage: rename.sh <session-id> <title>
4
- # or: pass the title on stdin to rename.sh <session-id>
5
-
6
- set -euo pipefail
7
-
8
- SESSION_ID="${1-}"
9
- TITLE="${2-}"
10
-
11
- # If no title argument, read from stdin (supports heredoc input)
12
- if [[ -z "$TITLE" ]]; then
13
- TITLE="$(cat)"
14
- fi
15
-
16
- if [[ -z "$SESSION_ID" || -z "$TITLE" ]]; then
17
- echo "Error: Usage: rename.sh <session-id> <title>" >&2
18
- echo " or: pass the title on stdin to rename.sh <session-id>" >&2
19
- exit 1
20
- fi
21
-
22
- # Reject multiline titles (JSONL entries must be single lines)
23
- if [[ "$TITLE" == *$'\n'* || "$TITLE" == *$'\r'* ]]; then
24
- echo "Error: title must be a single line" >&2
25
- exit 1
26
- fi
27
-
28
- # Use Node's JSON.stringify for safe escaping of all special characters
29
- TITLE_JSON="$(node -e 'process.stdout.write(JSON.stringify(process.argv[1]))' "$TITLE")"
30
-
31
- # Find the session JSONL file
32
- SESSION_FILE=$(find "$HOME/.claude/projects/" -maxdepth 2 -name "${SESSION_ID}.jsonl" -type f 2>/dev/null | head -1)
33
-
34
- if [[ -z "$SESSION_FILE" ]]; then
35
- echo "Error: Could not find session file for ${SESSION_ID}" >&2
36
- exit 1
37
- fi
38
-
39
- # Build the exact lines we intend to append
40
- CUSTOM_LINE="$(printf '{"type":"custom-title","customTitle":%s,"sessionId":"%s"}' "$TITLE_JSON" "$SESSION_ID")"
41
- AGENT_LINE="$(printf '{"type":"agent-name","agentName":%s,"sessionId":"%s"}' "$TITLE_JSON" "$SESSION_ID")"
42
-
43
- # Check if both last entries already match (idempotent — skip if already current)
44
- LAST_CUSTOM="$(grep '^{"type":"custom-title"' "$SESSION_FILE" | tail -n 1 || true)"
45
- LAST_AGENT="$(grep '^{"type":"agent-name"' "$SESSION_FILE" | tail -n 1 || true)"
46
-
47
- if [[ "$LAST_CUSTOM" == "$CUSTOM_LINE" && "$LAST_AGENT" == "$AGENT_LINE" ]]; then
48
- echo "Session already named: ${TITLE}"
49
- exit 0
50
- fi
51
-
52
- # Append-only: never rewrite the file, just add new entries at the end
53
- printf '%s\n%s\n' "$CUSTOM_LINE" "$AGENT_LINE" >> "$SESSION_FILE"
54
-
55
- echo "Renamed session to: ${TITLE}"
1
+ #!/usr/bin/env bash
2
+ # Renames a Claude Code session by appending title entries (append-only, never rewrites)
3
+ # Usage: rename.sh <session-id> <title>
4
+ # or: pass the title on stdin to rename.sh <session-id>
5
+
6
+ set -euo pipefail
7
+
8
+ SESSION_ID="${1-}"
9
+ TITLE="${2-}"
10
+
11
+ # If no title argument, read from stdin (supports heredoc input)
12
+ if [[ -z "$TITLE" ]]; then
13
+ TITLE="$(cat)"
14
+ fi
15
+
16
+ if [[ -z "$SESSION_ID" || -z "$TITLE" ]]; then
17
+ echo "Error: Usage: rename.sh <session-id> <title>" >&2
18
+ echo " or: pass the title on stdin to rename.sh <session-id>" >&2
19
+ exit 1
20
+ fi
21
+
22
+ # Reject multiline titles (JSONL entries must be single lines)
23
+ if [[ "$TITLE" == *$'\n'* || "$TITLE" == *$'\r'* ]]; then
24
+ echo "Error: title must be a single line" >&2
25
+ exit 1
26
+ fi
27
+
28
+ # Use Node's JSON.stringify for safe escaping of all special characters
29
+ TITLE_JSON="$(node -e 'process.stdout.write(JSON.stringify(process.argv[1]))' "$TITLE")"
30
+
31
+ # Find the session JSONL file
32
+ SESSION_FILE=$(find "$HOME/.claude/projects/" -maxdepth 2 -name "${SESSION_ID}.jsonl" -type f 2>/dev/null | head -1)
33
+
34
+ if [[ -z "$SESSION_FILE" ]]; then
35
+ echo "Error: Could not find session file for ${SESSION_ID}" >&2
36
+ exit 1
37
+ fi
38
+
39
+ # Build the exact lines we intend to append
40
+ CUSTOM_LINE="$(printf '{"type":"custom-title","customTitle":%s,"sessionId":"%s"}' "$TITLE_JSON" "$SESSION_ID")"
41
+ AGENT_LINE="$(printf '{"type":"agent-name","agentName":%s,"sessionId":"%s"}' "$TITLE_JSON" "$SESSION_ID")"
42
+
43
+ # Check if both last entries already match (idempotent — skip if already current)
44
+ LAST_CUSTOM="$(grep '^{"type":"custom-title"' "$SESSION_FILE" | tail -n 1 || true)"
45
+ LAST_AGENT="$(grep '^{"type":"agent-name"' "$SESSION_FILE" | tail -n 1 || true)"
46
+
47
+ if [[ "$LAST_CUSTOM" == "$CUSTOM_LINE" && "$LAST_AGENT" == "$AGENT_LINE" ]]; then
48
+ echo "Session already named: ${TITLE}"
49
+ exit 0
50
+ fi
51
+
52
+ # Append-only: never rewrite the file, just add new entries at the end
53
+ printf '%s\n%s\n' "$CUSTOM_LINE" "$AGENT_LINE" >> "$SESSION_FILE"
54
+
55
+ echo "Renamed session to: ${TITLE}"
@@ -1,83 +1,83 @@
1
- ---
2
- name: estack-chris-voss
3
- version: 1.0.2
4
- description: >
5
- (chris-voss) Applies Chris Voss negotiation principles from *Never Split the Difference* to any situation
6
- where understanding human psychology, persuasion, or influence would improve the output. Use
7
- when the user is navigating a situation involving another person, drafting communication that
8
- needs to land a certain way, or asking for advice on how to approach a difficult conversation —
9
- even if they don't explicitly ask for negotiation help. Do not use for coding, math, or factual
10
- lookups.
11
- ---
12
-
13
- # Chris Voss Negotiation Skill
14
-
15
- You have deep, internalized knowledge of *Never Split the Difference* by Chris Voss. Your job is
16
- to naturally inject his principles into whatever the user is working on — making the output more
17
- persuasive, emotionally intelligent, and strategically sound — even when they didn't ask for it.
18
-
19
- This skill applies any time the quality of the answer depends on understanding how people receive
20
- information, make decisions, or get moved to act. That includes live interpersonal situations
21
- (conversations, negotiations, conflict) but also any output with an implicit audience: a pitch
22
- deck, a pricing structure, a proposal, a cold message, an argument. Voss's principles — loss
23
- aversion, emotional anchoring, labeling, calibrated framing, tactical empathy — apply whenever
24
- a human will eventually be on the receiving end of what's being built.
25
-
26
- Think of yourself as a negotiation consultant sitting beside the user. Read the situation,
27
- identify where Voss's lens adds value, and apply the right tools without making it a lecture.
28
-
29
- ---
30
-
31
- ## How to Apply This Skill
32
-
33
- Read the user's situation, then draw from the principles below to improve, rewrite, or advise.
34
- You don't need to label every technique you're using — just use them. If it helps the user to
35
- understand *why* something works, briefly explain it, but don't turn every response into a lecture.
36
-
37
- **Prioritize:**
38
- - Giving the user exact words or a rewritten draft when they need one
39
- - Identifying the emotional or psychological dynamics at play — in the room or in the reader
40
- - Pointing out where the user might be giving away power or framing things suboptimally
41
- - Preempting objections and resistance before they arise
42
-
43
- ---
44
-
45
- ## Core Principles Reference
46
-
47
- Read `references/voss-principles.md` for the full structured knowledge base, and
48
- `references/elliot-notes.md` for additional personal highlights and edge cases. Below is a
49
- quick index of when to reach for each tool:
50
-
51
- | Situation | Primary Tools |
52
- |---|---|
53
- | Need a reply to a silent email/text | "Have you given up on X?" framing, No-oriented question |
54
- | Writing a persuasive ask/request | Accusation audit, lead with value, FOMO framing |
55
- | Pitching an idea, product, or company | Loss aversion framing, emotional anchoring, accusation audit |
56
- | Structuring pricing or an offer | Precise numbers, Ackerman logic, nonmonetary add-on |
57
- | Anticipating pushback or rejection | Label negatives upfront, accusation audit |
58
- | Tense conversation / conflict | Labeling, mirroring, downward voice tone |
59
- | Someone not engaged / shutting down | Mirroring, calibrated questions, "That's right" pursuit |
60
- | Trying to build trust quickly | Similarity principle, tactical empathy, acknowledge the negative |
61
- | Getting someone to commit (not just agree) | Rule of 3, "how/what" implementation questions |
62
- | Someone being unreasonable | Look for black swans — there's something you don't know yet |
63
- | Deadline pressure | Reframe: deadlines are often self-imposed and flexible |
64
- | Positioning or messaging for an audience | Emotional framing, loss aversion, accusation audit |
65
-
66
- ---
67
-
68
- ## Output Style
69
-
70
- - **For messages/emails/outreach**: Rewrite or draft directly, applying Voss principles implicitly.
71
- - **For pitches, decks, proposals**: Shape framing, ordering, and language around how the audience
72
- will emotionally receive it — not just what's logically true.
73
- - **For live situations/conversations**: Diagnose the emotional dynamics, give exact language, flag
74
- power the user is giving away.
75
- - **For strategy questions**: Be direct and tactical. Think out loud like a negotiation coach who's
76
- seen this before.
77
-
78
- Use calm, confident language. If the situation is high-stakes, slow down and be precise. Never
79
- rush the user into a compromise — no deal is better than a bad deal.
80
-
1
+ ---
2
+ name: estack-chris-voss
3
+ version: 1.0.2
4
+ description: >
5
+ (chris-voss) Applies Chris Voss negotiation principles from *Never Split the Difference* to any situation
6
+ where understanding human psychology, persuasion, or influence would improve the output. Use
7
+ when the user is navigating a situation involving another person, drafting communication that
8
+ needs to land a certain way, or asking for advice on how to approach a difficult conversation —
9
+ even if they don't explicitly ask for negotiation help. Do not use for coding, math, or factual
10
+ lookups.
11
+ ---
12
+
13
+ # Chris Voss Negotiation Skill
14
+
15
+ You have deep, internalized knowledge of *Never Split the Difference* by Chris Voss. Your job is
16
+ to naturally inject his principles into whatever the user is working on — making the output more
17
+ persuasive, emotionally intelligent, and strategically sound — even when they didn't ask for it.
18
+
19
+ This skill applies any time the quality of the answer depends on understanding how people receive
20
+ information, make decisions, or get moved to act. That includes live interpersonal situations
21
+ (conversations, negotiations, conflict) but also any output with an implicit audience: a pitch
22
+ deck, a pricing structure, a proposal, a cold message, an argument. Voss's principles — loss
23
+ aversion, emotional anchoring, labeling, calibrated framing, tactical empathy — apply whenever
24
+ a human will eventually be on the receiving end of what's being built.
25
+
26
+ Think of yourself as a negotiation consultant sitting beside the user. Read the situation,
27
+ identify where Voss's lens adds value, and apply the right tools without making it a lecture.
28
+
29
+ ---
30
+
31
+ ## How to Apply This Skill
32
+
33
+ Read the user's situation, then draw from the principles below to improve, rewrite, or advise.
34
+ You don't need to label every technique you're using — just use them. If it helps the user to
35
+ understand *why* something works, briefly explain it, but don't turn every response into a lecture.
36
+
37
+ **Prioritize:**
38
+ - Giving the user exact words or a rewritten draft when they need one
39
+ - Identifying the emotional or psychological dynamics at play — in the room or in the reader
40
+ - Pointing out where the user might be giving away power or framing things suboptimally
41
+ - Preempting objections and resistance before they arise
42
+
43
+ ---
44
+
45
+ ## Core Principles Reference
46
+
47
+ Read `references/voss-principles.md` for the full structured knowledge base, and
48
+ `references/elliot-notes.md` for additional personal highlights and edge cases. Below is a
49
+ quick index of when to reach for each tool:
50
+
51
+ | Situation | Primary Tools |
52
+ |---|---|
53
+ | Need a reply to a silent email/text | "Have you given up on X?" framing, No-oriented question |
54
+ | Writing a persuasive ask/request | Accusation audit, lead with value, FOMO framing |
55
+ | Pitching an idea, product, or company | Loss aversion framing, emotional anchoring, accusation audit |
56
+ | Structuring pricing or an offer | Precise numbers, Ackerman logic, nonmonetary add-on |
57
+ | Anticipating pushback or rejection | Label negatives upfront, accusation audit |
58
+ | Tense conversation / conflict | Labeling, mirroring, downward voice tone |
59
+ | Someone not engaged / shutting down | Mirroring, calibrated questions, "That's right" pursuit |
60
+ | Trying to build trust quickly | Similarity principle, tactical empathy, acknowledge the negative |
61
+ | Getting someone to commit (not just agree) | Rule of 3, "how/what" implementation questions |
62
+ | Someone being unreasonable | Look for black swans — there's something you don't know yet |
63
+ | Deadline pressure | Reframe: deadlines are often self-imposed and flexible |
64
+ | Positioning or messaging for an audience | Emotional framing, loss aversion, accusation audit |
65
+
66
+ ---
67
+
68
+ ## Output Style
69
+
70
+ - **For messages/emails/outreach**: Rewrite or draft directly, applying Voss principles implicitly.
71
+ - **For pitches, decks, proposals**: Shape framing, ordering, and language around how the audience
72
+ will emotionally receive it — not just what's logically true.
73
+ - **For live situations/conversations**: Diagnose the emotional dynamics, give exact language, flag
74
+ power the user is giving away.
75
+ - **For strategy questions**: Be direct and tactical. Think out loud like a negotiation coach who's
76
+ seen this before.
77
+
78
+ Use calm, confident language. If the situation is high-stakes, slow down and be precise. Never
79
+ rush the user into a compromise — no deal is better than a bad deal.
80
+
81
81
  ---
82
82
 
83
83
  ## Skill Feedback