rafa pages
- rafa
- Before you run it
Before you run it
What a rafa loop may do on your machine and under your accounts, what it spends, and where to run your first one.
rafa prints these notices the first time you start a run, and rafa plan risk lists what a given plan may do on this machine and under your accounts. On a terminal, rafa loop start and rafa plan create ask before going on, and answering d records the notice as dismissed in ~/.rafa/notices.json; delete that file to see the notices again.
Sessions run without permission prompts
Every Claude Code session rafa starts runs with --dangerously-skip-permissions. That is what lets a plan run unattended, and it means a task can edit, delete and run anything your user account can, without asking. There is no switch for it yet.
Each session loads its settings from the scopes loop.settingSources names, which defaults to project,local. Permission rules and hooks in the scope left out, user, do not reach the session.
A run acts under your accounts
A loop commits, pushes its branch, opens a pull request with gh and waits for CI. It may also file the blockers and unrelated bugs it meets as issues on the project's tracker.
It spends your Claude usage
Every session rafa starts counts against your Claude plan's limits, or is billed when Claude Code runs with an API key. budget= on a task line caps that task. In rafa --help, a 🪙 marks every command that starts sessions. The ones you meet first:
| Command | Spends |
|---|---|
rafa plan create | one planning session |
rafa loop start | one session per task, one for the wrap-up and up to loop.wrapUp.retries more (default 1) when it opens no pull request, repair sessions while CI is red, more passes of the loop under --retry, and one decision session per decision under --continue |
rafa pr triage --resolve | a small fixed plan through the loop; nothing without --resolve |
rafa next | whatever the step it runs spends; it asks before each step |
Others are marked too, such as rafa epic close, rafa stretch and rafa skill search. A command with no 🪙 reads files, git and GitHub and spends nothing, though rafa loop resume lets a paused run go on spending. rafa calls no model API directly: all of it goes through the claude command.
Your machine may sleep in the middle of a run
rafa does not keep the machine awake, so the operating system's power settings can suspend a loop mid-task. On a machine you leave running loops, turn sleep off in its power settings, or run the loop under the operating system's own sleep lock, which lasts as long as the command it wraps. On Linux:
systemd-inhibit --what=sleep:idle --why="rafa loop" rafa loop start --plan=<plan>
On macOS:
caffeinate -i rafa loop start --plan=<plan>
On a managed device, check its power policy first: some organisations report, or block, software that keeps a device awake.
Pick a safe place to run it
Run it in a repository, on a branch and on a machine where all of the above is acceptable. A container or a disposable checkout is a good first home, because nothing here is a sandbox.