sprinty-mcp 0.1.13 → 0.1.15
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/.agents/plugins/marketplace.json +20 -0
- package/.claude-plugin/marketplace.json +25 -0
- package/README.md +59 -155
- package/clients/claude/.claude-plugin/plugin.json +3 -6
- package/clients/claude/.mcp.json +8 -0
- package/clients/claude/README.md +28 -0
- package/clients/claude/skills/how-to-run-a-sprint/SKILL.md +30 -0
- package/clients/claude/skills/using-sprinty/SKILL.md +62 -0
- package/clients/codex/README.md +21 -14
- package/clients/gemini/GEMINI.md +15 -18
- package/clients/gemini/gemini-extension.json +2 -2
- package/clients/gemini/skills/how-to-run-a-sprint/SKILL.md +30 -0
- package/clients/gemini/skills/using-sprinty/SKILL.md +62 -0
- package/dist/dashboard/ui/chart-windows.js +17 -9
- package/dist/dashboard/ui/chart-windows.js.map +1 -1
- package/dist/dashboard-ui/assets/{index-JnlbgBhS.js → index-BNmUzOs-.js} +12 -12
- package/dist/dashboard-ui/index.html +1 -1
- package/dist/server.js +4 -3
- package/dist/server.js.map +1 -1
- package/dist/tools/register.js +80 -23
- package/dist/tools/register.js.map +1 -1
- package/dist/tools/schemas.d.ts +14 -8
- package/dist/tools/schemas.js +6 -4
- package/dist/tools/schemas.js.map +1 -1
- package/docs/sprinty-dashboard.png +0 -0
- package/package.json +7 -5
- package/plugins/sprinty/.codex-plugin/plugin.json +32 -0
- package/plugins/sprinty/.mcp.json +6 -0
- package/plugins/sprinty/README.md +49 -0
- package/plugins/sprinty/skills/how-to-run-a-sprint/SKILL.md +30 -0
- package/plugins/sprinty/skills/using-sprinty/SKILL.md +62 -0
- package/skills/how-to-run-a-sprint/SKILL.md +2 -2
- package/skills/using-sprinty/SKILL.md +3 -3
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sprinty",
|
|
3
|
+
"interface": {
|
|
4
|
+
"displayName": "Sprinty"
|
|
5
|
+
},
|
|
6
|
+
"plugins": [
|
|
7
|
+
{
|
|
8
|
+
"name": "sprinty",
|
|
9
|
+
"source": {
|
|
10
|
+
"source": "local",
|
|
11
|
+
"path": "./plugins/sprinty"
|
|
12
|
+
},
|
|
13
|
+
"policy": {
|
|
14
|
+
"installation": "AVAILABLE",
|
|
15
|
+
"authentication": "ON_INSTALL"
|
|
16
|
+
},
|
|
17
|
+
"category": "Developer Tools"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sprinty",
|
|
3
|
+
"owner": {
|
|
4
|
+
"name": "Elie Bursztein",
|
|
5
|
+
"url": "https://github.com/ebursztein"
|
|
6
|
+
},
|
|
7
|
+
"description": "Sprinty plugins for Claude Code.",
|
|
8
|
+
"plugins": [
|
|
9
|
+
{
|
|
10
|
+
"name": "sprinty",
|
|
11
|
+
"source": "./clients/claude",
|
|
12
|
+
"description": "Disciplined sprint workflow with Sprinty skills and the sprinty-mcp server.",
|
|
13
|
+
"version": "0.1.15",
|
|
14
|
+
"author": {
|
|
15
|
+
"name": "Elie Bursztein",
|
|
16
|
+
"url": "https://github.com/ebursztein"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://github.com/ebursztein/sprinty",
|
|
19
|
+
"repository": "https://github.com/ebursztein/sprinty",
|
|
20
|
+
"license": "Apache-2.0",
|
|
21
|
+
"category": "Developer Tools",
|
|
22
|
+
"tags": ["mcp", "sprint", "workflow", "dashboard"]
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
package/README.md
CHANGED
|
@@ -1,191 +1,115 @@
|
|
|
1
1
|
# Sprinty
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/sprinty-mcp)
|
|
4
4
|
|
|
5
|
-
Sprinty is an MCP server
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
evidence.
|
|
5
|
+
Sprinty is an MCP server for running disciplined coding sprints with AI agents. It gives agents
|
|
6
|
+
server-minted sprint, subsprint, and item IDs; explicit dependencies; gate evidence; Git-backed
|
|
7
|
+
change maps; SemVer changelogs; and a local dashboard so humans can watch the work while it happens.
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+

|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
## Install
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- follow-up context disappears after a restart;
|
|
17
|
-
- humans cannot easily see what the agent is doing right now.
|
|
13
|
+
Sprinty is published to npm as `sprinty-mcp`. The npm package is the MCP server. Claude and Codex
|
|
14
|
+
plugin installs are distributed from this Git repository through each client's marketplace system.
|
|
18
15
|
|
|
19
|
-
|
|
16
|
+
### Claude Code
|
|
20
17
|
|
|
21
|
-
-
|
|
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.
|
|
18
|
+
MCP-only install:
|
|
29
19
|
|
|
30
|
-
|
|
20
|
+
```bash
|
|
21
|
+
claude mcp add sprinty -- npx -y sprinty-mcp
|
|
22
|
+
```
|
|
31
23
|
|
|
32
|
-
Sprinty
|
|
24
|
+
Plugin install, with Sprinty skills plus the MCP server:
|
|
33
25
|
|
|
34
26
|
```bash
|
|
35
|
-
|
|
27
|
+
claude plugin marketplace add ebursztein/sprinty
|
|
28
|
+
claude plugin install sprinty@sprinty
|
|
36
29
|
```
|
|
37
30
|
|
|
38
|
-
The
|
|
39
|
-
|
|
31
|
+
The Claude marketplace manifest is `.claude-plugin/marketplace.json`; the plugin bundle is
|
|
32
|
+
`clients/claude/`.
|
|
40
33
|
|
|
41
34
|
### Codex
|
|
42
35
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
```toml
|
|
46
|
-
[mcp_servers.sprinty]
|
|
47
|
-
command = "npx"
|
|
48
|
-
args = ["-y", "sprinty-mcp"]
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Claude Code
|
|
36
|
+
MCP-only install:
|
|
52
37
|
|
|
53
38
|
```bash
|
|
54
|
-
|
|
39
|
+
codex mcp add sprinty -- npx -y sprinty-mcp
|
|
55
40
|
```
|
|
56
41
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
### Gemini CLI
|
|
60
|
-
|
|
61
|
-
From a repository checkout:
|
|
42
|
+
Plugin install, with Sprinty skills plus the MCP server:
|
|
62
43
|
|
|
63
44
|
```bash
|
|
64
|
-
|
|
45
|
+
codex plugin marketplace add ebursztein/sprinty
|
|
46
|
+
codex plugin add sprinty@sprinty
|
|
65
47
|
```
|
|
66
48
|
|
|
67
|
-
The
|
|
49
|
+
The Codex marketplace manifest is `.agents/plugins/marketplace.json`; the plugin bundle is
|
|
50
|
+
`plugins/sprinty/`. Codex does not currently use an OpenAI npm plugin package for this flow.
|
|
68
51
|
|
|
69
|
-
###
|
|
52
|
+
### Gemini CLI
|
|
70
53
|
|
|
71
|
-
|
|
54
|
+
Use the MCP server directly from npm:
|
|
72
55
|
|
|
73
56
|
```bash
|
|
74
|
-
|
|
75
|
-
codex plugin add sprinty@sprinty-local
|
|
57
|
+
npx -y sprinty-mcp
|
|
76
58
|
```
|
|
77
59
|
|
|
78
|
-
The
|
|
60
|
+
The repository also includes a Gemini extension in `clients/gemini/` for clients that install local
|
|
61
|
+
Gemini extensions.
|
|
79
62
|
|
|
80
|
-
|
|
63
|
+
### Any MCP Client
|
|
81
64
|
|
|
82
|
-
|
|
83
|
-
paths:
|
|
65
|
+
Configure a stdio MCP server with:
|
|
84
66
|
|
|
85
67
|
```json
|
|
86
68
|
{
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"data_dir": "/absolute/path/to/repo/.sprinty",
|
|
90
|
-
"context_notes": ["optional notes for the agent"]
|
|
69
|
+
"command": "npx",
|
|
70
|
+
"args": ["-y", "sprinty-mcp"]
|
|
91
71
|
}
|
|
92
72
|
```
|
|
93
73
|
|
|
94
|
-
|
|
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:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
SPRINTY_GIT_DIR=/absolute/path/to/repo
|
|
109
|
-
SPRINTY_DATA_DIR=/absolute/path/to/repo/.sprinty
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
Both `SPRINTY_GIT_DIR` and `SPRINTY_DATA_DIR` are required together.
|
|
74
|
+
## Use
|
|
113
75
|
|
|
114
|
-
|
|
76
|
+
Sprinty never guesses the repository from the MCP server process cwd. Start or resume with explicit
|
|
77
|
+
paths:
|
|
115
78
|
|
|
116
79
|
```text
|
|
117
80
|
sprint_new({ goal, git_dir, data_dir, context_notes? })
|
|
118
|
-
|
|
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: { verb: "added" | "fixed" | "changed" | "removed" | "deprecated" | "security", line } })
|
|
124
|
-
changelog({ path? }) -> { path } // generates SemVer Markdown
|
|
125
|
-
sprint_close({ coverage: { path, format: "lcov", command? } }) // after changelog generation
|
|
126
|
-
```
|
|
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
|
-
}
|
|
81
|
+
sprint_resume({ git_dir, data_dir })
|
|
143
82
|
```
|
|
144
83
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
|
84
|
+
Use a worktree-local, gitignored `data_dir`, usually `<git_dir>/.sprinty`. When `data_dir` is
|
|
85
|
+
omitted and `git_dir` is provided, Sprinty uses `<git_dir>/.sprinty`. `sprint_new` and
|
|
86
|
+
`sprint_resume` return the dashboard URL. Call `info({ git_dir })` first for startup orientation and
|
|
87
|
+
compact sprint rows. Use `info({ workspace_dirs: [...] })` when you need to inspect multiple Sprinty
|
|
88
|
+
data dirs together, then `sprint_resume({ git_dir, data_dir })`.
|
|
155
89
|
|
|
156
|
-
|
|
90
|
+
## Tools
|
|
157
91
|
|
|
158
|
-
| Tool |
|
|
92
|
+
| Tool | Purpose |
|
|
159
93
|
| --- | --- |
|
|
94
|
+
| `info` | Startup orientation before binding, including sprint rows, resume/create help, and dashboard state. |
|
|
160
95
|
| `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
|
|
162
|
-
| `sprint_list` | List ledgers in a `data_dir` without creating a sprint. |
|
|
96
|
+
| `sprint_resume` | Reattach this MCP session to an existing sprint. |
|
|
163
97
|
| `sprint_detach` | Clear this MCP process binding and stop the dashboard. |
|
|
164
|
-
| `sprint_close` |
|
|
98
|
+
| `sprint_close` | Close only after all work is resolved, changelog exists, gates pass, and coverage is supplied. |
|
|
165
99
|
| `sprint_archive` | Archive an active sprint with a recovery reason. |
|
|
166
100
|
| `overview` | Compact sprint summary for orientation. |
|
|
167
|
-
| `next` | Compact active work window with
|
|
101
|
+
| `next` | Compact active work window with current, next, blocked, relations, notes, and artifacts. |
|
|
168
102
|
| `search` | Regex search over the immutable sprint ledger. |
|
|
169
|
-
| `changelog` | Generate
|
|
170
|
-
|
|
171
|
-
### Work Tools
|
|
172
|
-
|
|
173
|
-
| Tool | What it does |
|
|
174
|
-
| --- | --- |
|
|
103
|
+
| `changelog` | Generate SemVer Markdown and return the path. |
|
|
175
104
|
| `subsprint_new` | Create a feature-sized unit of work. |
|
|
176
105
|
| `subsprint_list` | List subsprints with compact item counts. |
|
|
177
106
|
| `subsprint_get` | Read one subsprint and its item rows. |
|
|
178
107
|
| `item_add` | Create one atomic, gated item. |
|
|
179
108
|
| `item_get` | Read full item detail. |
|
|
180
|
-
| `item_update` | Update item metadata,
|
|
181
|
-
| `item_done` | Complete an item with a real commit,
|
|
182
|
-
| `item_split` | Resolve an oversized item by creating a
|
|
109
|
+
| `item_update` | Update item metadata, priority, notes, or dependency edges. |
|
|
110
|
+
| `item_done` | Complete an item with a real commit, gate evidence, and changelog entry. |
|
|
111
|
+
| `item_split` | Resolve an oversized item by creating a seeded subsprint. |
|
|
183
112
|
| `item_deprecate` | Drop an item with an explicit reason. |
|
|
184
|
-
|
|
185
|
-
### Notes And Artifacts
|
|
186
|
-
|
|
187
|
-
| Tool | What it does |
|
|
188
|
-
| --- | --- |
|
|
189
113
|
| `note_add` | Attach a note to an item. |
|
|
190
114
|
| `note_list` | List notes for an item. |
|
|
191
115
|
| `note_get` | Read one note. |
|
|
@@ -194,41 +118,21 @@ Dashboard tools:
|
|
|
194
118
|
| `artifact_list` | List active artifacts. |
|
|
195
119
|
| `artifact_get` | Read one artifact record. |
|
|
196
120
|
| `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. |
|
|
121
|
+
| `dashboard_info` | Report the current dashboard URL and port. |
|
|
203
122
|
| `dashboard_restart` | Restart the dashboard and return the new URL and port. |
|
|
204
123
|
|
|
205
|
-
##
|
|
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
|
-
Call `changelog({ path? })` before close to generate the SemVer Markdown file from those entries.
|
|
213
|
-
`sprint_close` then re-checks commits, re-runs executable gates, requires coverage evidence, and
|
|
214
|
-
refuses to close while any item is still open.
|
|
215
|
-
|
|
216
|
-
## More Documentation
|
|
124
|
+
## Release
|
|
217
125
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
- [Codex client notes](clients/codex/README.md)
|
|
221
|
-
- [Gemini client notes](clients/gemini/GEMINI.md)
|
|
126
|
+
Publishing is gated by tests. The GitHub Release workflow runs `npm ci`, `npm test`, and only then
|
|
127
|
+
`npm publish --access public`.
|
|
222
128
|
|
|
223
|
-
|
|
129
|
+
Local checks:
|
|
224
130
|
|
|
225
131
|
```bash
|
|
226
|
-
npm install
|
|
227
132
|
npm test
|
|
228
133
|
npm run typecheck
|
|
229
|
-
npm run build
|
|
230
134
|
```
|
|
231
135
|
|
|
232
136
|
## License
|
|
233
137
|
|
|
234
|
-
Apache-2.0
|
|
138
|
+
Apache-2.0
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sprinty",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Disciplined sprint workflow
|
|
3
|
+
"version": "0.1.15",
|
|
4
|
+
"description": "Disciplined sprint workflow with dashboard-at-start, feature subsprints, artifacts, an immutable git-anchored ledger, and programmatic close gates.",
|
|
5
5
|
"author": { "name": "Elie Bursztein" },
|
|
6
6
|
"homepage": "https://github.com/ebursztein/sprinty",
|
|
7
7
|
"repository": "https://github.com/ebursztein/sprinty",
|
|
8
8
|
"license": "Apache-2.0",
|
|
9
|
-
"keywords": ["sprint", "discipline", "ledger", "mcp"]
|
|
10
|
-
"mcpServers": {
|
|
11
|
-
"sprinty": { "command": "npx", "args": ["-y", "sprinty-mcp"] }
|
|
12
|
-
}
|
|
9
|
+
"keywords": ["sprint", "discipline", "ledger", "mcp", "dashboard"]
|
|
13
10
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Sprinty for Claude Code
|
|
2
|
+
|
|
3
|
+
Install the MCP server directly:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
claude mcp add sprinty -- npx -y sprinty-mcp
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Install the full plugin from the Sprinty marketplace:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
claude plugin marketplace add ebursztein/sprinty
|
|
13
|
+
claude plugin install sprinty@sprinty
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
This plugin contains:
|
|
17
|
+
|
|
18
|
+
- `.claude-plugin/plugin.json`
|
|
19
|
+
- `.mcp.json`, which launches `npx -y sprinty-mcp`
|
|
20
|
+
- `skills/how-to-run-a-sprint`
|
|
21
|
+
- `skills/using-sprinty`
|
|
22
|
+
|
|
23
|
+
Validate before release:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
claude plugin validate clients/claude --strict
|
|
27
|
+
claude plugin validate . --strict
|
|
28
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: how-to-run-a-sprint
|
|
3
|
+
description: Use at the start of non-trivial implementation work that should be tracked in Sprinty with explicit binding, item ownership, gates, and close checks.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# How To Run A Sprint
|
|
7
|
+
|
|
8
|
+
A Sprinty sprint is item-driven. Do not keep parallel prose trackers when tools are available.
|
|
9
|
+
|
|
10
|
+
## Loop
|
|
11
|
+
|
|
12
|
+
1. Orient before binding. Call `info({ git_dir })` for the default `<git_dir>/.sprinty` ledger directory, `info({ data_dir })` for an explicit ledger directory, or `info({ workspace_dirs: [...] })` for a compact workspace view. Resume with `sprint_resume({ git_dir, data_dir? })`. Start fresh only with `sprint_new({ goal, git_dir, data_dir?, context_notes })`.
|
|
13
|
+
2. Share the dashboard URL returned by `sprint_new({})` or `sprint_resume({})`. Use `dashboard_info({})` to re-read it, `dashboard_restart({})` to refresh it, `overview({})` for compact orientation, and `next({})` for the active work window.
|
|
14
|
+
3. Create feature-sized subsprints with `subsprint_new({ description, goals, gates, dependencies })`.
|
|
15
|
+
4. Create atomic work with `item_add({ subsprint, title, description, code_locations, gates, dependencies, high_priority })`. If the work is too large, make more items; do not hide scope in notes.
|
|
16
|
+
5. Work against one owning item. Use `item_update({ id, note })` for progress, `item_update({ id, title, description, high_priority })` for metadata, `item_update({ id, dependencies })` to replace graph edges, `note_add({ id, text })` only for item-scoped observations, and `artifact_add({ title, path, description, related_items })` for durable files.
|
|
17
|
+
6. Resolve each item exactly once: `item_done({ id, commit_id, gate_results, changelog })`, `item_split({ id, description, goals, gates, dependencies })`, or `item_deprecate({ id, reason })`.
|
|
18
|
+
7. Use `search({ pattern, context_size:512 })`, `*_list`, and focused `*_get` tools when you need detail.
|
|
19
|
+
8. Generate the sprint changelog with `changelog({ path? })`; Sprinty writes SemVer Markdown and returns only the path.
|
|
20
|
+
9. Close only after the changelog exists: `sprint_close({ coverage:{ path, format:"lcov", command } })`.
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
|
|
24
|
+
- Never invent ids; read minted ids from tool results.
|
|
25
|
+
- Use explicit `git_dir`; `data_dir` defaults to `<git_dir>/.sprinty` when omitted. Never rely on MCP cwd.
|
|
26
|
+
- Keep responses compact. Prefer `next`, `overview`, `search`, and list/get pairs over full views. `next({})` returns all available high-priority items, then one normal available item per subsprint by default.
|
|
27
|
+
- Notes must be bound to an item id. Work needs an item.
|
|
28
|
+
- Gates prove items. `item_done` requires a real commit and passing evidence for every declared gate.
|
|
29
|
+
- `item_done` records each item's SemVer changelog verb and line; `changelog({ path? })` generates the Markdown file from those entries.
|
|
30
|
+
- `sprint_close` is the final gate and comes after changelog generation: it rejects open items, missing commits/changelog/coverage, and failing executable gates.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: using-sprinty
|
|
3
|
+
description: Use when an agent needs the exact Sprinty MCP tool contract, public tool names, compact response rules, restart recovery, or note/artifact/item semantics.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Using Sprinty
|
|
7
|
+
|
|
8
|
+
Prefer compact commands first. Lists are compact and say which `_get()` tool returns full detail. Mutating tools return acknowledgements plus `help`; do not expect or request full sprint dumps from mutations.
|
|
9
|
+
|
|
10
|
+
## Core Tools
|
|
11
|
+
|
|
12
|
+
| Tool | Input | Use |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| `info` | `{ git_dir?, data_dir?, workspace_dirs?[] }` | First-call orientation before binding. Returns startup workflow, resume/create help, dashboard state, and sprint rows with title, created time, and open/closed/blocked item counts. |
|
|
15
|
+
| `sprint_resume` | `{ git_dir, data_dir? }` | Rebind this MCP process to an existing sprint and return the dashboard URL. `data_dir` defaults to `<git_dir>/.sprinty`. Never call `sprint_new` as a resume trick. |
|
|
16
|
+
| `sprint_detach` | `{}` | Clear this process binding before resuming a different sprint. |
|
|
17
|
+
| `sprint_new` | `{ goal, git_dir, data_dir?, context_notes?[] }` | Start one sprint with explicit `git_dir`; `data_dir` defaults to `<git_dir>/.sprinty`. Returns the dashboard URL. |
|
|
18
|
+
| `overview` | `{}` | Compact sprint title/details/artifacts/subsprints/items. Use this to orient. |
|
|
19
|
+
| `next` | `{ past?=1, future_per_subsprint?=1, include_high_priority?=true }` | Compact active work window. Returns all available high-priority items first, then normal available items per subsprint. No full graph. |
|
|
20
|
+
| `search` | `{ pattern, context_size?=512 }` | Regex search. Returns `{ id, type, text, tool_call }`; use `tool_call` for full detail. |
|
|
21
|
+
| `dashboard_info` | `{}` | Current localhost dashboard URL and port, or `running:false` when stopped. |
|
|
22
|
+
| `dashboard_restart` | `{}` | Restart the dashboard server and return the new URL and port. |
|
|
23
|
+
|
|
24
|
+
## Work Tools
|
|
25
|
+
|
|
26
|
+
| Tool | Input | Use |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `subsprint_new` | `{ description, goals[], gates[], dependencies?[] }` | Create a feature-sized unit. |
|
|
29
|
+
| `subsprint_list` | `{}` | Compact subsprint rows. Use `subsprint_get({ id })` for full detail. |
|
|
30
|
+
| `subsprint_get` | `{ id }` | Full subsprint detail and compact item rows. |
|
|
31
|
+
| `item_add` | `{ subsprint, title, description, code_locations[], gates[], dependencies?[], high_priority? }` | Create an atomic item. Title 3-80 chars; description 20-500 chars. Oversized inputs mean create more than one item. |
|
|
32
|
+
| `item_get` | `{ id }` | Full item detail. |
|
|
33
|
+
| `item_update` | `{ id, note?, title?, description?, high_priority?, dependencies?[] }` | Mutate item metadata and/or replace dependency ids. Use `dependencies:[]` to remove all dependencies. |
|
|
34
|
+
| `item_done` | `{ id, commit_id, gate_results[], changelog }` | Complete an item. Commit must resolve; every declared gate needs passing evidence, and `changelog` supplies the SemVer verb plus line. |
|
|
35
|
+
| `item_split` | `{ id, description, goals[], gates[], dependencies?[] }` | Resolve an oversized item by creating a new subsprint. |
|
|
36
|
+
| `item_deprecate` | `{ id, reason }` | Resolve an item as intentionally dropped. |
|
|
37
|
+
|
|
38
|
+
## Notes And Artifacts
|
|
39
|
+
|
|
40
|
+
| Tool | Input | Use |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `note_add` | `{ id, text }` | Attach a note to an item id only. Notes do not replace items. |
|
|
43
|
+
| `note_list` | `{ id }` | Compact notes for an item. Use `note_get({ id:"N001" })` for full text. |
|
|
44
|
+
| `note_get` | `{ id }` | Full note detail. Note ids are `N001`, `N002`, ... |
|
|
45
|
+
| `note_update` | `{ id, text }` | Replace note text by note id. |
|
|
46
|
+
| `artifact_add` | `{ title, path, description?, related_items?[] }` | Attach a durable sprint file/output. |
|
|
47
|
+
| `artifact_list` | `{}` | Compact artifact rows. Use `artifact_get({ id })` for full detail. |
|
|
48
|
+
| `artifact_get` | `{ id }` | Full artifact detail including description. |
|
|
49
|
+
| `artifact_update` | `{ id, title?, path?, description?, related_items?[] }` | Amend artifact metadata. |
|
|
50
|
+
|
|
51
|
+
## Close
|
|
52
|
+
|
|
53
|
+
Sprinty generates the changelog for you. First call `changelog({ path? })` to write the SemVer Markdown file with sections, item entries, commits, coverage, and change-map tables; the response returns only `{ path }`. Then call `sprint_close({ coverage:{ path, format:"lcov", command? } })`; close re-runs executable gates and refuses open items, missing commits, missing changelog entries, missing coverage, or failing gates. Use `sprint_archive({ reason })` only for recovery.
|
|
54
|
+
|
|
55
|
+
## Rules
|
|
56
|
+
|
|
57
|
+
- Always minimize tokens: use `next`, `overview`, `*_list`, `search`, then focused `*_get`.
|
|
58
|
+
- Public id inputs are always named `id`.
|
|
59
|
+
- Notes attach only to item ids. If the note describes work, create one or more `item_add` items.
|
|
60
|
+
- `high_priority` is a boolean, not a ranked priority model. `next({})` promotes all available high-priority items before the per-subsprint normal window unless `include_high_priority:false`.
|
|
61
|
+
- Dependencies are ids. `item_update({ id, dependencies:[...] })` replaces the item's dependency set and rejects unknown ids, duplicates, and cycles.
|
|
62
|
+
- Tool responses omit timestamps and empty fields; the append-only ledger keeps audit data.
|
package/clients/codex/README.md
CHANGED
|
@@ -1,28 +1,35 @@
|
|
|
1
1
|
# Sprinty for Codex CLI
|
|
2
2
|
|
|
3
|
-
The supported command-line Codex plugin lives at `plugins/sprinty/`, with the repository
|
|
3
|
+
The supported command-line Codex plugin lives at `plugins/sprinty/`, with the repository
|
|
4
4
|
marketplace at `.agents/plugins/marketplace.json`. This directory is documentation only.
|
|
5
5
|
|
|
6
|
-
Install from
|
|
6
|
+
Install from GitHub:
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
codex plugin marketplace add ebursztein/sprinty
|
|
10
|
+
codex plugin add sprinty@sprinty
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Install from a local checkout:
|
|
7
14
|
|
|
8
15
|
```bash
|
|
9
16
|
codex plugin marketplace add .
|
|
10
|
-
codex plugin add sprinty@sprinty
|
|
17
|
+
codex plugin add sprinty@sprinty
|
|
11
18
|
```
|
|
12
19
|
|
|
13
20
|
Then start a new Codex CLI thread so the plugin skills and MCP server are loaded.
|
|
14
21
|
|
|
15
22
|
This marketplace layout is for Git/repo installs, not the npm tarball. The npm package provides the
|
|
16
|
-
MCP server used by the plugin (`npx -y sprinty-mcp`).
|
|
23
|
+
MCP server used by the plugin (`npx -y sprinty-mcp`). Codex does not currently use a standalone
|
|
24
|
+
OpenAI npm plugin package for this flow.
|
|
17
25
|
|
|
18
26
|
The installed plugin provides:
|
|
19
27
|
|
|
20
28
|
- Sprinty MCP tools through `npx -y sprinty-mcp`
|
|
21
29
|
- shared Sprinty skills from the canonical repository `skills/` directory
|
|
22
30
|
|
|
23
|
-
The
|
|
24
|
-
|
|
25
|
-
need per-client skill copies.
|
|
31
|
+
The plugin bundle contains its own `skills/` directory so Git marketplace installs remain
|
|
32
|
+
self-contained.
|
|
26
33
|
|
|
27
34
|
MCP-only setup without plugin skills:
|
|
28
35
|
|
|
@@ -32,13 +39,13 @@ codex mcp add sprinty -- npx -y sprinty-mcp
|
|
|
32
39
|
|
|
33
40
|
Sprinty does not infer state from Codex's MCP launch cwd. Start every sprint with explicit
|
|
34
41
|
`git_dir` and `data_dir`; `git_dir` is where commits, gates, coverage, and change maps run, while
|
|
35
|
-
`data_dir` stores the `current` pointer and JSONL ledgers.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
`data_dir` stores the `current` pointer and JSONL ledgers. When `data_dir` is omitted and `git_dir`
|
|
43
|
+
is provided, Sprinty uses `<git_dir>/.sprinty`. Call `info({ git_dir })` first for startup
|
|
44
|
+
orientation and compact sprint rows, or `info({ workspace_dirs: [...] })` to inspect multiple data
|
|
45
|
+
dirs. Then call `sprint_resume(git_dir, data_dir?)` to reattach without creating a new sprint. Use
|
|
46
|
+
`sprint_detach()` before switching one MCP process to another sprint. For read-only tools before
|
|
47
|
+
`sprint_new`, you may pre-bind with both `SPRINTY_GIT_DIR` and `SPRINTY_DATA_DIR` or both
|
|
48
|
+
`--git-dir` and `--data-dir`.
|
|
42
49
|
|
|
43
50
|
For human visibility during a sprint, open the dashboard URL returned by `sprint_new()` or
|
|
44
51
|
`sprint_resume()` in a browser. Use `dashboard_info()` to re-read it and `dashboard_restart()` to
|
package/clients/gemini/GEMINI.md
CHANGED
|
@@ -5,36 +5,33 @@ When a task is non-trivial, run a disciplined sprint with the sprinty MCP.
|
|
|
5
5
|
See `skills/how-to-run-a-sprint` and `skills/using-sprinty`. The loop:
|
|
6
6
|
|
|
7
7
|
```
|
|
8
|
-
|
|
9
|
-
sprint_new(goal, git_dir, data_dir
|
|
8
|
+
info(git_dir? | data_dir? | workspace_dirs?) -> sprint_resume(git_dir, data_dir?) | sprint_detach()
|
|
9
|
+
sprint_new(goal, git_dir, data_dir?, context_notes?)
|
|
10
10
|
-> dashboard URL in response | dashboard_info() | dashboard_restart()
|
|
11
11
|
-> subsprint_new(description, goals[], gates[], dependencies?)
|
|
12
|
-
-> spike(description, goals[], gates[], dependencies?)
|
|
13
12
|
-> next(past?, future_per_subsprint?, include_high_priority?)
|
|
14
|
-
->
|
|
13
|
+
-> item_add(subsprint, title, description, code_locations[], gates[], dependencies?, high_priority?)
|
|
15
14
|
-> item_update(id, note?, title?, description?, high_priority?, dependencies?)
|
|
16
|
-
-> artifact_add/list/
|
|
17
|
-
->
|
|
18
|
-
-> done(commit_id, gate_results[], changelog) | split(...) | deprecate(reason)
|
|
19
|
-
-> spike_conclude(subsprint, conclusion) | spike_deprecate(subsprint, reason)
|
|
15
|
+
-> artifact_add/list/get/update(...)
|
|
16
|
+
-> item_done(id, commit_id, gate_results[], changelog) | item_split(...) | item_deprecate(reason)
|
|
20
17
|
-> changelog()
|
|
21
18
|
-> sprint_close(coverage: { path, format: "lcov", command? })
|
|
22
19
|
```
|
|
23
20
|
|
|
24
21
|
Rules: IDs are minted by the server (`S01`, `S01-001`) — never invent them. Start with explicit
|
|
25
|
-
absolute `git_dir
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
absolute `git_dir`; `git_dir` is where commits/gates/coverage run. `data_dir` stores Sprinty's
|
|
23
|
+
`current` pointer and JSONL ledgers, and defaults to `<git_dir>/.sprinty` when omitted. After a
|
|
24
|
+
Codex/MCP restart, call `info({ git_dir })` or `info({ workspace_dirs:[...] })`, then use
|
|
25
|
+
`sprint_resume(git_dir, data_dir?)` to reattach without creating a new sprint; use `sprint_detach()`
|
|
26
|
+
before switching one MCP process to another sprint. Every item needs a
|
|
27
|
+
description, at least one code location, and at least one gate. `item_done` requires a real commit,
|
|
30
28
|
passing evidence for every declared item gate, and a semver-style changelog line with a verb such as
|
|
31
|
-
`added`, `fixed`, or `removed`. `
|
|
32
|
-
subsprint should be one feature
|
|
33
|
-
`
|
|
34
|
-
outputs and `follow_up()` with bug ids for bugs found while moving fast. `next()` returns the active
|
|
29
|
+
`added`, `fixed`, or `removed`. `item_split` and `item_deprecate` are terminal non-code exits. Each
|
|
30
|
+
subsprint should be one feature. Use `artifact_add/list/get/update` for durable
|
|
31
|
+
outputs. `next()` returns the active
|
|
35
32
|
work window with relevant artifacts and recent activity: all available `high_priority` items first
|
|
36
33
|
by default, then normal available items per subsprint. `item_update({ id, dependencies })` replaces
|
|
37
|
-
dependencies, so pass `dependencies: []` to remove a bad edge. `
|
|
34
|
+
dependencies, so pass `dependencies: []` to remove a bad edge. `item_done` records a Git-backed change map and each item's SemVer changelog entry. `changelog({ path? })` generates the SemVer Markdown file with
|
|
38
35
|
sections, item entries, commits, coverage, and change-map tables; run it before `sprint_close`. `sprint_close` rechecks commits, re-runs executable gates, requires
|
|
39
36
|
an LCOV coverage report path, and refuses to close on any blocker. Use `search(pattern,
|
|
40
37
|
context_lines)` to query the immutable ledger. Show the dashboard URL returned by `sprint_new()` or
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sprinty",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Disciplined sprint workflow with dashboard-at-start, feature subsprints, artifacts,
|
|
3
|
+
"version": "0.1.15",
|
|
4
|
+
"description": "Disciplined sprint workflow with dashboard-at-start, feature subsprints, artifacts, an immutable git-anchored ledger, and close gates.",
|
|
5
5
|
"contextFileName": "GEMINI.md",
|
|
6
6
|
"mcpServers": {
|
|
7
7
|
"sprinty": { "command": "npx", "args": ["-y", "sprinty-mcp"] }
|