sprinty-mcp 0.1.8 → 0.1.10
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 +179 -150
- package/clients/claude/.claude-plugin/plugin.json +1 -1
- package/clients/gemini/gemini-extension.json +1 -1
- package/dist/dashboard-ui/assets/index-DMao8Tdv.js +83 -0
- package/dist/dashboard-ui/assets/index-k-oOctr2.css +1 -0
- package/dist/dashboard-ui/index.html +2 -2
- package/dist/tools/current.d.ts +1 -0
- package/dist/tools/current.js +7 -2
- package/dist/tools/current.js.map +1 -1
- package/dist/tools/register.js +34 -8
- package/dist/tools/register.js.map +1 -1
- package/package.json +2 -1
- package/dist/dashboard-ui/assets/index-B5y2fd66.css +0 -1
- package/dist/dashboard-ui/assets/index-CRDXG61C.js +0 -66
package/README.md
CHANGED
|
@@ -1,44 +1,46 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Sprinty
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Disciplined sprint tracking for AI coding agents.
|
|
4
4
|
|
|
5
|
-
Sprinty
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
close-gates** that re-run your tests and require coverage evidence before a sprint can close, a
|
|
10
|
-
bounded **regex search** over the record, and a **live follow-along dashboard**.
|
|
5
|
+
Sprinty is an MCP server that gives agents a structured way to plan, execute, verify, and close
|
|
6
|
+
non-trivial coding work. It keeps the sprint record local, append-only, and tied to real git
|
|
7
|
+
commits, so an agent cannot quietly lose track of work, invent ids, or mark items done without
|
|
8
|
+
evidence.
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
can't exist without gates, `item_done` rejects a commit that doesn't exist or lacks a semver
|
|
14
|
-
changelog line, and `sprint_close` refuses to close while anything is open, coverage is missing, or
|
|
15
|
-
a gate fails.
|
|
10
|
+
## Why Use Sprinty?
|
|
16
11
|
|
|
17
|
-
|
|
12
|
+
Without Sprinty, long agent sessions often drift:
|
|
18
13
|
|
|
19
|
-
|
|
14
|
+
- work gets tracked in loose prose that is hard to resume;
|
|
15
|
+
- tasks are marked done without a real commit or passing gate evidence;
|
|
16
|
+
- follow-up context disappears after a restart;
|
|
17
|
+
- humans cannot easily see what the agent is doing right now.
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
- optional client manifests under `clients/` for agents that support plugins or extensions.
|
|
19
|
+
With Sprinty, the agent gets MCP tools for:
|
|
23
20
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
- sprint, subsprint, and item tracking with server-minted ids;
|
|
22
|
+
- dependency edges, blocked work, and cycle detection;
|
|
23
|
+
- item gates that require passing evidence before completion;
|
|
24
|
+
- git commit validation and per-item change maps;
|
|
25
|
+
- notes and artifacts attached to the sprint record;
|
|
26
|
+
- compact `overview`, `next`, and `search` reads for agent token budgets;
|
|
27
|
+
- a local dashboard URL returned by `sprint_new` and `sprint_resume`;
|
|
28
|
+
- strict `sprint_close` checks that refuse to close while work, coverage, or gates are missing.
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
## Installation
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
Sprinty is published as the npm package `sprinty-mcp`.
|
|
32
33
|
|
|
33
34
|
```bash
|
|
34
|
-
|
|
35
|
+
npx -y sprinty-mcp
|
|
35
36
|
```
|
|
36
37
|
|
|
37
|
-
The
|
|
38
|
+
The server is usually launched by an MCP client. Sprinty works with any MCP client that can run a
|
|
39
|
+
local command.
|
|
38
40
|
|
|
39
41
|
### Codex
|
|
40
42
|
|
|
41
|
-
|
|
43
|
+
Add Sprinty to `~/.codex/config.toml`:
|
|
42
44
|
|
|
43
45
|
```toml
|
|
44
46
|
[mcp_servers.sprinty]
|
|
@@ -46,156 +48,183 @@ command = "npx"
|
|
|
46
48
|
args = ["-y", "sprinty-mcp"]
|
|
47
49
|
```
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
### Claude Code
|
|
50
52
|
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
```bash
|
|
54
|
+
claude mcp add sprinty -- npx -y sprinty-mcp
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The repository also includes a Claude plugin manifest in `clients/claude/`.
|
|
58
|
+
|
|
59
|
+
### Gemini CLI
|
|
60
|
+
|
|
61
|
+
From a repository checkout:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
gemini extensions install ./clients/gemini
|
|
58
65
|
```
|
|
59
66
|
|
|
60
|
-
|
|
61
|
-
the `current` pointer and append-only JSONL ledgers. Use a worktree-scoped, uncommitted `data_dir`,
|
|
62
|
-
such as `<git_dir>/.sprinty` when that path is gitignored; avoid shared temp dirs or any directory
|
|
63
|
-
that will be committed. After a Codex/MCP restart, call `sprint_list(data_dir)` to inspect the
|
|
64
|
-
existing ledgers and `sprint_resume(git_dir, data_dir)` to reattach without creating a sprint.
|
|
65
|
-
Use `sprint_detach()` to clear a process binding before resuming another sprint. For read-only
|
|
66
|
-
tools before `sprint_new`, you may also pre-bind the MCP server with `SPRINTY_GIT_DIR` and
|
|
67
|
-
`SPRINTY_DATA_DIR` or `--git-dir` and `--data-dir`; both are required together.
|
|
68
|
-
`SPRINTY_REPO_DIR` and `SPRINTY_WORKTREE` remain accepted as legacy aliases for `git_dir` only when
|
|
69
|
-
a `data_dir` is also supplied.
|
|
67
|
+
The Gemini extension uses `clients/gemini/gemini-extension.json` and `clients/gemini/GEMINI.md`.
|
|
70
68
|
|
|
71
|
-
Codex
|
|
69
|
+
### Codex Plugin From A Checkout
|
|
70
|
+
|
|
71
|
+
For local plugin development from this repository:
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
74
|
codex plugin marketplace add .
|
|
75
75
|
codex plugin add sprinty@sprinty-local
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
The installable plugin bundle
|
|
79
|
-
`.agents/plugins/marketplace.json`. This marketplace layout is for Git/repo installs, not the npm
|
|
80
|
-
tarball. The plugin uses a `plugins/sprinty/skills` symlink to the canonical top-level `skills/`
|
|
81
|
-
directory; there is no duplicated Codex-only skill copy.
|
|
78
|
+
The installable plugin bundle lives in `plugins/sprinty/`.
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
before implementation and `sprint_close` before claiming the sprint is done.
|
|
80
|
+
## Quick Start
|
|
85
81
|
|
|
86
|
-
|
|
82
|
+
Sprinty never guesses the repository from the MCP server process cwd. Start a sprint with explicit
|
|
83
|
+
paths:
|
|
87
84
|
|
|
88
|
-
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"goal": "Ship the dashboard lifecycle change",
|
|
88
|
+
"git_dir": "/absolute/path/to/repo",
|
|
89
|
+
"data_dir": "/absolute/path/to/repo/.sprinty",
|
|
90
|
+
"context_notes": ["optional notes for the agent"]
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
- `git_dir` is where Sprinty checks commits, runs gates, reads coverage, and builds change maps.
|
|
95
|
+
- `data_dir` is where Sprinty stores the `current` pointer and JSONL ledgers.
|
|
96
|
+
- Use a worktree-scoped, gitignored `data_dir`, such as `<git_dir>/.sprinty`.
|
|
97
|
+
|
|
98
|
+
After a restart, inspect and resume the same sprint:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
sprint_list({ data_dir })
|
|
102
|
+
sprint_resume({ git_dir, data_dir })
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
You can also pre-bind a read-only MCP process with both environment variables:
|
|
89
106
|
|
|
90
107
|
```bash
|
|
91
|
-
|
|
108
|
+
SPRINTY_GIT_DIR=/absolute/path/to/repo
|
|
109
|
+
SPRINTY_DATA_DIR=/absolute/path/to/repo/.sprinty
|
|
92
110
|
```
|
|
93
111
|
|
|
94
|
-
|
|
95
|
-
content rather than copying it.
|
|
112
|
+
Both `SPRINTY_GIT_DIR` and `SPRINTY_DATA_DIR` are required together.
|
|
96
113
|
|
|
97
|
-
##
|
|
114
|
+
## Basic Workflow
|
|
98
115
|
|
|
116
|
+
```text
|
|
117
|
+
sprint_new({ goal, git_dir, data_dir, context_notes? })
|
|
118
|
+
-> returns dashboard.url
|
|
119
|
+
overview({})
|
|
120
|
+
subsprint_new({ description, goals, gates, dependencies? })
|
|
121
|
+
item_add({ subsprint, title, description, code_locations, gates, dependencies?, high_priority? })
|
|
122
|
+
next({})
|
|
123
|
+
item_done({ id, commit_id, gate_results, changelog })
|
|
124
|
+
changelog({})
|
|
125
|
+
sprint_close({ coverage: { path, format: "lcov", command? } })
|
|
99
126
|
```
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
127
|
+
|
|
128
|
+
Use `item_split` when an item is too large and `item_deprecate` when an item is intentionally
|
|
129
|
+
dropped. Use `sprint_detach` before switching one MCP process to a different sprint.
|
|
130
|
+
|
|
131
|
+
## Dashboard
|
|
132
|
+
|
|
133
|
+
`sprint_new` and `sprint_resume` automatically start a read-only local dashboard and return:
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"dashboard": {
|
|
138
|
+
"running": true,
|
|
139
|
+
"url": "http://127.0.0.1:60767",
|
|
140
|
+
"port": 60767
|
|
141
|
+
}
|
|
142
|
+
}
|
|
113
143
|
```
|
|
114
144
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
`
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
`
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
## Develop
|
|
145
|
+
Open the URL in a browser to watch progress while the agent works. The dashboard shows sprint
|
|
146
|
+
status, items, blocked work, gates, artifacts, changelog entries, change maps, and the ledger.
|
|
147
|
+
|
|
148
|
+
Dashboard tools:
|
|
149
|
+
|
|
150
|
+
- `dashboard_info` returns the current dashboard URL and port without restarting it.
|
|
151
|
+
- `dashboard_restart` restarts the dashboard server and returns the new URL and port.
|
|
152
|
+
- `sprint_close`, `sprint_archive`, and `sprint_detach` stop the dashboard.
|
|
153
|
+
|
|
154
|
+
## Available Tools
|
|
155
|
+
|
|
156
|
+
### Sprint Tools
|
|
157
|
+
|
|
158
|
+
| Tool | What it does |
|
|
159
|
+
| --- | --- |
|
|
160
|
+
| `sprint_new` | Start a sprint with explicit `git_dir` and `data_dir`; returns orientation and dashboard info. |
|
|
161
|
+
| `sprint_resume` | Reattach to an existing sprint after an MCP restart; returns dashboard info. |
|
|
162
|
+
| `sprint_list` | List ledgers in a `data_dir` without creating a sprint. |
|
|
163
|
+
| `sprint_detach` | Clear this MCP process binding and stop the dashboard. |
|
|
164
|
+
| `sprint_close` | Re-run gates, require coverage evidence, and close only when all work is resolved. |
|
|
165
|
+
| `sprint_archive` | Archive an active sprint with a recovery reason. |
|
|
166
|
+
| `overview` | Compact sprint summary for orientation. |
|
|
167
|
+
| `next` | Compact active work window with available and blocked items. |
|
|
168
|
+
| `search` | Regex search over the immutable sprint ledger. |
|
|
169
|
+
| `changelog` | Render the sprint changelog and change-map summary as Markdown. |
|
|
170
|
+
|
|
171
|
+
### Work Tools
|
|
172
|
+
|
|
173
|
+
| Tool | What it does |
|
|
174
|
+
| --- | --- |
|
|
175
|
+
| `subsprint_new` | Create a feature-sized unit of work. |
|
|
176
|
+
| `subsprint_list` | List subsprints with compact item counts. |
|
|
177
|
+
| `subsprint_get` | Read one subsprint and its item rows. |
|
|
178
|
+
| `item_add` | Create one atomic, gated item. |
|
|
179
|
+
| `item_get` | Read full item detail. |
|
|
180
|
+
| `item_update` | Update item metadata, notes, priority, or dependency edges. |
|
|
181
|
+
| `item_done` | Complete an item with a real commit, passing gate evidence, and changelog line. |
|
|
182
|
+
| `item_split` | Resolve an oversized item by creating a new subsprint. |
|
|
183
|
+
| `item_deprecate` | Drop an item with an explicit reason. |
|
|
184
|
+
|
|
185
|
+
### Notes And Artifacts
|
|
186
|
+
|
|
187
|
+
| Tool | What it does |
|
|
188
|
+
| --- | --- |
|
|
189
|
+
| `note_add` | Attach a note to an item. |
|
|
190
|
+
| `note_list` | List notes for an item. |
|
|
191
|
+
| `note_get` | Read one note. |
|
|
192
|
+
| `note_update` | Update one note. |
|
|
193
|
+
| `artifact_add` | Attach a durable file path to the sprint. |
|
|
194
|
+
| `artifact_list` | List active artifacts. |
|
|
195
|
+
| `artifact_get` | Read one artifact record. |
|
|
196
|
+
| `artifact_update` | Update artifact metadata. |
|
|
197
|
+
|
|
198
|
+
### Dashboard Tools
|
|
199
|
+
|
|
200
|
+
| Tool | What it does |
|
|
201
|
+
| --- | --- |
|
|
202
|
+
| `dashboard_info` | Report whether the dashboard is running and, if so, its URL and port. |
|
|
203
|
+
| `dashboard_restart` | Restart the dashboard and return the new URL and port. |
|
|
204
|
+
|
|
205
|
+
## How Sprinty Stores Data
|
|
206
|
+
|
|
207
|
+
Sprinty writes one append-only JSONL ledger per sprint under `data_dir`. The ledger is local state;
|
|
208
|
+
keep it out of git unless you intentionally want to preserve it elsewhere. Sprinty projects that
|
|
209
|
+
ledger into compact read models for agents and into the dashboard for humans.
|
|
210
|
+
|
|
211
|
+
Completed items record the commit id, gate results, changelog entry, and Git-backed file change map.
|
|
212
|
+
`sprint_close` re-checks commits, re-runs executable gates, requires coverage evidence, and refuses
|
|
213
|
+
to close while any item is still open.
|
|
214
|
+
|
|
215
|
+
## More Documentation
|
|
216
|
+
|
|
217
|
+
- [How to run a sprint](skills/how-to-run-a-sprint/SKILL.md)
|
|
218
|
+
- [Full Sprinty tool contract](skills/using-sprinty/SKILL.md)
|
|
219
|
+
- [Codex client notes](clients/codex/README.md)
|
|
220
|
+
- [Gemini client notes](clients/gemini/GEMINI.md)
|
|
221
|
+
|
|
222
|
+
## Development
|
|
194
223
|
|
|
195
224
|
```bash
|
|
196
225
|
npm install
|
|
197
|
-
npm test
|
|
198
|
-
npm run
|
|
226
|
+
npm test
|
|
227
|
+
npm run typecheck
|
|
199
228
|
npm run build
|
|
200
229
|
```
|
|
201
230
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sprinty",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "Disciplined sprint workflow: dashboard-at-start, feature subsprints, artifacts, bug-id follow-ups, spike investigations, an immutable git-anchored ledger, and programmatic close gates.",
|
|
5
5
|
"author": { "name": "Elie Bursztein" },
|
|
6
6
|
"homepage": "https://github.com/ebursztein/sprinty",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sprinty",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"description": "Disciplined sprint workflow with dashboard-at-start, feature subsprints, artifacts, bug-id follow-ups, spike investigations, an immutable git-anchored ledger, and close gates.",
|
|
5
5
|
"contextFileName": "GEMINI.md",
|
|
6
6
|
"mcpServers": {
|