Skip to content
open tomato/ rafa
GitHub
rafa pages
  1. rafa
  2. 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:

CommandSpends
rafa plan createone planning session
rafa loop startone 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 --resolvea small fixed plan through the loop; nothing without --resolve
rafa nextwhatever 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>
NOTE

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.