Skip to main content
Glama

Sprinty

Website · 45-second demo · Try a project

skills.sh

npm version

Agentic sprints done right. Plan, coordinate, and scale high-quality agent work.

Sprinty turns ideas into organized tasks, coordinates agents on one shared plan, and keeps progress across sessions. Use it for websites, research, design, software, and other Git-backed projects. The local dashboard shows the work; resolving commits, check evidence, and artifacts make the results inspectable.

Start with a website launch, a research brief, or a small agent team. Each walkthrough includes a copyable starting prompt.

A website project organized into subsprints and tasks

What's new in 0.2.2

  • Direct claim recovery. Use item_claim({ id, force: "Previous agent terminated" }) to reassign work immediately. force is the explanation string (1–500 characters); no inactivity or stall threshold is required. item_takeover accepts the same option.

  • Clearer claim rejections. Errors explain the unmet ownership or stall condition and show the explicit override option. Handover history and stale-owner protection remain intact.

  • Updated dashboard. The packaged dashboard now uses React, Untitled UI, and TanStack Table, with a refreshed work table and item detail views.

Upgrade to npx -y sprinty-mcp@0.2.2 and restart your MCP connection.

Related MCP server: Supercharged Dev

What's new in 0.2.1

  • Automatic caller identity. Normal MCP connections remember the agent; the Claude plugin now supplies session/subagent IDs automatically through a bundled hook. Stable native IDs recover identities across MCP restarts without model-managed tokens.

  • Agent and claim discovery. agent_list() shows agents and their activity; items_claimed({ mine:true }) shows your work, claim age, progress, and potential stalls. Both support pagination.

Use npx -y sprinty-mcp@0.2.1 and restart your MCP connection. Update the Claude plugin as well to install its automatic-identity hook. Existing MCP-only Claude installs retain connection identity; shared subagents need the plugin hook or explicit tokens.

What's new in 0.2.0

  • Multiple agents, one sprint. Each agent gets an adjective–animal name and its own token. Exclusive item claims and claim generations prevent agents from overwriting each other's work.

  • Visible stalls and handovers. Track claim age and ownership history. Sprinty flags potential stalls after an hour without owner activity or three other item completions without progress; reassignment always requires an explicit handover.

  • ETA that handles laptop sleep. Tools and dashboard share an activity-aware estimate that separates queue time from observed work, accounts for parallel agents and dependencies, and shows when work is paused or awaiting its owner.

  • Safer concurrent writes. Cross-process locking, journaled recovery, pinned sprint bindings, and asynchronous gates protect shared local sprint data.

  • Updated agent skills. Claude, Codex, and Gemini bundles explain tokens, claims, heartbeats, progress, and takeovers.

To upgrade, use npx -y sprinty-mcp@0.2.0 as your MCP server command and restart the connection. Resume your existing sprint, retain the returned agent token, and call item_claim before editing or completing work. Concurrent agents must share the same canonical repository and data directory, with a separate token per agent. Existing ledgers remain readable; the new ETA shows “learning” until it has three eligible completed items.

See the 0.2.0 release notes and concurrent-agent workflow.

Quick setup

Run from your project to install the MCP connection and skills for Codex or Claude Code:

curl -fsSL https://ebursztein.github.io/sprinty/install.sh | sh

Requires Node.js 20+, Git, and a client CLI. If both clients are installed, choose one when prompted, or append -s -- --client codex (or claude) after sh. The installer preserves existing MCP entries and installs skills in the repository. Restart your client afterward. Claude shared-subagent hooks still require the plugin below. Other clients can use the agent setup prompt or manual instructions.

Agent skills via npx skills

Discover and install the workflow and tool-reference skills for Codex, Claude Code, and other supported agents:

npx skills add ebursztein/sprinty

List first with npx skills add ebursztein/sprinty --list, or choose both explicitly with --skill how-to-run-a-sprint --skill using-sprinty. This installs agent guidance; connect the MCP server using the client instructions below to get Sprinty's tools. Claude's automatic shared-subagent identity hook comes with the Claude plugin, not with a skills-only install.

Prefer to have your agent handle setup? Copy the setup prompt into your coding agent. The website includes the same prompt and install commands; llms.txt provides a compact agent reference.

