skilldrop-cli 1.8.0 → 1.9.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/README.md +2 -1
- package/catalogue.json +9 -1
- package/model-routing.json +8 -0
- package/package.json +1 -1
- package/packs/startup-legal/pack.json +58 -0
- package/packs/startup-legal/skills/cap-table/SKILL.md +131 -0
- package/packs/startup-legal/skills/cap-table/evals/eval_queries.json +30 -0
- package/packs/startup-legal/skills/cap-table/evals/evals.json +46 -0
- package/packs/startup-legal/skills/cap-table/examples/seed-to-series-a.md +81 -0
- package/packs/startup-legal/skills/cap-table/manifest.json +34 -0
- package/packs/startup-legal/skills/cap-table/scripts/cap_table.py +344 -0
- package/packs/startup-legal/skills/cap-table/templates/cap.json +23 -0
- package/packs/startup-legal/skills/contract-check/SKILL.md +118 -0
- package/packs/startup-legal/skills/contract-check/evals/eval_queries.json +30 -0
- package/packs/startup-legal/skills/contract-check/evals/evals.json +46 -0
- package/packs/startup-legal/skills/contract-check/evals/files/1/saas-agreement.md +68 -0
- package/packs/startup-legal/skills/contract-check/evals/files/2/consulting-agreement.md +64 -0
- package/packs/startup-legal/skills/contract-check/evals/files/3/reseller-agreement.md +69 -0
- package/packs/startup-legal/skills/contract-check/examples/inputs/saas-agreement.md +68 -0
- package/packs/startup-legal/skills/contract-check/examples/saas-agreement.md +72 -0
- package/packs/startup-legal/skills/contract-check/manifest.json +34 -0
- package/packs/startup-legal/skills/contract-check/reference.md +109 -0
- package/packs/startup-legal/skills/contract-check/scripts/contract_check.py +413 -0
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ A good result runs your lint, typecheck and tests through a gate script, then a
|
|
|
51
51
|
In Claude Code you can use the plugin marketplace instead: run `/plugin marketplace add sananthanarayan/skilldrop`, then `/plugin install dev-team@skilldrop`. [Every install route](guides/how-to/install.md) covers single skills, other IDEs, loops, reviewer subagents, profiles and updates.
|
|
52
52
|
|
|
53
53
|
<details>
|
|
54
|
-
<summary><b>Choose your role:</b>
|
|
54
|
+
<summary><b>Choose your role:</b> 24 packs, from product management and architecture to SRE, GRC, job applications, building design and startup legal</summary>
|
|
55
55
|
|
|
56
56
|
Install one pack. Every role pack also brings `core` (intake, critique, review council, output hygiene, and the decisions behind a codebase). Each pack page has a starter prompt to paste and says what a good result looks like.
|
|
57
57
|
|
|
@@ -77,6 +77,7 @@ Install one pack. Every role pack also brings `core` (intake, critique, review c
|
|
|
77
77
|
- **Running a team on shifts:** `operations-manager` — a weekly rota checked for cover, hours, rest between shifts and days in a row, handed back in your own sheet. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/operations-manager/)
|
|
78
78
|
- **Running events:** `event-planner` — a seating plan where every together, keep-apart and access request holds, and a run of show with no room or person booked twice, both checked and drawn. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/event-planner/)
|
|
79
79
|
- **Furnishing rooms:** `interior-designer` — a dimensioned furniture plan for one room, checked for door swings, bed and chair clearances, a clear route to everything and turning space where it's required. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/interior-designer/)
|
|
80
|
+
- **Startup founders:** `startup-legal` — an agreement checked before you sign it, with wording to push back on, and your cap table through SAFEs, notes and a priced round. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/startup-legal/)
|
|
80
81
|
- **Everyone:** `core` on its own. [Open pack](https://sananthanarayan.github.io/skilldrop/packs/core/)
|
|
81
82
|
|
|
82
83
|
</details>
|
package/catalogue.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "RFC-0034. The catalogue index: pack display order and the outcome browse axis (RFC-0026). Pack metadata lives in packs/<pack>/pack.json; membership is the folders — a skill is in a pack because it sits at packs/<pack>/skills/<name>/.",
|
|
3
3
|
"version": "1.0.0",
|
|
4
|
-
"packs": ["core", "solution-architect", "product-manager", "dev-team", "sre-oncall", "stakeholder-comms", "design", "ai-engineering", "api-builder", "converters", "experience-design", "research", "trackers", "data-analytics", "grc", "infra-as-code", "frontend", "skill-engineering", "career", "civil-architect", "operations-manager", "event-planner", "interior-designer"],
|
|
4
|
+
"packs": ["core", "solution-architect", "product-manager", "dev-team", "sre-oncall", "stakeholder-comms", "design", "ai-engineering", "api-builder", "converters", "experience-design", "research", "trackers", "data-analytics", "grc", "infra-as-code", "frontend", "skill-engineering", "career", "civil-architect", "operations-manager", "event-planner", "interior-designer", "startup-legal"],
|
|
5
5
|
"outcomes": {
|
|
6
6
|
"decide-what-to-build": {
|
|
7
7
|
"for": "Product managers · founders · strategists",
|
|
@@ -235,6 +235,14 @@
|
|
|
235
235
|
"skills": [
|
|
236
236
|
"furniture-layout"
|
|
237
237
|
]
|
|
238
|
+
},
|
|
239
|
+
"handle-the-legal-basics": {
|
|
240
|
+
"for": "Founders without a lawyer on retainer",
|
|
241
|
+
"description": "Sign agreements you understand and know what a round does to your ownership, with a clear line on what is worth paying a lawyer for.",
|
|
242
|
+
"skills": [
|
|
243
|
+
"contract-check",
|
|
244
|
+
"cap-table"
|
|
245
|
+
]
|
|
238
246
|
}
|
|
239
247
|
},
|
|
240
248
|
"retired": {
|
package/model-routing.json
CHANGED
|
@@ -194,6 +194,10 @@
|
|
|
194
194
|
"tier": "heavy",
|
|
195
195
|
"rationale": "Weighted multi-option judgment with a committal recommendation — cheaper models mis-weight costs, inflate benefits, and miss the flip-assumption. Never downgrade."
|
|
196
196
|
},
|
|
197
|
+
"cap-table": {
|
|
198
|
+
"tier": "standard",
|
|
199
|
+
"rationale": "Turning SAFEs, notes and a term sheet into the script's input and explaining the result is bounded; the script does the conversion math."
|
|
200
|
+
},
|
|
197
201
|
"capacity-cost-model": {
|
|
198
202
|
"tier": "standard",
|
|
199
203
|
"rationale": "Quantitative projection from a demand model against a fixed cost catalog. Headroom and scaling-cliff judgment is bounded by the reference; escalate via ambiguous-input on novel architectures."
|
|
@@ -210,6 +214,10 @@
|
|
|
210
214
|
"tier": "standard",
|
|
211
215
|
"rationale": "Rewrites source text from user needs under fixed plain-language rules, with a script for the readability numbers. Prioritising questions needs judgment, but facts come from the source."
|
|
212
216
|
},
|
|
217
|
+
"contract-check": {
|
|
218
|
+
"tier": "heavy",
|
|
219
|
+
"rationale": "The mechanical faults come from the script; reading every clause from the founder's side and writing the wording to ask for is legal judgment."
|
|
220
|
+
},
|
|
213
221
|
"council-review": {
|
|
214
222
|
"tier": "heavy",
|
|
215
223
|
"rationale": "Multi-perspective deliberation + weighted reconciliation across distinct expert seats. Cheaper models collapse the seats into one voice and either manufacture or miss the real cruxes. Never downgrade."
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skilldrop-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "Portable AI-agent skills, measured against the agent without them. ADRs, PRDs, runbooks, decks and reviews, installable into Claude Code, Cursor, Kiro, and any IDE that takes custom instructions. One command per skill or per role-based pack.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Sanjay Ananthanarayan",
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Legal groundwork for a startup that can't yet pay a lawyer for everything: an agreement checked before you sign it (blanks, broken cross-references, mismatched amounts, the renewal date, and the clauses that hurt a small company, with wording to ask for), and your cap table modelled through SAFEs, notes and a priced round. Each says what is worth a lawyer's hour.",
|
|
3
|
+
"display_name": "Startup legal",
|
|
4
|
+
"keywords": [
|
|
5
|
+
"legal",
|
|
6
|
+
"startup",
|
|
7
|
+
"founder",
|
|
8
|
+
"contract review",
|
|
9
|
+
"NDA",
|
|
10
|
+
"SAFE",
|
|
11
|
+
"cap table",
|
|
12
|
+
"dilution"
|
|
13
|
+
],
|
|
14
|
+
"links": {
|
|
15
|
+
"documentation": "https://sananthanarayan.github.io/skilldrop/packs/startup-legal/"
|
|
16
|
+
},
|
|
17
|
+
"maintainers": [
|
|
18
|
+
{
|
|
19
|
+
"name": "sananthanarayan"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"first-value": {
|
|
23
|
+
"audience-posture": "non-technical",
|
|
24
|
+
"prerequisites": [
|
|
25
|
+
"The agreement you've been sent, as a Word, Markdown or text file",
|
|
26
|
+
"Python 3 on the machine, which the checks run on"
|
|
27
|
+
],
|
|
28
|
+
"starter-task": "Check an agreement before you sign it",
|
|
29
|
+
"starter-prompt": "We're the customer in this SaaS agreement (agreement.docx), and the first year ends on 1 July 2027. Review it before I sign: what's broken, what should I push back on, and when do we have to give notice if we don't want it to renew?",
|
|
30
|
+
"verification": "contract-check opens with a verdict and the three things that matter most, lists each mechanical fault with its clause number (blanks, references to clauses or exhibits that don't exist, amounts whose words and figures disagree), gives wording to ask for on each clause that hurts you, and gives the renewal notice deadline as a date.",
|
|
31
|
+
"recovery": "If contract-check does not activate, ask for it by name (\"use contract-check\"). If your agreement is a PDF, save it as Word or text first."
|
|
32
|
+
},
|
|
33
|
+
"requires": [
|
|
34
|
+
"core"
|
|
35
|
+
],
|
|
36
|
+
"journey": {
|
|
37
|
+
"when": "You're a founder without a lawyer on retainer, and an agreement, a round or a launch is coming.",
|
|
38
|
+
"you_bring": [
|
|
39
|
+
"the agreement you've been sent, or your own template",
|
|
40
|
+
"your cap table, SAFEs and any term sheet"
|
|
41
|
+
],
|
|
42
|
+
"steps": [
|
|
43
|
+
{
|
|
44
|
+
"skill": "contract-check",
|
|
45
|
+
"you_do": "Give it the agreement and say which side you're on.",
|
|
46
|
+
"you_get": "A verdict, the fixes to ask for with wording, every mechanical fault with its clause, and the dates to diarise.",
|
|
47
|
+
"decide": "Sign, send the redline, or take the one flagged clause to a lawyer."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"skill": "cap-table",
|
|
51
|
+
"you_do": "Give it your shareholders, SAFEs, notes and the term sheet.",
|
|
52
|
+
"you_get": "What each founder and investor owns after the round, what each SAFE converted at, and what the pool top-up cost you.",
|
|
53
|
+
"decide": "Which valuation and pool terms to negotiate for."
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"you_end_with": "Agreements you understand before signing, and a cap table you can defend in a negotiation."
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cap-table
|
|
3
|
+
description: Work out who owns what in a startup through its SAFEs, convertible notes and a priced round — each SAFE's and note's conversion price and whether its cap or discount applied, the price per share, the option-pool top-up and who it dilutes, the fully diluted cap table before and after, and founder ownership at other valuations — computed by a script that checks the post-money and the 100 % total. Use when a founder asks "how much of my company will I own after this round", "model our SAFEs converting", "what does this term sheet do to our cap table", "how much have I given away in SAFEs", or "compare a $12M and a $16M pre-money".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# cap-table
|
|
7
|
+
|
|
8
|
+
The numbers a founder needs before signing a term sheet or another SAFE: what each investor
|
|
9
|
+
ends up with, what the option pool top-up really costs, and how much of the company the
|
|
10
|
+
founders keep. A capable agent gets the simple case right and the real one wrong: a stack of
|
|
11
|
+
post-money SAFEs at different caps, a pre-money SAFE beside them, a note accruing interest,
|
|
12
|
+
and a pool top-up the lead investor wants in the pre-money. A script solves the round exactly,
|
|
13
|
+
including the circularity where the SAFEs' shares depend on the price and the price on the
|
|
14
|
+
SAFEs, and checks that the post-money equals price × shares and ownership sums to 100 %.
|
|
15
|
+
|
|
16
|
+
## How to respond
|
|
17
|
+
|
|
18
|
+
**These rules come before the steps and outrank them:**
|
|
19
|
+
|
|
20
|
+
- **Answer the founder first, in a founder's words.** Lead with the number they asked for:
|
|
21
|
+
✅ *"After the round you each own 28.3 %, down from 45 % today. The pool top-up costs you
|
|
22
|
+
about $1.1M of the headline $16M."* Never mention a script, a JSON file, this skill's name
|
|
23
|
+
or a path inside its folder, never call your work "the check" or "a tool", and never show
|
|
24
|
+
a temporary path.
|
|
25
|
+
- **Every number in the reply comes from the computed cap table,** run on the final inputs.
|
|
26
|
+
Never do conversion arithmetic in your head, and never round a percentage the table didn't.
|
|
27
|
+
- **Say which terms you assumed, and which way each one cuts.** A SAFE's type (post-money or
|
|
28
|
+
pre-money), whether the pool top-up sits in the pre-money, and when interest stops are the
|
|
29
|
+
terms that move founder ownership the most. When the founder didn't say, use the default
|
|
30
|
+
below, tag it `[assumption]`, and give the figure under the other reading when it changes
|
|
31
|
+
the founder's stake by more than half a point.
|
|
32
|
+
- **Name what is worth a lawyer's hour, and only that.** One or two lines, specific to this
|
|
33
|
+
round: ✅ *"Before you sign: have counsel confirm whether the 10 % pool is pre- or
|
|
34
|
+
post-money in the term sheet — it moves you by 2.4 points."* Never refuse, never open with
|
|
35
|
+
a disclaimer, never pad with "this is not legal advice".
|
|
36
|
+
- **Working files stay out of sight.** Write the input to a private folder made for this run
|
|
37
|
+
(`mktemp -d`, never a fixed path) and delete it before replying. A spreadsheet the founder
|
|
38
|
+
asked for goes in their working directory under a plain name. Never overwrite a file they
|
|
39
|
+
gave you.
|
|
40
|
+
- **Their cap table comes back in its own shape.** Given a spreadsheet or table, return the
|
|
41
|
+
after-round table with the same columns and holder order, with new rows added at the end.
|
|
42
|
+
|
|
43
|
+
1. **Gather the inputs.** From the conversation or the files named (a cap table export, a
|
|
44
|
+
SAFE, a term sheet):
|
|
45
|
+
- **Shareholders:** each holder's shares today (founders, employees, early common).
|
|
46
|
+
- **Options:** granted and outstanding, and the unissued pool.
|
|
47
|
+
- **Each SAFE:** amount, valuation cap, discount, post-money or pre-money, MFN.
|
|
48
|
+
- **Each note:** principal, interest rate, issue date, cap, discount.
|
|
49
|
+
- **The round,** if there is one: pre-money valuation, each new investor's amount, the
|
|
50
|
+
option pool target after the round, the closing date.
|
|
51
|
+
|
|
52
|
+
Defaults when unsaid: a SAFE signed from 2018 on is post-money (YC's current form); a SAFE
|
|
53
|
+
with only a cap converts at the cap; the pool target is in the pre-money (the usual term
|
|
54
|
+
sheet); note interest is simple and runs to closing. Ask at most two questions, and only
|
|
55
|
+
for a missing share count or SAFE amount, which no default can stand in for.
|
|
56
|
+
|
|
57
|
+
2. **Write the input** in the shape of [`templates/cap.json`](templates/cap.json): `holders`,
|
|
58
|
+
`options`, `safes` (with `type`: `post` or `pre`), `notes`, and `round`. Discounts and the
|
|
59
|
+
pool target are fractions (`0.2`) or percents (`20`).
|
|
60
|
+
|
|
61
|
+
3. **Run it.**
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
work=$(mktemp -d 2>/dev/null || mktemp -d ./.work.XXXXXX) # a private folder for this run only
|
|
65
|
+
# Claude Code
|
|
66
|
+
python3 "${CLAUDE_SKILL_DIR}/scripts/cap_table.py" "$work/cap.json" --scenarios 12m,16m,20m
|
|
67
|
+
# Other IDEs (from the skill folder); --csv writes the after-round table for a spreadsheet
|
|
68
|
+
python3 scripts/cap_table.py "$work/cap.json" --csv cap-table-after-series-a.csv
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Exit 0 means computed, 1 means a check failed or the round can't settle (the SAFEs' caps
|
|
72
|
+
leave no room at that valuation, which is itself the answer), and 2 means the input can't
|
|
73
|
+
be read. Read every `WARN`: an MFN SAFE with no terms of its own, interest left out for a
|
|
74
|
+
missing date.
|
|
75
|
+
|
|
76
|
+
4. **Run it again for each assumption that matters.** Flip the SAFE type, or move the pool
|
|
77
|
+
to post-money, and keep the figures from both runs for the reply.
|
|
78
|
+
|
|
79
|
+
5. **Reply in this order:**
|
|
80
|
+
1. **The answer** to what they asked, in one or two sentences, with each founder's stake
|
|
81
|
+
before and after.
|
|
82
|
+
2. **The cap table after the round** as a table: holder, shares, percent.
|
|
83
|
+
3. **What each SAFE and note converted at,** and whether its cap or its discount set the price.
|
|
84
|
+
4. **What the pool top-up costs the existing holders:** the headline pre-money against the
|
|
85
|
+
effective one.
|
|
86
|
+
5. **Other valuations,** when they asked or when the round is being negotiated.
|
|
87
|
+
6. **Assumptions,** one line each, with what changes under the other reading.
|
|
88
|
+
7. **What to have a lawyer confirm,** one or two lines.
|
|
89
|
+
|
|
90
|
+
**Non-interactive runs** (subagent, CI, headless): unsaid terms take the defaults above, each
|
|
91
|
+
tagged `[assumption]`. With no share counts at all, emit `BLOCKED: need each shareholder's
|
|
92
|
+
shares (or the cap table export) and each SAFE's amount and cap`.
|
|
93
|
+
|
|
94
|
+
## Useful references in this skill
|
|
95
|
+
|
|
96
|
+
- [`templates/cap.json`](templates/cap.json) — the input: two founders, a pool, three SAFEs of mixed types, a note and a Series A
|
|
97
|
+
- [`scripts/cap_table.py`](scripts/cap_table.py) — solves the round, conversion by cap or discount, pool top-up, scenarios, and checks the totals
|
|
98
|
+
- [`examples/seed-to-series-a.md`](examples/seed-to-series-a.md) — worked example: three SAFEs and a note into a Series A, and what the pool top-up really cost
|
|
99
|
+
|
|
100
|
+
## Quality bar
|
|
101
|
+
|
|
102
|
+
- **Every figure comes from the computed table,** and the post-money equals price × fully diluted shares.
|
|
103
|
+
- **Each SAFE and note shows its conversion price and what set it,** cap or discount.
|
|
104
|
+
- **The pool top-up's cost is stated in money,** not only in shares.
|
|
105
|
+
- **Every unsaid term is a stated assumption,** with the other reading's figure when it moves the founders by more than half a point.
|
|
106
|
+
- **The reply leads with the founders' ownership,** in plain words, with no mention of scripts or files.
|
|
107
|
+
- **At most two lawyer lines,** each specific to this round.
|
|
108
|
+
|
|
109
|
+
## When to use this skill
|
|
110
|
+
|
|
111
|
+
- ✅ A term sheet arrived and the founders want to know what they keep
|
|
112
|
+
- ✅ Raising another SAFE and checking what the stack already gives away
|
|
113
|
+
- ✅ Comparing two offers, or two valuations, on founder ownership
|
|
114
|
+
- ✅ Explaining to a co-founder or an early employee what the round does to their stake
|
|
115
|
+
|
|
116
|
+
## When NOT to use this skill
|
|
117
|
+
|
|
118
|
+
- ❌ Valuing the company: this takes the valuation as given
|
|
119
|
+
- ❌ Tax on options or shares (83(b) elections, ISOs, EMI schemes): ask a tax adviser
|
|
120
|
+
- ❌ Liquidation waterfalls on an exit: this models ownership, not who is paid first in a sale
|
|
121
|
+
- ❌ Drafting the SAFE or the term sheet itself
|
|
122
|
+
|
|
123
|
+
## Anti-patterns to avoid
|
|
124
|
+
|
|
125
|
+
- ❌ **Treating a post-money SAFE like a pre-money one.** A $500k post-money SAFE at an $8M cap is 6.25 % before the round; under the old pre-money form it is less, and founders bear the difference.
|
|
126
|
+
- ❌ **Forgetting the pool top-up comes out of the founders.** A 10 % post-money pool in the pre-money turns a $16M headline into about $14.9M for the existing holders.
|
|
127
|
+
- ❌ **Converting a note on its principal.** Eighteen months at 6 % is 9 % more shares.
|
|
128
|
+
- ❌ **Applying the discount and the cap together.** The SAFE takes whichever gives the lower price, not both.
|
|
129
|
+
- ❌ **A percentage table that sums to 99.7 %.** The check catches it; a hand-built one doesn't.
|
|
130
|
+
- ❌ **"This is not legal advice" as an opening line.** Say what to have checked, specifically, at the end.
|
|
131
|
+
- ❌ **"The script shows…"** The founder wants their percentage.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"query": "How much of my company will I own after this Series A?",
|
|
4
|
+
"should_trigger": true
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"query": "Model our three SAFEs converting into the seed round",
|
|
8
|
+
"should_trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"query": "Compare founder dilution at a $12M and a $16M pre-money",
|
|
12
|
+
"should_trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"query": "How much have we given away in SAFEs so far?",
|
|
16
|
+
"should_trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"query": "Review this SAFE agreement before I sign it",
|
|
20
|
+
"should_trigger": false
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"query": "Build a three-statement financial model for our seed deck",
|
|
24
|
+
"should_trigger": false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"query": "Write the business case for hiring two engineers",
|
|
28
|
+
"should_trigger": false
|
|
29
|
+
}
|
|
30
|
+
]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "cap-table",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "Two founders, 4.5M shares each. 250k options granted, 750k unissued in the pool. SAFEs: $500k post-money at $8M cap; $125k post-money at $6M cap with 20% discount; $100k pre-money SAFE at $5M cap, 20% discount. Plus a $50k note at 6% from 2025-06-01, $5M cap, 20% discount. Term sheet: $16M pre, $4M lead + $1M follow-on, 10% pool post-money, closing 2026-12-15. What do we each own after?",
|
|
7
|
+
"assertions": [
|
|
8
|
+
"States each founder owns about 28.3 % after the round, down from 45 % today",
|
|
9
|
+
"Shows each SAFE and the note converting at its cap, with prices of about 0.7095, 0.5322, 0.4613 and 0.4613",
|
|
10
|
+
"Counts the note's interest: about $54,619 converts, not $50,000",
|
|
11
|
+
"Says the pool top-up (about 840,000 shares) comes out of the pre-money and gives its cost in money (about $1.1M, an effective pre-money near $14.9M)",
|
|
12
|
+
"The after-round table sums to 100 %",
|
|
13
|
+
"Does not mention a script, a JSON file or the skill's name in the reply",
|
|
14
|
+
"Does not invent a liquidation preference, vesting term or investor not in the prompt"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": 2,
|
|
19
|
+
"held_out": "2026-11-06",
|
|
20
|
+
"prompt": "Raising a $4M seed at $16M pre. Investors want a 10% unallocated option pool after close. Right now me and my cofounder have 4,000,000 shares each, the option pool is 1,000,000 with 600,000 granted, and there's one post-money SAFE: $1M at a $10M cap. How much will I own after the round?",
|
|
21
|
+
"assertions": [
|
|
22
|
+
"The $1M post-money SAFE converts at its cap: $10M ÷ 10,000,000 shares (the capitalization before the new money, including the SAFE itself) gives $1.00 per share and about 1,000,000 shares (±1%), which is 10% before the round",
|
|
23
|
+
"The seed price is about $1.458 per share (±$0.01), calculated on a pre-money fully diluted count of about 10.97M shares that includes the converted SAFE and the pool top-up",
|
|
24
|
+
"The option pool grows by about 971,000 new options (±1%), so that 1,371,429 unallocated options are 10% after the round. It says the top-up comes out of the pre-money and so dilutes the founders, the SAFE holder and existing option holders, not the new investor",
|
|
25
|
+
"The seed investor gets about 2.74M shares (±1%), which is 20% of the company. The post-money valuation is $20M on about 13.71M fully diluted shares, and the after-round table adds up to 100%",
|
|
26
|
+
"The founder owns about 29.2% (±0.3 points) fully diluted after the round (the two founders together about 58.3%). It compares this with 40% before the round counting the SAFE as converted (or 44.4% leaving the SAFE out)",
|
|
27
|
+
"It shows the cap table before and after the round, one row per holder: each founder, granted options, unallocated pool, the SAFE and the seed investor",
|
|
28
|
+
"It does not invent investors, discounts, interest, vesting terms or other securities that are not in the prompt"
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": 3,
|
|
33
|
+
"held_out": "2026-11-06",
|
|
34
|
+
"prompt": "We're Tamarack Health in Toronto. Our Series A term sheet says CA$5M at a CA$20M pre-money, and the lead wants a 12% unallocated option pool after the round, counted in the pre-money. Closing is set for 15 March 2027. Current cap table: Priya Venn (me) 5,000,000 common, Owen Laska 3,000,000 common; the option plan has 1,500,000 reserved with 900,000 granted. What converts: (a) a CA$500,000 post-money SAFE from March 2023 with a CA$8M valuation cap and no discount; (b) a CA$1,000,000 YC SAFE from June 2024 with a CA$12M cap and no discount (I honestly can't remember if it's the pre- or post-money version); (c) a CA$300,000 convertible note issued 15 March 2025 at 6% simple interest, with a 15% discount and a CA$30M cap, converting in this round with accrued interest. Owen thinks we each keep what we have now minus the investor's 20%, which would put me at about 42%. What will I actually own? And what if the lead drops to CA$16M pre?",
|
|
35
|
+
"assertions": [
|
|
36
|
+
"It says the June 2024 SAFE's type is unknown, treats it as post-money (the YC post-money SAFE has been the standard form since 2018) and asks Priya to check the document. On that basis it converts at the cap: about CA$1.05–1.08 per share and about 927,000–952,000 shares",
|
|
37
|
+
"The March 2023 SAFE converts at its CA$8M cap: about CA$0.70–0.72 per share and about 695,000–714,000 shares",
|
|
38
|
+
"The note converts CA$336,000 (CA$300,000 principal plus exactly two years of 6% simple interest, CA$36,000). It says the 15% discount beats the CA$30M cap, so the note converts at 85% of the Series A price, about CA$1.336 (±1%), into about 250,000–252,000 shares, and that the cap did not apply",
|
|
39
|
+
"At CA$20M pre: the Series A price is about CA$1.57–1.58 per share and the pool top-up is about 1.30–1.31M new options, counted in the pre-money. The investor gets about 3.17–3.18M shares (20%), the post-money valuation is CA$25M on about 15.8–15.9M fully diluted shares, and the table adds up to 100%",
|
|
40
|
+
"Priya owns about 31.5% (±0.5 points) fully diluted after the round. It tells her Owen's 42% is wrong because it leaves out the two SAFEs, the note and the pool top-up, all of which come out of the pre-money before the investor's 20%",
|
|
41
|
+
"At CA$16M pre: the Series A price is about CA$1.24 (±1%), the investor owns about 23.8%, and Priya about 29.5% (±0.5 points). Both SAFEs still convert at their caps, and the note still converts at the discount (about CA$1.05)",
|
|
42
|
+
"It does not invent shareholders, warrants, preferred-stock terms, legal advice on Canadian securities rules or securities that are not in the prompt"
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Worked example: three SAFEs and a note into a Series A
|
|
2
|
+
|
|
3
|
+
## Input
|
|
4
|
+
|
|
5
|
+
> *"We're two founders with 4.5M shares each, 250k options granted and 750k left in the pool.
|
|
6
|
+
> We raised $500k on a post-money SAFE at an $8M cap, $125k from an accelerator (post-money,
|
|
7
|
+
> $6M cap, 20 % discount), $100k from an early angel on the old pre-money SAFE ($5M cap, 20 %
|
|
8
|
+
> discount), and a $50k friends-and-family note at 6 % from June 2025 ($5M cap, 20 %). The
|
|
9
|
+
> term sheet: $16M pre, $4M from the lead and $1M follow-on, 10 % option pool post-money,
|
|
10
|
+
> closing mid-December. What do we each end up with?"*
|
|
11
|
+
|
|
12
|
+
## Input written (in a private temporary folder)
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"company": "Example Labs, Inc.",
|
|
17
|
+
"currency": "USD",
|
|
18
|
+
"holders": [
|
|
19
|
+
{"name": "Founder A", "class": "common", "shares": 4500000},
|
|
20
|
+
{"name": "Founder B", "class": "common", "shares": 4500000}
|
|
21
|
+
],
|
|
22
|
+
"options": {"granted": 250000, "pool_unissued": 750000},
|
|
23
|
+
"safes": [
|
|
24
|
+
{"holder": "Angel syndicate", "amount": 500000, "type": "post", "cap": 8000000},
|
|
25
|
+
{"holder": "Accelerator", "amount": 125000, "type": "post", "cap": 6000000, "discount": 0.2},
|
|
26
|
+
{"holder": "Early angel", "amount": 100000, "type": "pre", "cap": 5000000, "discount": 0.2}
|
|
27
|
+
],
|
|
28
|
+
"notes": [
|
|
29
|
+
{"holder": "Friends and family note", "principal": 50000, "rate": 0.06, "issued": "2025-06-01", "cap": 5000000, "discount": 0.2}
|
|
30
|
+
],
|
|
31
|
+
"round": {
|
|
32
|
+
"pre_money": 16000000,
|
|
33
|
+
"investors": [{"name": "Series A lead", "amount": 4000000}, {"name": "Series A follow-on", "amount": 1000000}],
|
|
34
|
+
"pool_target": 0.10,
|
|
35
|
+
"close": "2026-12-15"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Reply
|
|
41
|
+
|
|
42
|
+
**After the Series A you each own 28.3 %, down from 45 % today.** The new investors take
|
|
43
|
+
23.8 %, the SAFEs and note 8.0 % together, and the option pool 11.6 %.
|
|
44
|
+
|
|
45
|
+
| Holder | Class | Shares | % |
|
|
46
|
+
|---|---|---:|---:|
|
|
47
|
+
| Founder A | common | 4,500,000 | 28.30 |
|
|
48
|
+
| Founder B | common | 4,500,000 | 28.30 |
|
|
49
|
+
| Angel syndicate | preferred (safe) | 704,673 | 4.43 |
|
|
50
|
+
| Accelerator | preferred (safe) | 234,891 | 1.48 |
|
|
51
|
+
| Early angel | preferred (safe) | 216,801 | 1.36 |
|
|
52
|
+
| Friends and family note | preferred (note) | 118,415 | 0.74 |
|
|
53
|
+
| Series A lead | preferred (round) | 3,028,714 | 19.05 |
|
|
54
|
+
| Series A follow-on | preferred (round) | 757,178 | 4.76 |
|
|
55
|
+
| Options granted | options | 250,000 | 1.57 |
|
|
56
|
+
| Option pool, unissued | options | 1,590,074 | 10.00 |
|
|
57
|
+
| **Total** | | **15,900,746** | **100.00** |
|
|
58
|
+
|
|
59
|
+
**What each SAFE and note converted at.** All four convert at their caps; none of the
|
|
60
|
+
discounts gives a lower price at $1.3207 a share.
|
|
61
|
+
|
|
62
|
+
| SAFE or note | Invested (with interest) | Converts at | By | Shares |
|
|
63
|
+
|---|---:|---:|---|---:|
|
|
64
|
+
| Angel syndicate (post-money safe) | $500,000 | 0.7095 | cap | 704,673 |
|
|
65
|
+
| Accelerator (post-money safe) | $125,000 | 0.5322 | cap | 234,891 |
|
|
66
|
+
| Early angel (pre-money safe) | $100,000 | 0.4613 | cap | 216,801 |
|
|
67
|
+
| Friends and family note (pre-money note) | $54,619 | 0.4613 | cap | 118,415 |
|
|
68
|
+
|
|
69
|
+
**What the pool top-up costs you.** The term sheet's 10 % pool has to be topped up by 840,074
|
|
70
|
+
shares, and they come out of the pre-money. That makes the $16M headline worth $14.9M to the
|
|
71
|
+
existing holders: about $1.1M of the valuation goes to future hires before you've hired them.
|
|
72
|
+
If the lead agreed to top up the pool after the round instead, you'd each hold 28.8 %, half a
|
|
73
|
+
point more.
|
|
74
|
+
|
|
75
|
+
**Assumptions**
|
|
76
|
+
- `[assumption]` The pool is in the pre-money, the usual term. Moved after the round, you each hold 28.83 % instead of 28.30 %.
|
|
77
|
+
- `[assumption]` The note's interest runs to 15 December 2026: $54,619 converts, not $50,000.
|
|
78
|
+
|
|
79
|
+
**Before you sign:** have your lawyer confirm whether the term sheet's 10 % pool is pre- or
|
|
80
|
+
post-money, and that the early angel's SAFE really is the pre-money form; that is what
|
|
81
|
+
converts it at $0.46 rather than at its post-money equivalent.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cap-table",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Work out who owns what in a startup through its SAFEs, convertible notes and a priced round — each SAFE's and note's conversion price and whether its cap or discount applied, the price per share, the option-pool top-up and who it dilutes, the fully diluted cap table before and after, and founder ownership at other valuations — computed by a script that checks the post-money and the 100 % total. Use when a founder asks \"how much of my company will I own after this round\", \"model our SAFEs converting\", \"what does this term sheet do to our cap table\", \"how much have I given away in SAFEs\", or \"compare a $12M and a $16M pre-money\".",
|
|
5
|
+
"entrypoint": "SKILL.md",
|
|
6
|
+
"deps": {
|
|
7
|
+
"npm": [],
|
|
8
|
+
"pip": []
|
|
9
|
+
},
|
|
10
|
+
"env": {
|
|
11
|
+
"required": [],
|
|
12
|
+
"optional": []
|
|
13
|
+
},
|
|
14
|
+
"related": [],
|
|
15
|
+
"tags": [
|
|
16
|
+
"cap-table",
|
|
17
|
+
"safe",
|
|
18
|
+
"convertible-note",
|
|
19
|
+
"fundraising",
|
|
20
|
+
"dilution",
|
|
21
|
+
"option-pool",
|
|
22
|
+
"startup"
|
|
23
|
+
],
|
|
24
|
+
"permissions": {
|
|
25
|
+
"network": [],
|
|
26
|
+
"commands": [],
|
|
27
|
+
"files": "named-paths",
|
|
28
|
+
"notes": "Reads the cap.json it is given and writes a CSV only to the path passed with --csv."
|
|
29
|
+
},
|
|
30
|
+
"model": {
|
|
31
|
+
"tier": "standard",
|
|
32
|
+
"rationale": "Turning SAFEs, notes and a term sheet into the script's input and explaining the result is bounded; the script does the conversion math."
|
|
33
|
+
}
|
|
34
|
+
}
|