You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: resolve {{ args.* }} placeholders in command run strings
Args placeholders in command `run` fields were never resolved before
execution, causing shlex.split to tokenize them into multiple tokens.
Now resolve_args() is called on each command's run string before
execution, matching the behavior already applied to the prompt body.
Closes#20
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/changelog.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,14 @@ keywords: ralphify changelog, release history, new features, version updates, br
7
7
8
8
All notable changes to ralphify are documented here.
9
9
10
+
## 0.2.1 — 2026-03-21
11
+
12
+
### Fixed
13
+
14
+
-**`{{ args.* }}` placeholders now resolved in command `run` strings** — previously, arg placeholders were only resolved in the prompt body. Commands like `run: gh issue view {{ args.issue }}` would fail because `shlex.split` tokenized the raw placeholder into multiple arguments. Args are now resolved before command execution.
15
+
16
+
---
17
+
10
18
## 0.2.0 — 2026-03-21
11
19
12
20
The v2 rewrite. Ralphify is now simpler: a ralph is a directory with a `RALPH.md` file. No more `ralph.toml`, no more `.ralphify/` directory, no more `ralph init`. Everything lives in one file.
Copy file name to clipboardExpand all lines: docs/how-it-works.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -37,7 +37,7 @@ Command output is captured **regardless of exit code** — a command like `pytes
37
37
38
38
### 3. Resolve placeholders
39
39
40
-
Each `{{ commands.<name> }}` placeholder in the prompt body is replaced with the corresponding command's output. Placeholders for `{{ args.<name> }}` are replaced with user argument values from the CLI.
40
+
Each `{{ commands.<name> }}` placeholder in the prompt body is replaced with the corresponding command's output. Placeholders for `{{ args.<name> }}` are replaced with user argument values from the CLI — both in the prompt body and in command `run` strings.
41
41
42
42
Unmatched placeholders resolve to an empty string — you won't see raw `{{ }}` text in the assembled prompt.
Copy file name to clipboardExpand all lines: docs/writing-prompts.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -304,7 +304,7 @@ Rules of thumb:
304
304
305
305
-**Core prompt:** 20-50 lines is the sweet spot. Enough to be specific, short enough to leave room for work.
306
306
-**Commands:** Pick the 2-3 most useful signals. Don't add commands whose output the agent doesn't need.
307
-
-**User args:** Use `{{ args.name }}` to make ralphs reusable — pass project-specific values from the CLI instead of hardcoding them in the prompt.
307
+
-**User args:** Use `{{ args.name }}` to make ralphs reusable — pass project-specific values from the CLI instead of hardcoding them in the prompt. Args also work in command `run` strings (e.g., `run: gh issue view {{ args.issue }}`).
308
308
-**Command output:** Can be long. If your commands produce verbose output, consider using scripts that filter to the relevant lines.
0 commit comments