Install

Sprinty is published to npm as sprinty-mcp. The npm package is the MCP server. Claude and Codex plugin installs are distributed from this Git repository through each client's marketplace system.

Claude Code

MCP-only install:

claude mcp add sprinty -- npx -y sprinty-mcp

Plugin install, with Sprinty skills plus the MCP server:

claude plugin marketplace add ebursztein/sprinty
claude plugin install sprinty@sprinty

The Claude marketplace manifest is .claude-plugin/marketplace.json; the plugin bundle is clients/claude/.

Codex

MCP-only install:

codex mcp add sprinty -- npx -y sprinty-mcp

Plugin install, with Sprinty skills plus the MCP server:

codex plugin marketplace add ebursztein/sprinty
codex plugin add sprinty@sprinty

The Codex marketplace manifest is .agents/plugins/marketplace.json; the plugin bundle is plugins/sprinty/. Codex does not currently use an OpenAI npm plugin package for this flow.

Gemini CLI

Use the MCP server directly from npm:

npx -y sprinty-mcp

The repository also includes a Gemini extension in clients/gemini/ for clients that install local Gemini extensions.

Cursor, VS Code, Kiro, GitHub Copilot, ChatGPT & Codex

Sprinty ships a portable Agent Plugins package at the repository root (plugin.json, mcp.json, skills/), so any conformant client can load the skills and the MCP server without a client-specific bundle. Follow your client's plugin install instructions and point it at this repository.

Claude Code and Gemini CLI are not Agent Plugins clients today; they use the bundles above.

Any MCP Client

Configure a stdio MCP server with:

{
  "command": "npx",
  "args": ["-y", "sprinty-mcp"]
}

Use

Sprinty never guesses the repository from the MCP server process cwd. Start or resume with explicit paths:

sprint_new({ goal, git_dir, data_dir, context_notes? })
sprint_resume({ git_dir, data_dir })

Use a worktree-local, gitignored data_dir, usually <git_dir>/.sprinty. When data_dir is omitted and git_dir is provided, Sprinty uses <git_dir>/.sprinty. sprint_new and sprint_resume return the dashboard URL. Call info({ git_dir }) first for startup orientation and compact sprint rows. Use info({ workspace_dirs: [...] }) when you need to inspect multiple Sprinty data dirs together, then sprint_resume({ git_dir, data_dir }).

Concurrent agents and timing

sprint_new and sprint_resume return agent: { id, name, token }; info reports your generated adjective–animal identity. The connection remembers your identity automatically; ordinary calls need no name or token. Tokens are an advanced fallback for clients without automatic caller integration. Codex stdio agents normally have separate connections. The Claude plugin bundles a PreToolUse hook that supplies native session/subagent IDs, so shared-connection callers are also identified automatically. Update the installed plugin to get this hook; an MCP-only install does not include it. Other shared clients can use agent_attach({}) and explicit agent_token. Without native caller integration, omitting it is allowed only with one attached agent. Never share tokens between agents or put them in notes/artifacts. agent_detach releases only your claims; it keeps the shared dashboard and other agents attached. Use sprint_detach only when you are the connection's sole agent.

Before editing an item, call item_claim({ id, agent_token? }). Then use the returned claim generation when appropriate: item mutation tools accept claim_generation as an explicit stale-write fence. Repeating your own claim is idempotent. item_release({ id }) hands work back. Item edits, completion, splitting and deprecation require ownership; collaborative notes and artifacts remain available to other agents. A completed item's last owner may correct its recorded metadata and gates. Native caller mappings recover identity and claim generations after an MCP restart. Codex can supply CODEX_THREAD_ID, or a launcher can set SPRINTY_SESSION_ID; without a stable native ID, a new MCP process gets a new identity. For manual recovery, resume with your existing agent_token. Never invent native caller IDs in tool arguments.

For long tasks, call agent_heartbeat({}) at least every five minutes and item_progress({ id, message }) when meaningful progress occurs. Progress messages are trimmed and limited to 500 characters. Generic server uptime and dashboard polling do not count as agent activity. Repeated calls within one second coalesce their durable heartbeat, while mutations retain their own attributed timestamps.

