Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions plugins/carta-cap-table/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
{
"name": "carta-cap-table",
"displayName": "Carta Cap Table",
"version": "0.6.1",
"version": "0.6.5",
"description": "Carta Cap Table plugin — skills and hooks for querying cap tables, grants, SAFEs, 409A valuations, waterfall scenarios, and more",
"author": {
"name": "Carta Engineering",
Expand Down
1 change: 1 addition & 0 deletions plugins/carta-cap-table/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ After installing, restart Claude Code and run `/mcp` to complete OAuth authentic
| `conversion-calculator` | Calculate SAFE and convertible note conversion into equity. Use when asked about SAFE conversion, note conversion, conversion shares, or how instruments convert in a round. |
| `discover-commands` | Find the right carta-cap-table command when no other skill matches. Use when unsure which command to call, exploring available data, or when the user's request doesn't match a specific skill. |
| `grant-vesting` | Fetch vesting schedule for a specific option grant. Use when asked about vesting details, cliff dates, vesting progress, or unvested shares for a particular grant. |
| `interaction-reference` | >- |
| `list-convertible-notes` | Fetch all convertible instruments (SAFEs and convertible debt) for a company. Use when asked about convertible notes, SAFEs, convertible debt, note terms, caps, discounts, or maturity dates. |
| `list-safes` | Fetch all SAFEs for a company. Use when asked about SAFEs, simple agreements for future equity, SAFE terms, valuation caps, or discounts. |
| `market-benchmarks` | Analyze cap structure patterns across the portfolio as market benchmarks. Use when asked about market benchmarks, typical option pool sizes, average SAFE terms, what's normal for a Series A, cap structure patterns, or portfolio-wide statistics. |
Expand Down
12 changes: 0 additions & 12 deletions plugins/carta-cap-table/hooks/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,6 @@
}
]
}
],
"PostToolUse": [
{
"matcher": "mcp__carta.*__fetch",
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/scripts/hooks/warn-empty-fetch.js",
"timeout": 5
}
]
}
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@ process.stdin.on('end', () => {
hookEventName = input.hook_event_name || hookEventName;
} catch {}

// Canonical auth gate prompt lives in interaction-reference/SKILL.md Section 6.2.
// Keep the wording below in sync with that source.
const output = {
hookSpecificOutput: {
hookEventName,
additionalContext:
'<EXTREMELY_IMPORTANT>You have carta-cap-table tools available. Before ANY tool call, invoke the matching Skill(\'carta-cap-table:...\') first. The skill defines what to fetch, what inputs are required, and how to present results. If no skill matches, invoke Skill(\'carta-cap-table:discover-commands\') to find the right command via discover(). IMPORTANT: Skill is a deferred tool — if its schema is not yet loaded, you MUST call ToolSearch with query "select:Skill" first, then invoke the Skill tool.</EXTREMELY_IMPORTANT>',
'<EXTREMELY_IMPORTANT>You have carta-cap-table tools available. Before ANY tool call, invoke the matching Skill(\'carta-cap-table:...\') first. The skill defines what to fetch, what inputs are required, and how to present results. If no skill matches, invoke Skill(\'carta-cap-table:discover-commands\') to find the right command via discover(). Additionally, ALWAYS invoke Skill(\'carta-cap-table:interaction-reference\') alongside any domain skill to load Carta\'s voice, tone, and data provenance rules before presenting results. IMPORTANT: Skill is a deferred tool — if its schema is not yet loaded, you MUST call ToolSearch with query "select:Skill" first, then invoke the Skill tool.</EXTREMELY_IMPORTANT>\n' +
'<EXTREMELY_IMPORTANT>AI COMPUTATION AUTHORIZATION GATE: When a carta-cap-table skill requires AI computation (pro-forma models, benchmark statistics, conversion math, severity classifications, or any values derived by Claude from Carta data), you MUST call AskUserQuestion BEFORE fetching data or computing. Use this prompt, replacing [X]: "No saved Carta model matches these terms. I can compute [X] using AI — this would be Claude\'s analysis, not Carta data. Would you like me to proceed?" Do NOT write this as plain text — use the AskUserQuestion tool so execution blocks. User says yes: proceed, label output as Claude\'s analysis. User says no: stop — no output, no fallback.</EXTREMELY_IMPORTANT>',
},
};

Expand Down
51 changes: 0 additions & 51 deletions plugins/carta-cap-table/scripts/hooks/warn-empty-fetch.js

This file was deleted.

6 changes: 1 addition & 5 deletions plugins/carta-cap-table/skills/client-triggers/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ For each company, fetch in sequence:
- Key fields: `expiration_date`, `price` (FMV per share)
- Find the most recent valuation (sort by `effective_date` desc)

## Step 3 — Classify Triggers
## Step 3 — Compute Trigger Classifications

### Recent Closes
Companies whose last round closed within N days (default 90, or user-specified):
Expand Down Expand Up @@ -100,7 +100,3 @@ If no triggers found in a category, omit that section.

If the user specifies a time window (e.g., "last 60 days", "last 6 months"), use that instead of the default 90 days.

## Best Effort

- **Computed:** trigger classification (recent close / stale 409A / pending grants) and time-window detection are heuristic
- **Authoritative:** round close dates, 409A expiration dates, and grant issuance dates come directly from Carta
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ You need:
1. `corporation_id` — get from `list_accounts`
2. Round terms — user must provide at least a **pre-money valuation** or **price per share**

If neither is provided, ask before proceeding:
> "What pre-money valuation or price per share should I use for the conversion calculation?"
If neither is provided, you MUST call AskUserQuestion BEFORE any computation:
AskUserQuestion("What pre-money valuation or price per share should I use for the conversion calculation?")

**Subagent prohibition:** Do NOT delegate this skill to a background agent if the round valuation or price per share is missing. A subagent cannot ask the user for input. If these are absent and you are considering dispatching an agent, stop — ask the user directly first, then proceed.

Expand Down Expand Up @@ -118,7 +118,3 @@ Post-conversion fully diluted: 11,986,747
- State the assumed conversion date (today or the round close date)
- This is an estimate — actual conversion depends on legal documents. Recommend review by counsel.

## Best Effort

- **Computed:** SAFE/note conversion share counts, cap-vs-discount method selection, effective price per share — these are estimates derived from instrument terms and user-supplied round price
- **Authoritative:** instrument terms (cap, discount, principal, accrued interest) come directly from Carta
Loading
Loading