From jupi-skills
Open a decision in Jupi (the team's decision platform) that the user can't settle alone and hand it to the right person to decide. Use whenever a question needs someone else's call — a blocker in a spec, an unresolved trade-off, anything needing a lead's or owner's sign-off — or when the user says "ask X to decide this", "escalate this", "this needs approval from…", "raise this with the team". Lean toward offering it the moment an open question surfaces that isn't the user's to close: capturing it as an assigned decision (with framing) beats leaving it buried in a doc where it stalls. This creates the decision and assigns a decider but deliberately does NOT finalize it — closing it is the assignee's job (for decisions the user has already made themselves, use log-decision instead).
How this skill is triggered — by the user, by Claude, or both
Slash command
/jupi-skills:submit-decisionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Some questions aren't yours to close. The trade-off needs the eng lead's call; the scope cut needs the PM's sign-off; the compliance angle needs legal. Left in a doc, these stall — nobody owns them and they rot as comments. This skill turns an open question into a real, **assigned** decision in Jupi: framed with enough context for the decider to act, owned by you, and waiting on the right perso...
Some questions aren't yours to close. The trade-off needs the eng lead's call; the scope cut needs the PM's sign-off; the compliance angle needs legal. Left in a doc, these stall — nobody owns them and they rot as comments. This skill turns an open question into a real, assigned decision in Jupi: framed with enough context for the decider to act, owned by you, and waiting on the right person to finalize.
The line between this and log-decision: log records a call you've made; submit opens a call someone else makes. This skill never finalizes — doing so would put words in the decider's mouth.
create-decision-tool from the Jupi MCP server (may appear namespaced as mcp__Jupi__… or mcp__claude_ai_Jupi__…). There is intentionally no finalize step here.
Inputs you'll pass:
groupSlug — the workspace.title — the question, sharply stated.description — the framing (see below). This is mandatory in spirit: a decision with no context is a decision the assignee can't act on.makerId — the Jupi user UUID of the person who should decide. They become the decision's maker (the only role allowed to finalize); you (the authenticated caller) are recorded as owner.allowWorkspaceContributions — pass false (the default for this skill). The decision is then visible only to you (owner) and the assigned makerId — who can always see and finalize it — so submitting it does not notify or expose it to the whole workspace. This keeps a targeted hand-off targeted. Omit it (or pass true) only when the user explicitly wants everyone in the workspace to see and weigh in.id and ownerId — the server generates the id and sets you as owner.Returns { id, url, makerId, … }.
There is no MCP tool to look people up by name or email, so makerId has to be a UUID the user supplies. To make this bearable across repeated use, keep a small contacts map in .claude/jupi.local.json (gitignored) alongside the workspace:
{
"workspace": "<group-slug>",
"contacts": {
"Jane Doe": "11111111-1111-4111-8111-111111111111",
"Eng Lead": "22222222-2222-4222-8222-222222222222"
}
}
Resolve the assignee like this:
contacts, use that UUID.contacts so it's a name next time, not a UUID.If workspace is missing too, ask for it and offer to save. Never commit this file.
description)A good submission gives the decider everything they need and nothing they have to chase. Put this in description:
Format the description as HTML — Jupi renders it as rich text, not Markdown. Use <p> for paragraphs, <ul>/<li> for the options, and <strong> for the labels (Context / Options / Lean / Needed). Don't send Markdown or bare newlines.
A naked question ("Postgres or Dynamo?") wastes the decider's time and usually bounces back. Spend the extra two sentences.
.claude/jupi.local.json (prompt + offer to save if missing).makerId via the contacts flow above.description (as HTML) covering context / options / lean / what's needed.create-decision-tool({ groupSlug, title, description, makerId, allowWorkspaceContributions: false }).url and who it's assigned to, and tell the user to share the link with that person (the decider opens it in Jupi to weigh in and close it).Input: "I can't decide whether the new export runs sync or async — that's the eng lead's call. Raise it."
What you do:
Export pipeline: synchronous or async job?contacts["Eng Lead"] (or ask, then offer to save).<p><strong>Context:</strong> the new CSV export can take 30s+ for large workspaces, which blocks the request thread.</p>
<p><strong>Options:</strong></p>
<ul>
<li>(a) Keep it synchronous — simplest, but risks timeouts and ties up a worker.</li>
<li>(b) Move to an async job with a download-ready notification — more moving parts, needs the job queue.</li>
</ul>
<p><strong>My lean:</strong> (b) — we already run the queue for ingestion and the UX is better.</p>
<p><strong>Needed:</strong> your call on whether the added complexity is worth it now, or we ship (a) and revisit.</p>
log-decision, not this.Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub jupi-co/jupi-skills --plugin jupi-skills-staging