Sprinty tracks claim age, historical ownership, estimated active work and owner inactivity separately. It flags a potential stall after either three other distinct items complete without item progress, or one hour without owner activity. Reads/heartbeats do not reset the three-item counter. Notes, item edits and related artifact updates do. No work is automatically reassigned: use item_takeover({ id, explanation }) on a potentially stalled claim, with a nonempty explanation capped at 500 characters. History preserves both owners and the handover; old owners cannot continue writing. For an interrupted session or any explicit reassignment, use item_claim({ id, force: "Previous session terminated; continuing its work" }). force is the explanation (trimmed, 1–500 characters), not a boolean. It overrides ownership immediately without an inactivity or stall requirement; Sprinty does not infer that an owner is defunct. item_takeover({ id, force: "Reason for reassignment" }) supports the same override. Both record the explanation and fence the previous owner. Ordinary claims retain exclusive ownership, and ordinary takeovers still require a potential stall. Rejections explain the unmet conditions and show the force option.

ETA is one shared activity-aware estimate. It excludes queue age, counts at most five minutes after each observed activity event within claim intervals, and uses the latest 20 eligible completed items (minimum three). Legacy, split and deprecated items do not train it. The median estimates item effort; the 25th–75th percentile range is an estimate range, not a statistical confidence interval. Remaining working time is aggregate estimated effort; the finish range separately accounts for active agents, existing owners and dependencies. With no agents active in five minutes it shows paused; work owned by an inactive agent shows awaiting_handover. Both suppress calendar finish forecasts. Before sufficient samples it shows learning; resolved work shows complete.

A shared data directory supports concurrent local processes on one canonical worktree. Separate worktrees retain separate sprint bindings. Gate execution is asynchronous and runs outside the write lock; if state changes during verification, retry the tool rather than treating stale evidence as valid.

Tools

Tool

Purpose

agent_attach / agent_detach

Create or recover a named agent session / detach it and release its claims.

agent_heartbeat

Report agent activity without resetting item progress.

item_claim / item_release

Exclusively claim an item / release your ownership.

item_takeover

Take over stalled work with explanation, or override ownership immediately with force: "reason" (1–500 characters).

item_progress

Record meaningful progress (1–500 characters).

info

Startup orientation before binding, including sprint rows, resume/create help, and dashboard state.

sprint_new

Start a sprint with explicit git_dir and data_dir; returns orientation and dashboard info.

sprint_resume

Reattach this MCP session to an existing sprint.

sprint_detach

Clear this MCP process binding and stop the dashboard.

sprint_close

Recheck gates, write the canonical changelog, and close after work and coverage are complete; force:true bypasses only final executable-gate failures.

sprint_archive

Archive an active sprint with a recovery reason.

overview

Compact sprint summary for orientation.

next

Compact active work window with current, next, blocked, relations, notes, and artifacts.

search

Regex search over the immutable sprint ledger.

changelog

Preview or export SemVer Markdown; canonical output is automatic at close.

subsprint_new

Create a feature-sized unit of work.

subsprint_list

List subsprints with compact item counts.

subsprint_get

Read one subsprint and its item rows.

item_add

Create one atomic, gated item with an optional gate timeout.

item_get

Read full item detail.

item_update

Update item metadata, execution settings, recorded commit, or dependency edges; completed items may revise executable gates/timeouts before close.

item_done

Complete an item with a real commit, gate evidence, and changelog entry.

item_split

Resolve an oversized item by creating a seeded subsprint.

item_deprecate

Drop an item with an explicit reason, or pass a subsprint id to drop it and its open items.

note_add

Attach a note to an item.

note_list

List notes for an item.

note_get

Read one note.

note_update

Update one note.

artifact_add

Attach a durable file path to the sprint.

artifact_list

List active artifacts.

artifact_get

Read one artifact record.

artifact_update

Update artifact metadata.

dashboard_info

Report the current dashboard URL and port.

dashboard_restart

Restart the dashboard and return the new URL and port.

Release

Publishing is gated by tests. The GitHub Release workflow runs npm ci, npm test, and only then npm publish --access public.

Local checks:

npm test
npm run typecheck

License

