elliot-stack 1.0.0
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.
- package/bin/install.cjs +410 -0
- package/package.json +24 -0
- package/skills/better-title/SKILL.md +45 -0
- package/skills/better-title/scripts/rename.sh +55 -0
- package/skills/chris-voss/SKILL.md +78 -0
- package/skills/chris-voss/references/elliot-notes.md +120 -0
- package/skills/chris-voss/references/voss-principles.md +210 -0
- package/skills/github-issue-tracker/SKILL.md +320 -0
- package/skills/github-issue-tracker/bin/tracker-tools.cjs +1358 -0
- package/skills/github-issue-tracker/references/gh-cli-patterns.md +124 -0
- package/skills/github-issue-tracker/references/result-file-schema.md +156 -0
- package/skills/github-issue-tracker/references/tracker-schema.md +96 -0
- package/skills/github-issue-tracker/tracker-template.md +58 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
Notes:
|
|
2
|
+
- 3 steps to old method to negotiate
|
|
3
|
+
1. Separate the emotion form the problem
|
|
4
|
+
2. don’t get wrapped up in the other person‘s position, but instead of focus on what they’re interests are. So you can find what they really want.
|
|
5
|
+
3. Work together to create win-win options.
|
|
6
|
+
- The best way to quiet the voice in their head and your head at the same time. Make your all encompassing purpose to hear/understand what the other person has to say.
|
|
7
|
+
- Your voice is one of your biggest tools in negotiation. The tone of your voice sets the stage for the conversation.
|
|
8
|
+
- 3 voice tones
|
|
9
|
+
1. Positive playful (relax and smile while your talking) MOST USEFUL
|
|
10
|
+
- When people are in a positive frame of mind they think more quickly and more likely to problem solve
|
|
11
|
+
2. Calm and encouraging (inflict your voice in a downward way)
|
|
12
|
+
3. Direct and assertive (signals dominance which most people will push back against) AVOID
|
|
13
|
+
- When u inflict your voice in a downward way. U put it out there that u got it covered. Talking slowly and clearly you convey 1 idea. I’m in control. (Use this when an item is not up for discussion)
|
|
14
|
+
- When u inflect in an upwards way u invite a response. Why? Because u leave the door open for uncertainty, u make the statement sound like a question.
|
|
15
|
+
- Mirroring: say the last 3 words of what they said or last 3 important words. Gets the speaker to elaborate. ALWAYS LET THE OTHER PERSON RESPOND!
|
|
16
|
+
- Being right ISNT the key to a successful negotiation having the right mindset is.
|
|
17
|
+
- Slow it down. Going to quickly makes other people feel like they aren’t being heard.
|
|
18
|
+
- Ask people to help. Everyone wants to help, find a way they can help u and ask for help. Especially if they don’t like you, ask for help!!
|
|
19
|
+
- Labeling: identification and acknowledgment of the other party’s emotions to build rapport and guide the conversation. Ex: it sounds like, it looks like (then their feeling) Note: DONT use I, it gets people to think you are selfish
|
|
20
|
+
- People emotions have two levels:
|
|
21
|
+
1. The "presenting" behavior: the part above the surface you can see and hear,
|
|
22
|
+
2. beneath, the "underlying" feeling is what actually motivates the behavior.
|
|
23
|
+
- The fastest and most efficient means of establishing a quick working relationship is to acknowledge the negative and diffuse it. Ex: when talking to the fam of a hostage I started with Ik your scared or when I make a mistake I always acknowledge the other person's anger. The phrase "Look, I'm an asshole" is an effective way to make problem go away.
|
|
24
|
+
- The point of labeling is to label the emotion or feelings that the person is feeling so that they will start to elaborate on the underlying cause of the problem.
|
|
25
|
+
- Power of labeling the negatives: identifying fears or concerns upfront reduces their impact. Ex: acknowledging something as horrible makes it seem less intimidating. Ex: “I don’t want this to sound harsh” or “I don’t want to seem like an asshole”
|
|
26
|
+
- No, is most people’s default answer
|
|
27
|
+
- No, is the start of the negotiation not the end of it
|
|
28
|
+
- We can’t control others decisions, we can only lead/influence them to the decision we want
|
|
29
|
+
- No, it makes the speaker feel in control (like they are in the drivers seat)
|
|
30
|
+
- Everyone is driven by 2 primal urges, 1: to feel safe and secure and 2: to feel in control. We need to satisfy those 2 urges to get in the door.
|
|
31
|
+
- There are three types of “yes":
|
|
32
|
+
1. Counterfeit Yes: A deceptive yes, used to avoid conflict.
|
|
33
|
+
2. Confirmation Yes: A simple agreement to facts.
|
|
34
|
+
3. Commitment Yes: A real agreement with intent to act.
|
|
35
|
+
- No, it makes the speaker feel in control (like they are in the drivers seat)
|
|
36
|
+
- How to get someone to a No, especilally if they are not listiening
|
|
37
|
+
- say something that is totaly wrong, forcing them to listen and correct you
|
|
38
|
+
- ask them what they "dont want"
|
|
39
|
+
- Don’t push people to say “Yes” it makes people defensive. We love to hear it but hate to say it. Instead go for “No”
|
|
40
|
+
- How to always get an email back: “Have you given up on this project”, this gets you a NO and pushes the other party to respond, and correct you. It’s the equivalent of parents saying “I’m leaving” and u screaming “No” and chasing after them.
|
|
41
|
+
- That’s right breakthrough. Happens when you make the other feel like you truly understand their position/perspective. After this most people are more open to collaboration.
|
|
42
|
+
- How to get a “that’s right”, summarize what the other person said to show that your listening and understanding. When you get the “that’s right” it mean you have built enough trust to move forward
|
|
43
|
+
- The moment you convince someone that you truly understand their dreams, feelings, the world they inhabit. Mental and behavior change becomes possible and the foundation for breakthrough has been laid.
|
|
44
|
+
- No deal is better then a bad deal
|
|
45
|
+
- Deadlines are often not as rigid as they seem. They are mostly self-imposed and based on external factors that can be adjusted.
|
|
46
|
+
- Deadlines can be used as a tool for leverage. You can use a deadline to create anxiety and rush the other side into agreement.
|
|
47
|
+
- Don't feel obligated to reveal or accept a deadline. Being transparent with deadlines a lot of the time helps both parties. Note: if you don't know the other party's deadline, as you approach your deadline, you end up bargaining with yourself.
|
|
48
|
+
- Decision-making is governed by emotion, not rationality
|
|
49
|
+
- When someone accuses one of being unfair, they automatically develop feelings of discomfort and get defensive
|
|
50
|
+
- The best response to being called “unfair” is to apologize and say “let’s go back to when I started testing you unfairly and we’ll fix it”
|
|
51
|
+
- Way to respond if someone says they have you a “fair” offer, either mirror the “fair” back at them and label: “it sounds like you are ready to show the evidence to support that”
|
|
52
|
+
- If you start the negotiation by saying you want to make sure your treating them fairly it sets the tone that you are honest and trustworthy
|
|
53
|
+
- In negotiation to get real leverage, you have to show the other party. They have something to lose if the deal falls through.
|
|
54
|
+
- anchor their emotions: start with an accusation audit (tell them a bunch of negatives before they can think it), this prepares them for something negative, trigging their loss aversion, prepping them to jump on the first positive thing you offer
|
|
55
|
+
- "I wanted to bring this opportunity to you before I took it to someone else" great way to create a sense of urgency (fear of missing out), make the listener feel special, and create a deadline
|
|
56
|
+
- in monetary negotiations try to let the other side go first since in most cases you don't have all the facts
|
|
57
|
+
- establish a range: if you offer a range of numbers, it increases the chances of getting a number within that range, and that way you go first without getting the other party in a defensive position. (just remember the other party will probably anchor to the lowest number, so make your lowest number higher than the actual number you want)
|
|
58
|
+
- When you offer a number that ends in zeros (120,000), it feels like a temporary number, versus if you offer a number like $126,263 that feels like a number that was reached through thoughtful calculation and it’s way more immovable
|
|
59
|
+
- Add an unrelated surpose gift, this will create feelings of reseprocity, leaidng to either the other party increasing thier number or paying you back in the future.
|
|
60
|
+
- Pleasantly persistent about unmonetary terms, potentially leads to monetary increase. Ex: a woman asked for an extra week of vacation past max, persistently, but instead they increased her salary
|
|
61
|
+
- In an interview, always ask “What does it take to be successful here?” This works because when someone gives u guidance then they have a personal stake in seeing u succeed.
|
|
62
|
+
- People will take more risks to avoid a loss then to realize a gain. Make sure the other party sees there is more to loose by inaction
|
|
63
|
+
- Calibrated question:
|
|
64
|
+
- not yes or no question
|
|
65
|
+
- use how what and why
|
|
66
|
+
- EX: how am I supposed to do that, what are we trying to accomplish here
|
|
67
|
+
- basicly asking the other party to help u over come your problems
|
|
68
|
+
- 7/38/55 rule:
|
|
69
|
+
- 7% of a message is based on the words
|
|
70
|
+
- 38% of a message comes from the tone of voice
|
|
71
|
+
- 55% of a message from the speaker’s body language and face
|
|
72
|
+
- Rule of 3:
|
|
73
|
+
- if you can get the other party to agree to the same thing 3 times in a discussion you triple the chances that your actually getting a "commitment yes" not a "counterfeit yes"
|
|
74
|
+
- going over the same topic 3 times, helps uncover issues
|
|
75
|
+
- dont sound like a broken record, ask related questions or label to get a "thats right"
|
|
76
|
+
- use "how" or "what" questions about implementation, and their answer to that counts as a yes
|
|
77
|
+
- signs of lying
|
|
78
|
+
- liars use more words
|
|
79
|
+
- liars use more third party pronouns (staying away form using "I")
|
|
80
|
+
- liars talk in more complex sentences (make more complex stories)
|
|
81
|
+
- Pronoun usage in negotiation reveals a person's true influence—those who overuse "I," "me," and "my" often have less power, while those who defer to "we," "they," and "them" are more likely key decision-makers avoiding direct commitment.
|
|
82
|
+
- If you start with saying something’s really expensive then people will brace themselves, and then if the thing you say is lower than their expectation, they will be happy and relieved, and after the thing u say is higher than expected than at least they brace themselves for it. This will lower the big reaction when you say the cost.
|
|
83
|
+
- 3 types of negotiators
|
|
84
|
+
1. Assertive: time is money, love winning, direct and candid, mostly wants to be heard, can't listen to you until they feel you understand them,
|
|
85
|
+
- How to deal with: mirrors, calibrated questions, labels, summaries, most importantly get a "that's right"
|
|
86
|
+
- Meaning of Silence: they ran out of things to say
|
|
87
|
+
2. Accommodators: want free following continuous communication, love win-wins, want to remain good friends (friendly, easy to talk to)
|
|
88
|
+
- How to deal with: listen, nudge their talk toward actions with calibrated questions,
|
|
89
|
+
- Meaning of Silence: they are angry
|
|
90
|
+
3. Analysts: slow, methodical, diligent, work toward best result in a systematic way, time is of little consequence, they hate surprises (will research a lot in advance)
|
|
91
|
+
- How to deal with: they are skeptical by nature so dont ask many questions at the start, use clear data to drive reasons, give them opportunity to think
|
|
92
|
+
- Meaning of Silence: they want to think
|
|
93
|
+
- Thinking your normal and everyone else thinks like you is really dangerous, with 3 different types of negotiations, there is a 66% chance the other person has a different negotiation style
|
|
94
|
+
- Black Swan Rule: treat others the way THEY NEED to be treated
|
|
95
|
+
- Types of Negotiators PDF: https://tinyurl.com/types-of-negotiators-pdf (also in email form black swan group)
|
|
96
|
+
- asking "why?" often makes people defensive
|
|
97
|
+
- Use "why" in a negotiation by asking them to defend a position that benefits you. Ex: asking them why would they ever switch to you form their current supplier
|
|
98
|
+
- no deal is better then a bad deal (have the ready to walk mentality)
|
|
99
|
+
- Ackerman Bargaining: combines reciprocity, extreme anchors, loss aversion and more...
|
|
100
|
+
1. set your target price
|
|
101
|
+
2. set your first offer 65% above/below your target (Extreme Anchor)
|
|
102
|
+
3. calculate three sets of DECREASING increments Ex: 85%, 95%, 100%. Makes the other side think they squeezed every last drop out of you.
|
|
103
|
+
4. use lots of empathy and different ways of saying "no" to get the OTHER side to counter/bid against themselves before raising/lowering your offer
|
|
104
|
+
5. when giving the final offer, give a precise number AND throw in a nonmonetary item to show your at your limit
|
|
105
|
+
- Prepare, prepare, prepare. When the pressure is on, you don’t rise to the occasion; you fall to your highest level of preparation.
|
|
106
|
+
- Black Swan: hidden and unexpected information
|
|
107
|
+
- Black Swan: hidden and unexpected information that CANNOT be predicted and change EVERYTHING
|
|
108
|
+
- In every negotiation each person has at least 3 black swans
|
|
109
|
+
- Leverage: is the ability to inflict loss and withhold gain
|
|
110
|
+
1. Positive: when the other side wants what u have
|
|
111
|
+
2. Negative: ability to damage/hurt the other side (loss aversion)
|
|
112
|
+
- How to find: what are they worried about, who/what is important to them, who is their audience
|
|
113
|
+
3. Normative: using other party's norms/values against them. Show inconsistency between their beliefs/actions
|
|
114
|
+
- The Similarity Principle: We trust and cooperate more with people we see as “similar” to us or part of the same “group.” Familiarity builds safety and connection.
|
|
115
|
+
- We naturally like and trust people who reflect our attitudes, beliefs, values, or communication style—even small cues of similarity (like shared language or tone) trigger a stronger bond.
|
|
116
|
+
- Just asking to “cut the line” gives you a 60% success rate. While adding a reason increases the success rate to 90%. Moreover the reason doesn’t even have to make sense.
|
|
117
|
+
- The minute you say ‘but,’ the other party thinks, ‘Everything you just said doesn’t count.
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Never Split the Difference — Principles Reference
|
|
2
|
+
|
|
3
|
+
Sourced from Elliot's comprehensive notes on Chris Voss's *Never Split the Difference*.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Voice & Tone
|
|
8
|
+
|
|
9
|
+
- **3 voice tones** (in order of usefulness):
|
|
10
|
+
1. **Positive/Playful** *(most useful)*: Smile while talking. Puts people in a positive frame of
|
|
11
|
+
mind — they think faster and problem-solve more readily.
|
|
12
|
+
2. **Calm/Downward** *(authority)*: Slow, clear, downward inflection. Conveys "I've got this."
|
|
13
|
+
Use when something is not up for discussion.
|
|
14
|
+
3. **Direct/Assertive** *(avoid)*: Signals dominance. Most people push back against it.
|
|
15
|
+
- Upward inflection invites response and signals uncertainty. Use intentionally.
|
|
16
|
+
- Slow it down. Going too fast makes people feel unheard.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Listening & Rapport
|
|
21
|
+
|
|
22
|
+
- **Make understanding the other person your singular purpose.** This quiets both their inner
|
|
23
|
+
voice and yours.
|
|
24
|
+
- **Mirroring**: Repeat the last 3 words (or 3 most important words) of what they said. Gets the
|
|
25
|
+
speaker to elaborate. Always pause and let them respond after.
|
|
26
|
+
- **Being right isn't the goal — having the right mindset is.**
|
|
27
|
+
- **Ask people for help.** Everyone wants to help. Especially ask people who don't like you.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Labeling
|
|
32
|
+
|
|
33
|
+
- Identify and acknowledge the other party's emotions to build rapport and guide the conversation.
|
|
34
|
+
- Use: *"It sounds like…"* / *"It seems like…"* / *"It looks like…"*
|
|
35
|
+
- **Never use "I"** — it sounds selfish and shifts focus to you.
|
|
36
|
+
- Emotions have two levels: the **presenting behavior** (visible) and the **underlying feeling**
|
|
37
|
+
(what actually drives behavior). Labeling surfaces the underlying feeling.
|
|
38
|
+
- **Label negatives first.** Acknowledging fears or concerns upfront reduces their impact.
|
|
39
|
+
Ex: *"I don't want this to seem like I'm asking for too much…"* or *"This might sound
|
|
40
|
+
unreasonable…"*
|
|
41
|
+
- The fastest way to establish rapport: acknowledge the negative and diffuse it.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## The Power of "No"
|
|
46
|
+
|
|
47
|
+
- "No" is most people's default. It's the **start** of negotiation, not the end.
|
|
48
|
+
- "No" makes people feel in control — it satisfies their primal need for safety and autonomy.
|
|
49
|
+
- **Don't push for "Yes."** It makes people defensive. Go for "No" instead.
|
|
50
|
+
- How to get a "No" from someone who isn't engaging:
|
|
51
|
+
- Say something totally wrong, forcing them to correct you.
|
|
52
|
+
- Ask what they *don't* want.
|
|
53
|
+
- **Re-engagement email formula**: *"Have you given up on [project/this]?"* — forces a "No"
|
|
54
|
+
response and pulls them back in.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## "That's Right" Breakthrough
|
|
59
|
+
|
|
60
|
+
- The goal response in any negotiation. Signals the other party truly feels understood.
|
|
61
|
+
- **How to get it**: Summarize their position — their words, feelings, perspective — better than
|
|
62
|
+
they could. When they say "That's right," you've built enough trust to move forward.
|
|
63
|
+
- *"You're right"* ≠ *"That's right."* "You're right" means they want you to stop talking.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Accusation Audit
|
|
68
|
+
|
|
69
|
+
- Preemptively list every negative thing the other party might be thinking or feeling about you
|
|
70
|
+
or your ask — before they can say it.
|
|
71
|
+
- This triggers loss aversion and prepares them to jump on the first positive you offer.
|
|
72
|
+
- **Template**: *"This might sound like I'm [negative thing]. At the same time, [pivot to
|
|
73
|
+
value/ask]."*
|
|
74
|
+
- **Never use "but"** — it erases everything before it. Use "and" or pause instead.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Calibrated Questions
|
|
79
|
+
|
|
80
|
+
- Open-ended, non-yes/no questions that make the other party problem-solve *for you*.
|
|
81
|
+
- Use **how** and **what** (not "why" — it makes people defensive).
|
|
82
|
+
- Examples:
|
|
83
|
+
- *"How am I supposed to do that?"*
|
|
84
|
+
- *"What are we trying to accomplish here?"*
|
|
85
|
+
- *"How does this work for you?"*
|
|
86
|
+
- Use "why" only when asking them to defend a position that benefits you.
|
|
87
|
+
Ex: *"Why would you ever leave your current supplier?"*
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Fairness & Emotion
|
|
92
|
+
|
|
93
|
+
- Decision-making is governed by **emotion**, not rationality.
|
|
94
|
+
- When accused of being unfair: *"Let's go back to where I started treating you unfairly and fix it."*
|
|
95
|
+
- Open negotiations by stating you want to treat them fairly — sets a tone of honesty.
|
|
96
|
+
- **Loss aversion**: People take more risks to avoid loss than to realize gain. Make sure the
|
|
97
|
+
other party sees what they lose by *not* acting.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## FOMO & Urgency
|
|
102
|
+
|
|
103
|
+
- *"I wanted to bring this to you before I took it to anyone else."*
|
|
104
|
+
→ Creates urgency, makes them feel special, implies a deadline.
|
|
105
|
+
- Deadlines are often self-imposed and based on external factors. Don't feel obligated to accept
|
|
106
|
+
or reveal your deadline. If you don't know theirs, you'll bargain against yourself.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Monetary Negotiation
|
|
111
|
+
|
|
112
|
+
- **Let the other side go first** when possible — you rarely have all the facts.
|
|
113
|
+
- **Establish a range**: Anchor with a range where your floor is higher than your real target.
|
|
114
|
+
The other party will anchor to the low end.
|
|
115
|
+
- **Precise numbers feel immovable**: $126,263 feels more researched than $125,000.
|
|
116
|
+
- **Ackerman Bargaining Model**:
|
|
117
|
+
1. Set your target price.
|
|
118
|
+
2. First offer: 65% of target (extreme anchor).
|
|
119
|
+
3. Three decreasing increments: 85% → 95% → 100%.
|
|
120
|
+
4. Use empathy and different ways to say "no" to make them counter before you move.
|
|
121
|
+
5. Final offer: precise number + nonmonetary item (signals you're at your limit).
|
|
122
|
+
- **Add a surprise nonmonetary gift**: Creates reciprocity — they'll feel compelled to give back.
|
|
123
|
+
- **Pleasantly persistent on nonmonetary terms**: Can lead to monetary increase as a compromise.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Rule of 3
|
|
128
|
+
|
|
129
|
+
- Getting the other party to agree to the same thing **3 times** triples the likelihood of a
|
|
130
|
+
commitment yes (vs. a counterfeit yes).
|
|
131
|
+
- Don't repeat yourself — use labels, mirrors, or "how/what" implementation questions to get
|
|
132
|
+
3 versions of the same agreement.
|
|
133
|
+
- Asking "how" or "what" about implementation counts as a confirmation.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 3 Types of Yes
|
|
138
|
+
|
|
139
|
+
1. **Counterfeit Yes**: Avoids conflict. They're not committed.
|
|
140
|
+
2. **Confirmation Yes**: Agreement to a fact. Doesn't mean action.
|
|
141
|
+
3. **Commitment Yes**: Real agreement with intent to follow through. This is what you want.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Reading People: 3 Negotiator Types
|
|
146
|
+
|
|
147
|
+
| Type | Traits | How to Handle | Silence Means |
|
|
148
|
+
|---|---|---|---|
|
|
149
|
+
| **Assertive** | Time = money, direct, wants to be heard | Mirrors, labels, calibrated questions, "That's right" | They ran out of things to say |
|
|
150
|
+
| **Accommodator** | Values relationship, loves win-wins, talkative | Listen deeply, nudge toward action with calibrated Qs | They're angry |
|
|
151
|
+
| **Analyst** | Methodical, hates surprises, data-driven | Use clear data, minimal early questions, give thinking time | They're thinking |
|
|
152
|
+
|
|
153
|
+
- **66% chance** the other person has a different style than you. Never assume they think like you.
|
|
154
|
+
- **Black Swan Rule**: Treat others the way *they* need to be treated.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Detecting Deception
|
|
159
|
+
|
|
160
|
+
- Liars use **more words**, more **third-party pronouns** (avoiding "I"), and more **complex
|
|
161
|
+
sentences**.
|
|
162
|
+
- **Pronoun power**: Heavy use of "I/me/my" = lower power. Heavy "we/they/them" = likely a
|
|
163
|
+
key decision-maker deflecting commitment.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Leverage
|
|
168
|
+
|
|
169
|
+
- **Leverage** = ability to inflict loss and withhold gain.
|
|
170
|
+
1. **Positive**: Other side wants what you have.
|
|
171
|
+
2. **Negative**: You can damage or hurt them (loss aversion lever). Find: what are they
|
|
172
|
+
worried about? Who's their audience?
|
|
173
|
+
3. **Normative**: Use their own values/beliefs against inconsistency.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Black Swans
|
|
178
|
+
|
|
179
|
+
- Hidden, unpredictable information that changes everything. Every negotiation has at least 3.
|
|
180
|
+
- When someone seems "crazy," there's likely a black swan — they're either ill-informed, have
|
|
181
|
+
a hidden constraint, or have interests you don't know about.
|
|
182
|
+
- How to find them: Talk in person. Observe unguarded moments (start/end of meetings). Let
|
|
183
|
+
what you know guide you but not blind you. Get into their world view.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Similarity Principle
|
|
188
|
+
|
|
189
|
+
- People trust and cooperate more with those they see as similar.
|
|
190
|
+
- Find common ground — shared language, tone, values, experiences — to build bond faster.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## The Interview Question That Always Works
|
|
195
|
+
|
|
196
|
+
In any high-stakes conversation where you want them invested in your success:
|
|
197
|
+
*"What does it take to be successful here?"*
|
|
198
|
+
When someone gives you guidance, they have a personal stake in seeing you succeed.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Key Maxims
|
|
203
|
+
|
|
204
|
+
- No deal is better than a bad deal.
|
|
205
|
+
- *"How am I supposed to do that?"* instead of "No."
|
|
206
|
+
- Never say "but" — use "and" or pause.
|
|
207
|
+
- Prepare obsessively. Under pressure, you don't rise to the occasion — you fall to your highest
|
|
208
|
+
level of preparation.
|
|
209
|
+
- Just asking for something gives 60% success. Adding a reason (any reason) jumps it to 90%.
|
|
210
|
+
- The 7/38/55 Rule: 7% words, 38% tone, 55% body language/face.
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: estack:github-issue-tracker
|
|
3
|
+
description: >
|
|
4
|
+
GitHub issue tracker management. Checks all open issues the user is involved in,
|
|
5
|
+
finds related/duplicate issues, reports what changed, and recommends next steps.
|
|
6
|
+
Run anytime for a check-in — works the same whether it's the first run or a daily habit.
|
|
7
|
+
The tracker file acts as a cache to make repeat runs faster.
|
|
8
|
+
allowed-tools:
|
|
9
|
+
- Read
|
|
10
|
+
- Write
|
|
11
|
+
- Edit
|
|
12
|
+
- Bash
|
|
13
|
+
- Grep
|
|
14
|
+
- Glob
|
|
15
|
+
- AskUserQuestion
|
|
16
|
+
- Agent
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
<objective>
|
|
20
|
+
Give the user a complete, actionable update on every GitHub issue they're involved in.
|
|
21
|
+
One flow, every time — no modes, no flags. The only thing that changes between runs is
|
|
22
|
+
depth: more work when the tracker is empty or stale, less when it was just checked yesterday.
|
|
23
|
+
</objective>
|
|
24
|
+
|
|
25
|
+
<execution_context>
|
|
26
|
+
Resolve `$SKILL_DIR` from this file's location FIRST.
|
|
27
|
+
|
|
28
|
+
**Script:** `bin/tracker-tools.cjs` — handles all GitHub API calls, tracker parsing,
|
|
29
|
+
report compilation, and tracker updates. Invoke via:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
node "$SKILL_DIR/bin/tracker-tools.cjs" <command> [options]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Every script command returns a `today` field like `today's date is **2026-04-05**, ignore earlier dates`.
|
|
36
|
+
Extract the date from this string. If you see multiple `today` values in your context
|
|
37
|
+
(from earlier commands), always use the most recent one.
|
|
38
|
+
|
|
39
|
+
**stdout/stderr convention:** `compile-report` outputs the report text to stdout and
|
|
40
|
+
metadata (including `today`) to stderr. Parse accordingly.
|
|
41
|
+
|
|
42
|
+
**Tracker file:** `$HOME/OneDrive/Documents/github-tracker.md`
|
|
43
|
+
This is the AI's knowledge base and source of truth. It stores everything in full detail:
|
|
44
|
+
|
|
45
|
+
- Every tracked issue with complete context, history, and technical data
|
|
46
|
+
- Known duplicates, related issues, cross-references
|
|
47
|
+
- User's intent/goals for each issue and what to watch for
|
|
48
|
+
- History of all actions taken and events observed
|
|
49
|
+
- Config directives (excluded repos, preferences)
|
|
50
|
+
|
|
51
|
+
The tracker is written FOR the AI — keep it detailed. When the user asks questions about
|
|
52
|
+
any issue, read the tracker first. It should have enough context to answer without
|
|
53
|
+
re-fetching from GitHub. The user-facing report (Step 5a) is a separate, concise summary.
|
|
54
|
+
|
|
55
|
+
**References:**
|
|
56
|
+
|
|
57
|
+
- `references/tracker-schema.md` — tracker file format
|
|
58
|
+
- `references/result-file-schema.md` — per-issue analysis format (agents write these)
|
|
59
|
+
- `references/gh-cli-patterns.md` — gh CLI command templates
|
|
60
|
+
- `tracker-template.md` — blank tracker for first run
|
|
61
|
+
</execution_context>
|
|
62
|
+
|
|
63
|
+
<flow>
|
|
64
|
+
|
|
65
|
+
The skill runs the same steps every time. The tracker determines depth — an empty
|
|
66
|
+
tracker means everything is new and needs deep analysis. A fresh tracker means most
|
|
67
|
+
issues just need a quick diff check.
|
|
68
|
+
|
|
69
|
+
## Step 0: Startup
|
|
70
|
+
|
|
71
|
+
1. Set `$TRACKER_PATH` to `$HOME/OneDrive/Documents/github-tracker.md`.
|
|
72
|
+
2. Run startup:
|
|
73
|
+
```bash
|
|
74
|
+
node "$SKILL_DIR/bin/tracker-tools.cjs" startup --tracker "$TRACKER_PATH"
|
|
75
|
+
```
|
|
76
|
+
3. Store the full response as `$STARTUP`. The script handles auth checking and temp dir
|
|
77
|
+
creation. If `auth` is false, show the user the `error` message from the output and STOP.
|
|
78
|
+
If `search_errors` is non-empty, warn the user that some discovery queries failed —
|
|
79
|
+
the results may be incomplete.
|
|
80
|
+
4. Extract `$TODAY` (the YYYY-MM-DD date) from the `$STARTUP.today` string — use this as today's date for everything.
|
|
81
|
+
5. Extract `$TEMP_DIR` from `$STARTUP.temp_dir`.
|
|
82
|
+
6. Extract `$CONFIG` from `$STARTUP.config`. This is the user's plain English config
|
|
83
|
+
(excluded repos, preferences, etc.) parsed from the tracker's `## Config` section.
|
|
84
|
+
If null, the tracker has no config yet — you'll ask the user in Step 1.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Step 1: Discover
|
|
89
|
+
|
|
90
|
+
**Goal:** Build the complete list of issues to analyze this run.
|
|
91
|
+
|
|
92
|
+
Sources (all from `$STARTUP`):
|
|
93
|
+
|
|
94
|
+
- `tracker_data.active_issues` — issues already tracked
|
|
95
|
+
- `new_issues` — open issues involving the user that aren't in the tracker yet
|
|
96
|
+
- `reopened_issues` — issues previously closed that are now open again
|
|
97
|
+
- `recently_closed` — issues closed since last check
|
|
98
|
+
|
|
99
|
+
**Check `$CONFIG` from startup.** If it contains directives (excluded repos, preferences),
|
|
100
|
+
apply them when filtering issues throughout this step. For example, if config says
|
|
101
|
+
"Excluded repos: ElliotDrel/*", skip any issues from repos owned by ElliotDrel.
|
|
102
|
+
|
|
103
|
+
If `$CONFIG` is null (tracker has no Config section), ask the user if they want to set
|
|
104
|
+
one up (which repos to track/exclude). The agent writes Config directly to the tracker
|
|
105
|
+
file via the Edit tool (not through the script). The script reads Config; the agent writes it.
|
|
106
|
+
|
|
107
|
+
**If tracker doesn't exist or has no issues** (first run):
|
|
108
|
+
|
|
109
|
+
- Show `new_issues` grouped by repo. List which repos were found.
|
|
110
|
+
- Ask: "Which repos do you want to track? You can also exclude any."
|
|
111
|
+
- Save their choices to the `## Config` section by writing directly to the tracker via Edit.
|
|
112
|
+
- Then ask which specific issues to track from the included repos.
|
|
113
|
+
|
|
114
|
+
**If tracker exists with issues:**
|
|
115
|
+
|
|
116
|
+
- Active issues are automatically included (unless excluded by config).
|
|
117
|
+
- If `new_issues` is non-empty and passes config filters, tell the user what was
|
|
118
|
+
found and add them to the analysis list.
|
|
119
|
+
- If `reopened_issues` is non-empty, add them back to the active analysis list and
|
|
120
|
+
note in your report that they were reopened (state changed from closed to open).
|
|
121
|
+
The agent should manually move reopened issues from the Closed section back to
|
|
122
|
+
Active in the tracker, preserving any context from the closed entry.
|
|
123
|
+
|
|
124
|
+
Write the final issue list to `$TEMP_DIR/issues-to-fetch.json` for the fetch command.
|
|
125
|
+
Each entry needs: `owner`, `repo`, `number`, `title`, `role`, `last_check_date`
|
|
126
|
+
(null for new issues), `known_dupes` (from tracker or empty), `upstream` (from tracker or null).
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Step 2: Connect
|
|
131
|
+
|
|
132
|
+
**Goal:** Fetch current data for every issue and find related/duplicate issues.
|
|
133
|
+
|
|
134
|
+
### 2a: Fetch all issue data
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
node "$SKILL_DIR/bin/tracker-tools.cjs" fetch-issues --temp-dir "$TEMP_DIR" --issues "$TEMP_DIR/issues-to-fetch.json"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
This fetches metadata, body, comments, dupe states, upstream state, cross-references,
|
|
141
|
+
and URLs for every issue in parallel. One `raw-OWNER-REPO-NUMBER.json` per issue.
|
|
142
|
+
|
|
143
|
+
### 2b: Analyze issues in batches
|
|
144
|
+
|
|
145
|
+
Read `references/result-file-schema.md` and `references/gh-cli-patterns.md` from `$SKILL_DIR`.
|
|
146
|
+
|
|
147
|
+
Group issues into batches of ~5. Spawn **one Agent per batch**. Each agent:
|
|
148
|
+
|
|
149
|
+
1. Reads the raw JSON files for its batch issues.
|
|
150
|
+
2. Searches for duplicates/related issues using `gh api` search queries.
|
|
151
|
+
3. Writes one result file per issue to `$TEMP_DIR/issue-OWNER-REPO-NUMBER.md` following
|
|
152
|
+
the format in `references/result-file-schema.md`.
|
|
153
|
+
|
|
154
|
+
**Depth control based on `last_check_date`:**
|
|
155
|
+
|
|
156
|
+
The duplicate/related search always runs, but the scope changes:
|
|
157
|
+
|
|
158
|
+
- **`null` (new issue):** Deep analysis. Read full comment history. Search broadly for
|
|
159
|
+
duplicates by symptoms, error messages, and keywords.
|
|
160
|
+
- **Checked within the last 7 days:** Shallow pass. Only read new comments since last check.
|
|
161
|
+
Only check the state of already-known duplicates/related issues. Only search for new
|
|
162
|
+
duplicates among issues created since the last check date.
|
|
163
|
+
- **Checked more than 7 days ago:** Medium depth. Read comments since last check. Re-scan
|
|
164
|
+
for new duplicates across a wider window. Check state of known duplicates.
|
|
165
|
+
|
|
166
|
+
**Fill in missing data:** For each issue, compare what the tracker has against what the
|
|
167
|
+
API returned. If the tracker entry is missing factual fields (Role description, What to check,
|
|
168
|
+
Workaround, Key technical data, etc.), the agent should fill them in from the API data.
|
|
169
|
+
This means every run progressively improves the tracker's completeness. Include any
|
|
170
|
+
newly populated fields in the result file's `## Tracker Updates` section.
|
|
171
|
+
|
|
172
|
+
**Exception — fields that require user input:** The **Goal** field must be asked, not
|
|
173
|
+
guessed. If an issue is missing a Goal, flag it in the result file so Step 5b can
|
|
174
|
+
collect them. Same for Config — never assume repo exclusions or preferences, always ask.
|
|
175
|
+
|
|
176
|
+
Each agent prompt must include:
|
|
177
|
+
|
|
178
|
+
- Raw data file paths for its batch
|
|
179
|
+
- The existing tracker entry data for each issue (so the agent can identify gaps)
|
|
180
|
+
- `owner`, `repo`, `number`, `title`, `role`, `last_check_date`, `username`
|
|
181
|
+
- `cross_references` and `urls` from raw JSON
|
|
182
|
+
- All tracked issue numbers (to filter dupe search results)
|
|
183
|
+
- `$TODAY` as today's date (for history entries)
|
|
184
|
+
- Instruction to read `$SKILL_DIR/references/result-file-schema.md` for format and quality guidance
|
|
185
|
+
|
|
186
|
+
After all agents finish, verify file count:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
ls "$TEMP_DIR"/issue-*.md 2>/dev/null | wc -l
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Step 3: Save
|
|
195
|
+
|
|
196
|
+
**Goal:** Immediately persist all factual data from the analysis to the tracker.
|
|
197
|
+
|
|
198
|
+
This step is **mandatory and automatic** — no user permission needed. The analysis just
|
|
199
|
+
finished and the result files contain factual data from the GitHub API. This step caches
|
|
200
|
+
that data in the tracker so that even if the conversation is interrupted after this point,
|
|
201
|
+
the tracker has the latest information.
|
|
202
|
+
|
|
203
|
+
**If this is the first run** (no tracker existed):
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
node "$SKILL_DIR/bin/tracker-tools.cjs" build-tracker --temp-dir "$TEMP_DIR" --template "$SKILL_DIR/tracker-template.md" --username "$USERNAME" --tracker "$TRACKER_PATH" --date "$TODAY"
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**If the tracker already exists:**
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
node "$SKILL_DIR/bin/tracker-tools.cjs" update-tracker --tracker "$TRACKER_PATH" --temp-dir "$TEMP_DIR" --date "$TODAY"
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
This saves: status dates, new comments, new duplicates, filled data gaps, state changes.
|
|
216
|
+
|
|
217
|
+
**Every tracker update must be logged in History.** Every change the script makes to the
|
|
218
|
+
tracker — new fields populated, status updates, new duplicates found — gets a history
|
|
219
|
+
entry on the affected issue. The History section is an append-only audit trail. Examples:
|
|
220
|
+
- `**2026-04-06:** Check-in: no new activity`
|
|
221
|
+
- `**2026-04-06:** Filled in missing Workaround and Key technical data fields`
|
|
222
|
+
- `**2026-04-06:** Found new duplicate #45123`
|
|
223
|
+
- `**2026-04-06:** Status changed: open → closed`
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Step 4: Advise
|
|
228
|
+
|
|
229
|
+
**Goal:** Identify concrete next steps for each issue before presenting the report.
|
|
230
|
+
|
|
231
|
+
Read through all result files in `$TEMP_DIR/issue-*.md`. For each issue, use the
|
|
232
|
+
**Goal** field from the tracker (e.g., "Get my fix merged", "Get maintainer to respond",
|
|
233
|
+
"Monitor for upstream fix") to tailor recommendations. The goal tells you what success
|
|
234
|
+
looks like — next steps should move toward that outcome.
|
|
235
|
+
|
|
236
|
+
For each issue, determine:
|
|
237
|
+
|
|
238
|
+
- Given the user's goal, what action would move this issue forward?
|
|
239
|
+
- Are there related issues where commenting with a link to the user's issue would help?
|
|
240
|
+
- Are there duplicates the user should reference or link to?
|
|
241
|
+
- Is there a PR fixing the issue that needs testing or review?
|
|
242
|
+
|
|
243
|
+
Collect all next steps. These get included in the report output.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Step 5: Report and Act
|
|
248
|
+
|
|
249
|
+
**Goal:** Show the user what's going on and help them take action.
|
|
250
|
+
|
|
251
|
+
### 5a: Report
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
node "$SKILL_DIR/bin/tracker-tools.cjs" compile-report --temp-dir "$TEMP_DIR" --date "$TODAY"
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
The script outputs the report text to stdout and metadata (including `today`) to stderr.
|
|
258
|
+
Use the stdout output as raw data, but present the report to the user in YOUR response
|
|
259
|
+
using the format below.
|
|
260
|
+
|
|
261
|
+
**Report format — keep it tight and actionable:**
|
|
262
|
+
|
|
263
|
+
The user wants to know three things: what changed, what's the update, what do I do.
|
|
264
|
+
Skip GitHub spam (bot comments, auto-close noise, label changes). Use bullets, not tables.
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
# Check-In — {date}
|
|
268
|
+
|
|
269
|
+
## What Changed
|
|
270
|
+
- bullet per issue that had real activity (new human comments, state changes, PRs)
|
|
271
|
+
- if nothing changed, say "No new activity across N tracked issues."
|
|
272
|
+
|
|
273
|
+
## New Issues Found
|
|
274
|
+
- bullet per newly discovered issue (if any, after config filtering)
|
|
275
|
+
|
|
276
|
+
## Recommended Actions
|
|
277
|
+
### Do Today
|
|
278
|
+
- specific action items the user should take right now
|
|
279
|
+
### Watch For
|
|
280
|
+
- things that might need attention soon but not today
|
|
281
|
+
### No Action Needed
|
|
282
|
+
- brief grouped summary of issues that are just waiting (e.g., "15 google-tools-mcp issues — no maintainer response")
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Do NOT list every single issue with its full status. Only mention issues where
|
|
286
|
+
something happened or something needs to happen. Group quiet issues into one line.
|
|
287
|
+
|
|
288
|
+
### 5b: Collect missing Goals
|
|
289
|
+
|
|
290
|
+
If result files flagged issues without a Goal, present them to the user grouped by repo
|
|
291
|
+
and ask what their intent is for each. Example: "These issues don't have a goal set
|
|
292
|
+
yet — what are you hoping for with each?"
|
|
293
|
+
|
|
294
|
+
Once the user provides goals, write them directly to the tracker file via the Edit tool
|
|
295
|
+
(not through the script). Add a history entry for each goal set:
|
|
296
|
+
- `**2026-04-06:** Goal set: "Get maintainer to respond"`
|
|
297
|
+
|
|
298
|
+
### 5c: Act on next steps
|
|
299
|
+
|
|
300
|
+
Present actionable items to the user:
|
|
301
|
+
|
|
302
|
+
- If there are comments to post, issues to link, or other actions: ask the user
|
|
303
|
+
"Want me to act on these next steps?" and list what you'd do.
|
|
304
|
+
- If the user approves, execute the actions (post comments via `gh issue comment`, etc.)
|
|
305
|
+
and write action results directly to the tracker via the Edit tool. Add history entries:
|
|
306
|
+
- `**2026-04-06:** Posted comment on #1234 linking to duplicate #5678`
|
|
307
|
+
- `**2026-04-06:** Added Config section to tracker (excluded: ElliotDrel/*)`
|
|
308
|
+
- If no actions needed, just say so.
|
|
309
|
+
|
|
310
|
+
### 5d: Cleanup
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
rm -rf "$TEMP_DIR"
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
</flow>
|
|
317
|
+
|
|
318
|
+
<context>
|
|
319
|
+
$ARGUMENTS
|
|
320
|
+
</context>
|