Skip to content

Commit a602b47

Browse files
rubenmarcusclaude
andauthored
feat: linear interactive wizard command (#271)
* feat(wizard): add shared wizard utilities (credential prompt, browse-or-url) Shared utilities for integration wizards: - ensureCredentials(): check for existing auth, prompt for API key if missing - askBrowseOrUrl(): common "browse or paste URL" prompt - askForUrl(): URL input with domain validation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(wizard): add Linear interactive wizard command Interactive wizard for working with Linear issues: - Auth check (Linear CLI or API key) - Browse teams → projects → issues, or paste a URL - Priority badges in issue selector - Delegates to runCommand() for execution Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(cli): register ralph-starter linear command - Add linear wizard to CLI as top-level command - Add wizard fallback in run.ts for --from linear without project Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: add Linear wizard documentation and examples - Add interactive wizard section to Linear source docs - Add ralph-starter linear to README commands table Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: anchor regex patterns and use type over interface - Anchor Linear URL regex patterns with ^https?:// (CodeQL fix) - Change interface to type for plain data structures (Greptile) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent d240171 commit a602b47

5 files changed

Lines changed: 514 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ This creates:
471471
| `ralph-starter fix [task]` | Fix build errors, lint issues, or design problems |
472472
| `ralph-starter auto` | Batch-process issues from GitHub/Linear |
473473
| `ralph-starter task <action>` | Manage tasks across GitHub and Linear (list, create, update, close, comment) |
474+
| `ralph-starter linear` | Interactive Linear issues wizard |
474475
| `ralph-starter notion` | Interactive Notion pages wizard |
475476
| `ralph-starter integrations <action>` | Manage integrations (list, help, test, fetch) |
476477
| `ralph-starter plan` | Create implementation plan from specs |

docs/docs/sources/linear.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,38 @@ Get your API key from [Linear Settings > API > Personal API keys](https://linear
1717
ralph-starter config set linear.apiKey lin_api_xxxxxxxxxxxx
1818
```
1919

20+
## Interactive Wizard
21+
22+
The easiest way to get started:
23+
24+
```bash
25+
ralph-starter linear
26+
```
27+
28+
This will:
29+
1. Check your authentication (prompt for API key if needed)
30+
2. Let you select a team, then browse projects or issues
31+
3. Start the build loop automatically
32+
33+
You can also paste a Linear issue URL directly when prompted.
34+
35+
### Wizard Options
36+
37+
```bash
38+
ralph-starter linear --commit # Auto-commit after tasks
39+
ralph-starter linear --push # Push commits to remote
40+
ralph-starter linear --pr # Create PR when done
41+
ralph-starter linear --agent claude-code # Use a specific agent
42+
```
43+
44+
### Fallback
45+
46+
If you run `--from linear` without specifying a project, the wizard launches automatically:
47+
48+
```bash
49+
ralph-starter run --from linear # Launches wizard
50+
```
51+
2052
## Usage
2153

2254
```bash

src/cli.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { figmaCommand } from './commands/figma.js';
1010
import { fixCommand } from './commands/fix.js';
1111
import { initCommand } from './commands/init.js';
1212
import { integrationsCommand } from './commands/integrations.js';
13+
import { linearCommand } from './commands/linear.js';
1314
import { notionCommand } from './commands/notion.js';
1415
import { pauseCommand } from './commands/pause.js';
1516
import { planCommand } from './commands/plan.js';
@@ -188,6 +189,28 @@ program
188189
});
189190
});
190191

192+
// ralph-starter linear - Linear issues wizard
193+
program
194+
.command('linear')
195+
.description('Build from Linear issues with an interactive wizard')
196+
.option('--commit', 'Auto-commit after tasks')
197+
.option('--push', 'Push to remote')
198+
.option('--pr', 'Create PR when done')
199+
.option('--validate', 'Run validation', true)
200+
.option('--no-validate', 'Skip validation')
201+
.option('--max-iterations <n>', 'Max loop iterations')
202+
.option('--agent <name>', 'Agent to use')
203+
.action(async (options) => {
204+
await linearCommand({
205+
commit: options.commit,
206+
push: options.push,
207+
pr: options.pr,
208+
validate: options.validate,
209+
maxIterations: options.maxIterations ? parseInt(options.maxIterations, 10) : undefined,
210+
agent: options.agent,
211+
});
212+
});
213+
191214
// ralph-starter notion - Notion pages wizard
192215
program
193216
.command('notion')

0 commit comments

Comments
 (0)