Apache-2.0

Dashboard development

The next dashboard uses React, MIT Untitled UI components, Tailwind CSS 4, and TanStack Table 9. Its read-only /state contract and shared domain ETA remain unchanged.

npm run dev:dashboard -- --mode demo

Demo mode uses deterministic synthetic data for screenshots and UI checks. To develop against a real local sprint, set SPRINTY_DASHBOARD_URL to the URL returned by Sprinty and run npm run dev:dashboard. npm run build produces the self-contained MCP dashboard; npm run typecheck checks server and UI types.

The static marketing site lives in website/. Run npm run dev:site for a preview and npm run build:site to check local links and build .site-dist/. GitHub Pages publishes it through .github/workflows/site.yml; it is kept out of the npm server package. Dashboard screenshots use illustrative data and are labelled as the next-dashboard preview until that UI ships to npm.

Available Tools

38 tools
agent_attachC

Attach an independent named agent; retain its returned token for shared connections.

Inputs: agent_token, client_agent_id, claim_generation, client_session_id.

agent_detachC

Detach only this agent and release its claims.

Inputs: agent_token, client_agent_id, claim_generation, client_session_id.

agent_heartbeatC

Report activity during long tasks; does not reset item progress or stall completion counts.

Inputs: agent_token, client_agent_id, claim_generation, client_session_id.

agent_listC

List named agents, activity state and claim counts; paginated and token-free.

Inputs: limit, offset, agent_token, client_agent_id, +2 more.

artifact_addC

Attach a file path to the sprint, optionally related to item ids.

Inputs: path (required), title (required), id, agent_token, +5 more.

artifact_getC

Read one artifact by id.

Inputs: id (required), agent_token, client_agent_id, claim_generation, +1 more.

artifact_listB

Page through active sprint artifacts as compact newest-first rows.

Inputs: limit, offset, agent_token, client_agent_id, +2 more.

artifact_updateC

Update an artifact by id.

Inputs: id (required), path, title, agent_token, +5 more.

changelogB

Preview or export the current SemVer Markdown changelog and return only its path; sprint_close writes the canonical changelog automatically.

Inputs: path, agent_token, client_agent_id, claim_generation, +1 more.

dashboard_infoA

Return the current dashboard URL and port without starting or restarting it.

Inputs: agent_token, client_agent_id, claim_generation, client_session_id.

dashboard_restartC

Restart the follow-along dashboard and return its URL and port.

Inputs: agent_token, client_agent_id, claim_generation, client_session_id.

infoC

Startup orientation and compact sprint discovery before binding to one sprint.

Inputs: git_dir, data_dir, agent_token, workspace_dirs, +3 more.

item_addC

Add an atomic item (bounded title, bounded description, code locations, gates — all required; gate_timeout_ms defaults to 5000 and null disables it).

Inputs: gates (required), title (required), subsprint (required), description (required), +8 more.

item_claimB

Claim an open item. Optional force is a 1–500 character explanation that overrides existing ownership immediately, without activity or stall conditions; recorded in handover history.

Inputs: id (required), force, agent_token, client_agent_id, +2 more.

item_deprecateA

Resolve an item as deprecated with a reason, or drop a whole subsprint by passing its id (its open items are deprecated too).

Inputs: id (required), reason (required), agent_token, client_agent_id, +2 more.

item_doneA

Resolve an item as completed with a commit id and a semver changelog verb (added/fixed/changed/removed/deprecated/security). Sprinty runs the item's executable gates itself; only manual gates take agent-supplied gate_results.

Inputs: id (required), changelog (required), commit_id (required), agent_token, +4 more.

item_getC

Read one item with full untruncated detail.

Inputs: id (required), agent_token, client_agent_id, claim_generation, +1 more.

item_progressC

Record meaningful progress on your claimed item.

Inputs: id (required), message (required), agent_token, client_agent_id, +2 more.

item_releaseC

Release your claim for another agent.

Inputs: id (required), agent_token, client_agent_id, claim_generation, +1 more.

items_claimedB

List current item claims, optionally only yours; includes timing, progress and stall reasons.

Inputs: mine, limit, offset, agent_token, +3 more.

item_splitC

