shapeup-cli 0.3.2
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.
- checksums.yaml +7 -0
- data/bin/shapeup +7 -0
- data/install.md +94 -0
- data/lib/shapeup_cli/auth.rb +199 -0
- data/lib/shapeup_cli/client.rb +94 -0
- data/lib/shapeup_cli/commands/auth.rb +127 -0
- data/lib/shapeup_cli/commands/base.rb +113 -0
- data/lib/shapeup_cli/commands/comments.rb +86 -0
- data/lib/shapeup_cli/commands/config_cmd.rb +143 -0
- data/lib/shapeup_cli/commands/cycle.rb +66 -0
- data/lib/shapeup_cli/commands/issues.rb +336 -0
- data/lib/shapeup_cli/commands/login.rb +73 -0
- data/lib/shapeup_cli/commands/logout.rb +12 -0
- data/lib/shapeup_cli/commands/my_work.rb +38 -0
- data/lib/shapeup_cli/commands/orgs.rb +35 -0
- data/lib/shapeup_cli/commands/pitches.rb +170 -0
- data/lib/shapeup_cli/commands/scopes.rb +96 -0
- data/lib/shapeup_cli/commands/search.rb +33 -0
- data/lib/shapeup_cli/commands/setup.rb +85 -0
- data/lib/shapeup_cli/commands/tasks.rb +100 -0
- data/lib/shapeup_cli/commands.rb +161 -0
- data/lib/shapeup_cli/config.rb +155 -0
- data/lib/shapeup_cli/output.rb +230 -0
- data/lib/shapeup_cli.rb +137 -0
- data/skills/shapeup/SKILL.md +333 -0
- metadata +70 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: shapeup
|
|
3
|
+
description: |
|
|
4
|
+
Manage ShapeUp via the ShapeUp CLI. Full coverage: pitches, scopes, tasks, cycles,
|
|
5
|
+
hill charts, assignments, comments, search, issues, and streams.
|
|
6
|
+
Use for ANY ShapeUp question or action.
|
|
7
|
+
triggers:
|
|
8
|
+
# Direct invocations
|
|
9
|
+
- shapeup
|
|
10
|
+
- /shapeup
|
|
11
|
+
# Resource actions
|
|
12
|
+
- shapeup pitch
|
|
13
|
+
- shapeup scope
|
|
14
|
+
- shapeup task
|
|
15
|
+
- shapeup cycle
|
|
16
|
+
- shapeup issue
|
|
17
|
+
- shapeup issues
|
|
18
|
+
# Common actions
|
|
19
|
+
- create pitch
|
|
20
|
+
- create scope
|
|
21
|
+
- create task
|
|
22
|
+
- create issue
|
|
23
|
+
- complete task
|
|
24
|
+
- mark done
|
|
25
|
+
- move issue
|
|
26
|
+
- icebox issue
|
|
27
|
+
- defrost issue
|
|
28
|
+
- assign issue
|
|
29
|
+
- unassign issue
|
|
30
|
+
- watch issue
|
|
31
|
+
- triage
|
|
32
|
+
- triage issues
|
|
33
|
+
# Shape Up concepts
|
|
34
|
+
- hill chart
|
|
35
|
+
- betting table
|
|
36
|
+
- appetite
|
|
37
|
+
- cooldown
|
|
38
|
+
- shaped
|
|
39
|
+
- framed
|
|
40
|
+
# My work
|
|
41
|
+
- my work
|
|
42
|
+
- my tasks
|
|
43
|
+
- my scopes
|
|
44
|
+
- assigned to me
|
|
45
|
+
- my pitches
|
|
46
|
+
- my issues
|
|
47
|
+
- watched issues
|
|
48
|
+
# Search and discovery
|
|
49
|
+
- search shapeup
|
|
50
|
+
- find in shapeup
|
|
51
|
+
- check shapeup
|
|
52
|
+
- list pitches
|
|
53
|
+
- list cycles
|
|
54
|
+
- show cycle
|
|
55
|
+
# Questions
|
|
56
|
+
- what's in shapeup
|
|
57
|
+
- what cycle
|
|
58
|
+
- cycle progress
|
|
59
|
+
- pitch status
|
|
60
|
+
- scope progress
|
|
61
|
+
invocable: true
|
|
62
|
+
argument-hint: "[action] [args...]"
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
# /shapeup - ShapeUp Workflow Command
|
|
66
|
+
|
|
67
|
+
Manage pitches, scopes, tasks, issues, and cycles via the ShapeUp CLI. Columns and streams accept names (not just IDs) — use `--column triage`, `--stream "Platform"`, etc.
|
|
68
|
+
|
|
69
|
+
## Agent Invariants
|
|
70
|
+
|
|
71
|
+
**MUST follow these rules:**
|
|
72
|
+
|
|
73
|
+
0. **Show context first** — before executing any command, run `shapeup config show` and tell the user which organisation and host is active. This avoids confusion when working across multiple orgs.
|
|
74
|
+
1. **Choose the right output mode** — `--json` for chaining and automation; `--md` when presenting results to a human in conversation.
|
|
75
|
+
2. **Set organisation context** — most commands require an org. Set once with `shapeup config set org "Name"` or pass `--org <name|id>` per command. Per-directory config via `shapeup config init "Name"`.
|
|
76
|
+
3. **Use names, not IDs** — columns (`--column triage`), streams (`--stream "Platform"`), and orgs (`--org "Compass Labs"`) all accept names.
|
|
77
|
+
4. **Follow breadcrumbs** — JSON responses include a `breadcrumbs` array with suggested next commands. Use these to chain workflows.
|
|
78
|
+
5. **"Pitch" = "Package" in code** — users say "pitch", the API uses "package". The CLI uses "pitch" everywhere.
|
|
79
|
+
6. **Use 'me' and 'none'** — `--assignee me` for current user, `--assignee none` for unassigned items.
|
|
80
|
+
7. **Check exit codes** — 0=OK, 2=not found, 3=auth error, 4=permission denied, 5=API error. Branch on exit code without parsing error text.
|
|
81
|
+
|
|
82
|
+
### Output Modes
|
|
83
|
+
|
|
84
|
+
| Goal | Flag |
|
|
85
|
+
|------|------|
|
|
86
|
+
| Chain commands / automation | `--json` |
|
|
87
|
+
| Show results to a human | `--md` |
|
|
88
|
+
| Raw data for scripts | `--agent` / `--quiet` |
|
|
89
|
+
| Just IDs | `--ids-only` |
|
|
90
|
+
| Piped output | auto-switches to `--json` |
|
|
91
|
+
|
|
92
|
+
### Exit Codes
|
|
93
|
+
|
|
94
|
+
| Code | Meaning |
|
|
95
|
+
|------|---------|
|
|
96
|
+
| 0 | Success |
|
|
97
|
+
| 1 | Usage error |
|
|
98
|
+
| 2 | Not found |
|
|
99
|
+
| 3 | Auth error |
|
|
100
|
+
| 4 | Permission denied |
|
|
101
|
+
| 5 | API error |
|
|
102
|
+
| 6 | Rate limited |
|
|
103
|
+
| 130 | Interrupted (Ctrl-C) |
|
|
104
|
+
|
|
105
|
+
## Quick Reference
|
|
106
|
+
|
|
107
|
+
| Task | Command |
|
|
108
|
+
|------|---------|
|
|
109
|
+
| **Auth & Context** | |
|
|
110
|
+
| Login | `shapeup login` |
|
|
111
|
+
| Auth status | `shapeup auth status` |
|
|
112
|
+
| List orgs | `shapeup orgs --json` |
|
|
113
|
+
| Show current org | `shapeup config show` |
|
|
114
|
+
| Set default org | `shapeup config set org "Compass Labs"` |
|
|
115
|
+
| Per-directory config | `shapeup config init "Compass Labs"` |
|
|
116
|
+
| Install skill | `shapeup setup claude` |
|
|
117
|
+
| **Issues** | |
|
|
118
|
+
| List open issues | `shapeup issues --json` |
|
|
119
|
+
| Include done/closed | `shapeup issues --all --json` |
|
|
120
|
+
| Triage queue | `shapeup issues --column triage --json` |
|
|
121
|
+
| Unassigned triage | `shapeup issues --column triage --assignee none --json` |
|
|
122
|
+
| My issues | `shapeup issues --assignee me --json` |
|
|
123
|
+
| Filter by tag | `shapeup issues --tag seo --json` |
|
|
124
|
+
| Filter by stream | `shapeup issues --stream "Platform" --json` |
|
|
125
|
+
| Show issue detail | `shapeup issue <id> --json` |
|
|
126
|
+
| Create issue | `shapeup issues create "Title" --stream "Platform"` |
|
|
127
|
+
| Move to column | `shapeup issues move <id> --column doing` |
|
|
128
|
+
| Mark issue done | `shapeup issues done <id>` |
|
|
129
|
+
| Close issue (won't fix) | `shapeup issues close <id>` |
|
|
130
|
+
| Reopen issue | `shapeup issues reopen <id>` |
|
|
131
|
+
| Icebox / defrost | `shapeup issues icebox <id>` / `defrost <id>` |
|
|
132
|
+
| Assign to issue | `shapeup issues assign <id>` (self) / `--user <id>` |
|
|
133
|
+
| Unassign from issue | `shapeup issues unassign <id>` (self) / `--user <id>` |
|
|
134
|
+
| Watch / unwatch | `shapeup issues watch <id>` / `unwatch <id>` |
|
|
135
|
+
| My watched issues | `shapeup watching --json` |
|
|
136
|
+
| **Comments** | |
|
|
137
|
+
| List comments on issue | `shapeup comments list --issue <id> --json` |
|
|
138
|
+
| List comments on pitch | `shapeup comments list --pitch <id> --json` |
|
|
139
|
+
| Add comment to issue | `shapeup comments add --issue <id> "Comment text"` |
|
|
140
|
+
| Add comment to pitch | `shapeup comments add --pitch <id> "Comment text"` |
|
|
141
|
+
| **Pitches** | |
|
|
142
|
+
| List pitches | `shapeup pitches list --json` |
|
|
143
|
+
| List shaped only | `shapeup pitches list --status shaped --json` |
|
|
144
|
+
| Show pitch detail | `shapeup pitch <id> --json` |
|
|
145
|
+
| Create pitch | `shapeup pitches create "Title" --stream "Name"` |
|
|
146
|
+
| Create with appetite | `shapeup pitches create "Title" --stream "Name" --appetite small_batch` |
|
|
147
|
+
| **Cycles** | |
|
|
148
|
+
| List cycles | `shapeup cycles --json` |
|
|
149
|
+
| Active cycles | `shapeup cycles --status active --json` |
|
|
150
|
+
| Show cycle | `shapeup cycle show <id> --json` |
|
|
151
|
+
| **Scopes & Tasks** | |
|
|
152
|
+
| List scopes | `shapeup scopes list --pitch <id> --json` |
|
|
153
|
+
| Create scope | `shapeup scopes create --pitch <id> "Title"` |
|
|
154
|
+
| Update hill position | `shapeup scopes position <id> <0-100>` |
|
|
155
|
+
| List tasks | `shapeup tasks list --pitch <id> --json` |
|
|
156
|
+
| Create task | `shapeup todo "Description" --pitch <id>` |
|
|
157
|
+
| Complete task(s) | `shapeup done <id> [<id>...]` |
|
|
158
|
+
| **My Work** | |
|
|
159
|
+
| All my assignments | `shapeup me --json` |
|
|
160
|
+
| My work (alias) | `shapeup my-work --json` |
|
|
161
|
+
| Search everything | `shapeup search "query" --json` |
|
|
162
|
+
|
|
163
|
+
## Common Workflows
|
|
164
|
+
|
|
165
|
+
### Triage Issues
|
|
166
|
+
|
|
167
|
+
The most common workflow. Review unassigned issues in the triage column.
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# 1. Check context
|
|
171
|
+
shapeup config show
|
|
172
|
+
|
|
173
|
+
# 2. Get unassigned triage issues
|
|
174
|
+
shapeup issues --column triage --assignee none --json
|
|
175
|
+
|
|
176
|
+
# 3. Review the top issue
|
|
177
|
+
shapeup issue <id> --json
|
|
178
|
+
|
|
179
|
+
# 4. If it has a github_url, check the GitHub issue for more detail
|
|
180
|
+
|
|
181
|
+
# 5. Search the codebase for related code if it's a bug
|
|
182
|
+
|
|
183
|
+
# 6. Either:
|
|
184
|
+
# - Fix it and mark done
|
|
185
|
+
shapeup issues done <id>
|
|
186
|
+
# - Close it (won't fix)
|
|
187
|
+
shapeup issues close <id>
|
|
188
|
+
# - Assign to someone
|
|
189
|
+
shapeup issues assign <id> --user <id>
|
|
190
|
+
# - Icebox if not actionable
|
|
191
|
+
shapeup issues icebox <id>
|
|
192
|
+
# - Promote to a pitch if it's too big for an issue
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Review a Pitch
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Show the pitch with all scopes and tasks
|
|
199
|
+
shapeup pitch <id> --json
|
|
200
|
+
|
|
201
|
+
# Check scope progress
|
|
202
|
+
shapeup scopes list --pitch <id> --json
|
|
203
|
+
|
|
204
|
+
# List open tasks
|
|
205
|
+
shapeup tasks list --pitch <id> --json
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Check Cycle Health
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
shapeup cycles --status active --json
|
|
212
|
+
shapeup cycle show <id> --json
|
|
213
|
+
shapeup pitch <id> --json
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Daily Standup
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
shapeup me --md
|
|
220
|
+
shapeup done 123 124 125
|
|
221
|
+
shapeup me --md
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Fix and Close Issue
|
|
225
|
+
|
|
226
|
+
When you fix a bug or resolve an issue from ShapeUp, close the loop by commenting and marking it done.
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# 1. Get the commit hash and GitHub remote
|
|
230
|
+
git log --oneline -1
|
|
231
|
+
git remote get-url origin
|
|
232
|
+
|
|
233
|
+
# 2. Comment on the issue with what was done, linking the commit
|
|
234
|
+
shapeup comments add --issue <id> "Summary of changes. Commit: https://github.com/<owner>/<repo>/commit/<hash> — Resolved by Claude Code."
|
|
235
|
+
|
|
236
|
+
# 3. Mark the issue done
|
|
237
|
+
shapeup issues done <id>
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Always include: what changed, the commit link (full GitHub URL, not markdown — markdown links get escaped), and that it was resolved by Claude Code.
|
|
241
|
+
|
|
242
|
+
### Create Work
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# Create a pitch
|
|
246
|
+
shapeup pitches create "Redesign Search" --stream "Platform"
|
|
247
|
+
shapeup pitches create "Auth Overhaul" --stream "Platform" --appetite small_batch
|
|
248
|
+
|
|
249
|
+
# Add scope to a pitch
|
|
250
|
+
shapeup scopes create --pitch 42 "User onboarding"
|
|
251
|
+
|
|
252
|
+
# Update hill chart position
|
|
253
|
+
shapeup scopes position 7 50 # peak — fully understood
|
|
254
|
+
shapeup scopes position 7 80 # descending — executing
|
|
255
|
+
|
|
256
|
+
# Add tasks
|
|
257
|
+
shapeup todo "Design signup flow" --pitch 42 --scope <scope_id>
|
|
258
|
+
|
|
259
|
+
# Report a bug
|
|
260
|
+
shapeup issues create "Login timeout" --stream "Platform" --kind bug
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## Decision Trees
|
|
264
|
+
|
|
265
|
+
### Finding Content
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
├── My work? → shapeup me --json
|
|
269
|
+
├── Triage queue? → shapeup issues --column triage --json
|
|
270
|
+
├── Issues I'm watching? → shapeup watching --json
|
|
271
|
+
├── Pitch detail? → shapeup pitch <id> --json
|
|
272
|
+
├── Cycle progress? → shapeup cycle show <id> --json
|
|
273
|
+
├── Search? → shapeup search "query" --json
|
|
274
|
+
└── Which org? → shapeup config show
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Acting on Issues
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
├── Mark issue done → shapeup issues done <id>
|
|
281
|
+
├── Close (won't fix) → shapeup issues close <id>
|
|
282
|
+
├── Reopen → shapeup issues reopen <id>
|
|
283
|
+
├── Move to column → shapeup issues move <id> --column doing
|
|
284
|
+
├── Icebox stale issue → shapeup issues icebox <id>
|
|
285
|
+
├── Defrost from icebox → shapeup issues defrost <id>
|
|
286
|
+
├── Assign to me → shapeup issues assign <id>
|
|
287
|
+
├── Assign to user → shapeup issues assign <id> --user <id>
|
|
288
|
+
├── Unassign me → shapeup issues unassign <id>
|
|
289
|
+
├── Watch for updates → shapeup issues watch <id>
|
|
290
|
+
├── Create new issue → shapeup issues create "Title" --stream "Name"
|
|
291
|
+
└── Triage unassigned → shapeup issues --column triage --assignee none --json
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## Shape Up Concepts
|
|
295
|
+
|
|
296
|
+
- **Pitch** (Package): Product initiative. Progresses: idea → framed → shaped.
|
|
297
|
+
- **Appetite**: Time budget (1 week, 2 weeks, 6 weeks). NOT an estimate.
|
|
298
|
+
- **Cycle**: 6-week development period. Pitches are "bet" on a cycle.
|
|
299
|
+
- **Scope**: Vertical slice of work within a pitch (1-2 weeks). Max 9 per pitch.
|
|
300
|
+
- **Task**: Individual work item within a scope.
|
|
301
|
+
- **Hill Chart**: Progress tracker. 0-50 = unknown, 50 = peak, 50-100 = known.
|
|
302
|
+
- **Issue**: Bug or small request. Managed on a kanban board. Mark as done or closed when resolved.
|
|
303
|
+
- **Icebox**: Archive for stale issues. Auto-archives after 30 days of inactivity.
|
|
304
|
+
- **Horizon**: Speculative planning view for future cycles.
|
|
305
|
+
|
|
306
|
+
## Configuration
|
|
307
|
+
|
|
308
|
+
### Resolution Order
|
|
309
|
+
|
|
310
|
+
`--org` flag > `.shapeup/config.json` (per-directory) > `~/.config/shapeup/config.json` (global)
|
|
311
|
+
|
|
312
|
+
### Per-Directory Config (Recommended)
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
shapeup config init "Compass Labs"
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
Creates `.shapeup/config.json` in the current directory. All commands in this directory use this org.
|
|
319
|
+
|
|
320
|
+
### Global Config
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
shapeup config set org "Compass Labs"
|
|
324
|
+
shapeup config set host https://shapeup.cc
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Environment Variables
|
|
328
|
+
|
|
329
|
+
| Variable | Purpose |
|
|
330
|
+
|----------|---------|
|
|
331
|
+
| `SHAPEUP_TOKEN` | Bearer token (skips OAuth) |
|
|
332
|
+
| `SHAPEUP_ORG` | Default organisation ID |
|
|
333
|
+
| `SHAPEUP_HOST` | API host URL (default: https://shapeup.cc) |
|
metadata
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: shapeup-cli
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.3.2
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- ShapeUp
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
12
|
+
description: Command-line interface for ShapeUp, the Shape Up methodology platform.
|
|
13
|
+
Works with any AI agent that can execute shell commands. Zero dependencies — pure
|
|
14
|
+
Ruby stdlib.
|
|
15
|
+
email:
|
|
16
|
+
- hello@shapeup.cc
|
|
17
|
+
executables:
|
|
18
|
+
- shapeup
|
|
19
|
+
extensions: []
|
|
20
|
+
extra_rdoc_files: []
|
|
21
|
+
files:
|
|
22
|
+
- bin/shapeup
|
|
23
|
+
- install.md
|
|
24
|
+
- lib/shapeup_cli.rb
|
|
25
|
+
- lib/shapeup_cli/auth.rb
|
|
26
|
+
- lib/shapeup_cli/client.rb
|
|
27
|
+
- lib/shapeup_cli/commands.rb
|
|
28
|
+
- lib/shapeup_cli/commands/auth.rb
|
|
29
|
+
- lib/shapeup_cli/commands/base.rb
|
|
30
|
+
- lib/shapeup_cli/commands/comments.rb
|
|
31
|
+
- lib/shapeup_cli/commands/config_cmd.rb
|
|
32
|
+
- lib/shapeup_cli/commands/cycle.rb
|
|
33
|
+
- lib/shapeup_cli/commands/issues.rb
|
|
34
|
+
- lib/shapeup_cli/commands/login.rb
|
|
35
|
+
- lib/shapeup_cli/commands/logout.rb
|
|
36
|
+
- lib/shapeup_cli/commands/my_work.rb
|
|
37
|
+
- lib/shapeup_cli/commands/orgs.rb
|
|
38
|
+
- lib/shapeup_cli/commands/pitches.rb
|
|
39
|
+
- lib/shapeup_cli/commands/scopes.rb
|
|
40
|
+
- lib/shapeup_cli/commands/search.rb
|
|
41
|
+
- lib/shapeup_cli/commands/setup.rb
|
|
42
|
+
- lib/shapeup_cli/commands/tasks.rb
|
|
43
|
+
- lib/shapeup_cli/config.rb
|
|
44
|
+
- lib/shapeup_cli/output.rb
|
|
45
|
+
- skills/shapeup/SKILL.md
|
|
46
|
+
homepage: https://github.com/shapeupcc/shapeup-cli
|
|
47
|
+
licenses:
|
|
48
|
+
- MIT
|
|
49
|
+
metadata:
|
|
50
|
+
homepage_uri: https://github.com/shapeupcc/shapeup-cli
|
|
51
|
+
source_code_uri: https://github.com/shapeupcc/shapeup-cli
|
|
52
|
+
bug_tracker_uri: https://github.com/shapeupcc/shapeup-cli/issues
|
|
53
|
+
rdoc_options: []
|
|
54
|
+
require_paths:
|
|
55
|
+
- lib
|
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '3.1'
|
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
62
|
+
requirements:
|
|
63
|
+
- - ">="
|
|
64
|
+
- !ruby/object:Gem::Version
|
|
65
|
+
version: '0'
|
|
66
|
+
requirements: []
|
|
67
|
+
rubygems_version: 3.6.9
|
|
68
|
+
specification_version: 4
|
|
69
|
+
summary: ShapeUp CLI — manage pitches, scopes, tasks, and cycles from the terminal
|
|
70
|
+
test_files: []
|