ralphctl 0.1.4 → 0.2.1
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 +23 -14
- package/dist/{add-7LBVENXM.mjs → add-SEDQ3VK7.mjs} +4 -4
- package/dist/{add-DVEYDCTR.mjs → add-TGJTRHIF.mjs} +3 -3
- package/dist/{chunk-M7JV6MKD.mjs → chunk-AXNZMHFQ.mjs} +384 -96
- package/dist/{chunk-LFDW6MWF.mjs → chunk-KPTPKLXY.mjs} +16 -3
- package/dist/{chunk-PDI6HBZ7.mjs → chunk-LG6B7QVO.mjs} +1 -1
- package/dist/{chunk-YIB7QYU4.mjs → chunk-Q3VWJARJ.mjs} +2 -2
- package/dist/{chunk-F2MMCTB5.mjs → chunk-XPDI4SYI.mjs} +5 -4
- package/dist/{chunk-DZ6HHTM5.mjs → chunk-XQHEKKDN.mjs} +1 -1
- package/dist/{chunk-W3TY22IS.mjs → chunk-ZDEVRTGY.mjs} +10 -3
- package/dist/cli.mjs +174 -65
- package/dist/{create-MQ4OHZAX.mjs → create-DJHCP7LN.mjs} +3 -3
- package/dist/{handle-K2AZLTKU.mjs → handle-CCTBNAJZ.mjs} +1 -1
- package/dist/{project-Q4LKML42.mjs → project-ZYGNPVGL.mjs} +2 -2
- package/dist/prompts/ideate-auto.md +3 -2
- package/dist/prompts/ideate.md +2 -2
- package/dist/prompts/plan-auto.md +11 -8
- package/dist/prompts/plan-common.md +13 -8
- package/dist/prompts/plan-interactive.md +11 -10
- package/dist/prompts/task-evaluation.md +54 -0
- package/dist/prompts/task-execution.md +7 -5
- package/dist/{resolver-NH34HTB6.mjs → resolver-L52KR4GY.mjs} +2 -2
- package/dist/{sprint-UHYXSEBJ.mjs → sprint-LUXAV3Q3.mjs} +2 -2
- package/dist/{wizard-MCDDXLGE.mjs → wizard-TFJXEYD2.mjs} +6 -6
- package/package.json +17 -14
- package/schemas/config.schema.json +10 -0
- package/schemas/projects.schema.json +5 -0
- package/schemas/tasks.schema.json +9 -0
package/README.md
CHANGED
|
@@ -20,14 +20,18 @@
|
|
|
20
20
|
╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚══════╝
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
**
|
|
23
|
+
**Agent harness for long-running AI coding tasks — orchestrates [Claude Code](https://docs.anthropic.com/en/docs/claude-code) & [GitHub Copilot](https://docs.github.com/en/copilot/github-copilot-in-the-cli) across repositories.**
|
|
24
24
|
|
|
25
25
|
> _"I'm helping!"_ — Ralph Wiggum
|
|
26
26
|
|
|
27
27
|
> [!NOTE]
|
|
28
|
-
> **Early access.** RalphCTL is under active development. Things work, but expect rough edges and breaking changes
|
|
28
|
+
> **Early access.** RalphCTL is under active development. Things work, but expect rough edges and breaking changes
|
|
29
|
+
> before 1.0. Read the [blog post](https://lukasgrigis.dev/blog/building-ralphctl) for the backstory.
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
RalphCTL decomposes work into dependency-ordered tasks, executes them through AI coding agents, and runs a
|
|
32
|
+
[generator-evaluator loop](https://www.anthropic.com/engineering/harness-design-long-running-apps) to catch issues
|
|
33
|
+
before moving on. It manages context across sessions so nothing gets lost — whether you're working on a single ticket
|
|
34
|
+
or coordinating changes across multiple repositories. Ralph Wiggum personality included because why not.
|
|
31
35
|
|
|
32
36
|
---
|
|
33
37
|
|
|
@@ -43,7 +47,8 @@ This installs the `ralphctl` command globally.
|
|
|
43
47
|
|
|
44
48
|
- [Node.js](https://nodejs.org/) **>= 24.0.0**
|
|
45
49
|
- [Git](https://git-scm.com/)
|
|
46
|
-
- Either [Claude CLI](https://docs.anthropic.com/en/docs/claude-code)
|
|
50
|
+
- Either [Claude CLI](https://docs.anthropic.com/en/docs/claude-code)
|
|
51
|
+
or [GitHub Copilot CLI](https://docs.github.com/en/copilot/github-copilot-in-the-cli) installed and authenticated
|
|
47
52
|
|
|
48
53
|
### 2-Minute Quick Start
|
|
49
54
|
|
|
@@ -81,12 +86,13 @@ Or just run `ralphctl` with no arguments for an interactive menu that walks you
|
|
|
81
86
|
|
|
82
87
|
## Features
|
|
83
88
|
|
|
84
|
-
- **
|
|
85
|
-
- **
|
|
86
|
-
- **
|
|
87
|
-
- **Interactive or headless** — pair with Claude in a session, or let it run unattended
|
|
88
|
-
- **Sprint lifecycle** — state machine (draft -> active -> closed) with file locking for concurrent safety
|
|
89
|
+
- **Task decomposition** — breaks tickets into dependency-ordered tasks with topological sort
|
|
90
|
+
- **Generator-evaluator loop** — independent AI review after each task; iterates until quality passes or budget exhausted
|
|
91
|
+
- **Multi-repo orchestration** — coordinate changes across multiple repositories in a single run
|
|
89
92
|
- **Parallel execution** — one task per repo at a time, with automatic rate limit backoff and session resume
|
|
93
|
+
- **Two-phase planning** — clarify requirements first (what), then generate tasks (how), with a human approval gate
|
|
94
|
+
- **Context persistence** — state survives across sessions; interrupted work resumes where it left off
|
|
95
|
+
- **Interactive or headless** — pair with your AI agent in a session, or let it run unattended
|
|
90
96
|
- **Menu mode** — run `ralphctl` with no arguments for an interactive menu
|
|
91
97
|
|
|
92
98
|
---
|
|
@@ -141,7 +147,8 @@ Run `ralphctl <command> --help` for details on any command.
|
|
|
141
147
|
|
|
142
148
|
## AI Provider Configuration
|
|
143
149
|
|
|
144
|
-
RalphCTL supports **Claude Code** and **GitHub Copilot** as AI backends. Both use the same prompt templates and
|
|
150
|
+
RalphCTL supports **Claude Code** and **GitHub Copilot** as AI backends. Both use the same prompt templates and
|
|
151
|
+
workflow.
|
|
145
152
|
|
|
146
153
|
```bash
|
|
147
154
|
ralphctl config set provider claude # Use Claude Code
|
|
@@ -155,9 +162,9 @@ Auto-prompts on first AI command if not set. Both CLIs must be in your PATH and
|
|
|
155
162
|
| Feature | Claude Code | GitHub Copilot |
|
|
156
163
|
| --------------------------- | ------------------------------------ | -------------------------------------------------------------------- |
|
|
157
164
|
| Status | GA | Public preview |
|
|
158
|
-
| Headless execution | `-p --output-format json` | `-p -
|
|
159
|
-
| Session IDs | In JSON output (`session_id`) |
|
|
160
|
-
| Session resume (`--resume`) | Full support |
|
|
165
|
+
| Headless execution | `-p --output-format json` | `-p --output-format json --autopilot --no-ask-user` |
|
|
166
|
+
| Session IDs | In JSON output (`session_id`) | In JSON output (`session_id`), `--share` file as fallback |
|
|
167
|
+
| Session resume (`--resume`) | Full support | Full support |
|
|
161
168
|
| Per-tool permissions | Settings files + `--permission-mode` | `--allow-all-tools` (all-or-nothing by default) |
|
|
162
169
|
| Fine-grained tool control | `allow`/`deny` in settings files | `--allow-tool`, `--deny-tool` flags (not yet used) |
|
|
163
170
|
| Rate limit detection | Validated patterns | Borrowed from Claude — not yet validated against real Copilot errors |
|
|
@@ -214,7 +221,9 @@ This project follows the [Contributor Covenant](./CODE_OF_CONDUCT.md) code of co
|
|
|
214
221
|
|
|
215
222
|
## Security
|
|
216
223
|
|
|
217
|
-
To report a vulnerability,
|
|
224
|
+
To report a vulnerability,
|
|
225
|
+
use [GitHub's private reporting](https://github.com/lukas-grigis/ralphctl/security/advisories/new).
|
|
226
|
+
See [SECURITY.md](./SECURITY.md) for details.
|
|
218
227
|
|
|
219
228
|
---
|
|
220
229
|
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import {
|
|
3
3
|
addSingleTicketInteractive,
|
|
4
4
|
ticketAddCommand
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-XPDI4SYI.mjs";
|
|
6
6
|
import "./chunk-7TG3EAQ2.mjs";
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-LG6B7QVO.mjs";
|
|
8
|
+
import "./chunk-KPTPKLXY.mjs";
|
|
9
9
|
import "./chunk-OEUJDSHY.mjs";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-ZDEVRTGY.mjs";
|
|
11
11
|
import "./chunk-EDJX7TT6.mjs";
|
|
12
12
|
import "./chunk-QBXHAXHI.mjs";
|
|
13
13
|
export {
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import {
|
|
3
3
|
addCheckScriptToRepository,
|
|
4
4
|
projectAddCommand
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-Q3VWJARJ.mjs";
|
|
6
6
|
import "./chunk-7LZ6GOGN.mjs";
|
|
7
7
|
import "./chunk-7TG3EAQ2.mjs";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-LG6B7QVO.mjs";
|
|
9
9
|
import "./chunk-OEUJDSHY.mjs";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-ZDEVRTGY.mjs";
|
|
11
11
|
import "./chunk-EDJX7TT6.mjs";
|
|
12
12
|
import "./chunk-QBXHAXHI.mjs";
|
|
13
13
|
export {
|