Resolve an item as split, creating a seeded subsprint atomically.

Inputs: id (required), gates (required), goals (required), description (required), +5 more.

item_takeoverB

Take over a potentially stalled claim with an explanation, or pass force as a 1–500 character explanation to override ownership immediately without activity or stall conditions.

Inputs: id (required), force, agent_token, explanation, +3 more.

item_updateA

Update an item by id: metadata, open-item gates/timeout, completed-item commit_id, and/or dependency ids.

Inputs: id (required), note, gates, title, +9 more.

nextD

Compact work window for choosing the next item.

Inputs: past, future, agent_token, client_agent_id, +4 more.

note_addB

Add a note to a specific item id. Notes are not substitutes for item_add(); create items for trackable work.

Inputs: id (required), text (required), agent_token, client_agent_id, +2 more.

note_getC

Read notes attached to an item id.

Inputs: id (required), agent_token, client_agent_id, claim_generation, +1 more.

note_listC

List notes for an item as compact rows.

Inputs: id (required), agent_token, client_agent_id, claim_generation, +1 more.

note_updateD

Update a note by note id.

Inputs: id (required), text (required), agent_token, client_agent_id, +2 more.

overviewC

Compact sprint overview: title, details, notes, artifacts, and subsprint counts.

Inputs: agent_token, client_agent_id, claim_generation, client_session_id.

sprint_archiveB

Archive the sprint with a recovery reason, bypassing normal close gates.

Inputs: reason (required), agent_token, client_agent_id, claim_generation, +1 more.

sprint_closeC

Re-check all gates, write the canonical SemVer changelog, and close the sprint; force bypasses only executable gate failures.

Inputs: force, coverage, agent_token, client_agent_id, +2 more.

sprint_detachC

Detach this MCP session from its current Sprinty binding and stop the dashboard.

Inputs: agent_token, client_agent_id, claim_generation, client_session_id.

sprint_newC

Start a sprint with explicit git_dir and a worktree-scoped, uncommitted data_dir; returns orientation.

Inputs: goal (required), git_dir (required), data_dir, agent_token, +4 more.

sprint_resumeB

Resume an existing sprint by binding this MCP session to an existing git_dir and data_dir without creating a sprint.

Inputs: git_dir (required), data_dir, agent_token, client_agent_id, +2 more.

subsprint_getC

Read one subsprint with compact item rows.

Inputs: id (required), agent_token, client_agent_id, claim_generation, +1 more.

subsprint_listC

List subsprints with compact rows.

Inputs: agent_token, client_agent_id, claim_generation, client_session_id.

subsprint_newC

Create a subsprint (description, goals, gates).

Inputs: gates (required), goals (required), description (required), agent_token, +4 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

    TDQS

    C2.4/5.0

    Scored across 38 tools

    Disambiguation3/5

    The domain prefixes (item_/subsprint_/note_/artifact_/agent_/sprint_/dashboard_) make most tools separable, but item_claim and item_takeover genuinely overlap since item_claim's `force` argument already overrides ownership immediately, duplicating takeover's force behavior. sprint_close vs sprint_archive and the family of compact readers (info, overview, next, subsprint_get, items_claimed) also require reading descriptions carefully to choose correctly.

    Naming Consistency4/5

    Strong, mostly consistent snake_case with resource prefixes and a predictable verb set (add/get/list/update/done/split/deprecate/new/resume). Minor deviations only: a handful of bare names (info, next, overview, search, changelog) and one plural outlier (items_claimed) break the verb_noun pattern.

    Tool Count2/5

    38 tools is heavy for a single sprint-tracking server, well past the comfortable 3-15 range. Several clusters could be consolidated (claim/release/takeover/progress as one item lifecycle tool; dashboard_info/dashboard_restart; sprint_close/sprint_archive), so the surface feels padded rather than scoped.

    Completeness3/5

    Sprint lifecycle, subsprints, items, claims, notes, artifacts, agents, and changelog are broadly covered, but there are real gaps: no delete for notes or artifacts (only add/get/list/update), and no generic item_list — items are only reachable via subsprint_get or `next`. Agents will hit dead ends when they need to remove a stale note/artifact or enumerate items directly.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers