Approvals and Permissions
Nothing changes without you. How approvals, questions, and standing permissions work.
Approvals: nothing changes without you
This is the most important concept in these docs. In code mode, every file edit and every command stops and asks you:
edit src/server.js
--- src/server.js
+++ src/server.js
@@ -12,6 +12,9 @@
+ app.use(rateLimit({ windowMs: 60000, max: 100 }))
[y] allow [n] refusey
Allow this one action. CORA carries on.
n or Esc
Refuse it. CORA is told no, and either works around it or explains why it cannot.
There is no "always" button, on purpose. A single keypress that grants permanent permission, for every conversation in that project, forever, is not something anyone should be able to press by accident. If you want standing rules, set them deliberately and visibly with /settings (below).
What the request shows you
For a command, the exact command line, so you can read it before it runs.
For a file edit, the file path and the actual changes, the lines going in and out.
"Allow a command?" with no detail is not a decision anyone can make, so CORA never asks it that way.
Things worth knowing
CORA is frozen while it waits. The request replaces the prompt, because nothing else can happen until you answer.
Walking away grants nothing. After five minutes with no answer, the request is refused automatically, and CORA says so.
Refusing is a normal thing to do. It is not an error. CORA is told it cannot do that and carries on, often by telling you why it wanted to.
Pressing Ctrl+C refuses anything outstanding before stopping the turn.
The three read-only modes never raise these requests, because they cannot edit or run commands in the first place.
Questions CORA asks you
Separately from permission, CORA can ask you a question, a real one, when it has hit a decision only you can make.
↑ / ↓
Move between the options
1...9
Jump straight to an option once you have read the list
Space
Tick an option when more than one answer is allowed
Enter
Answer
Esc
Decline: CORA carries on without your input
You can always answer in your own words. The last option on every question lets you type a free-text answer instead of picking one. Declining is a real choice, not a failure CORA continues with what it has. Plan mode uses questions most: it asks about the decisions that would change the plan, and works out the facts about your code by reading it rather than by asking you.
Standing permissions (/settings)
If a certain kind of approval comes up constantly say, you always want git status allowed and never want anything starting with rm set a standing rule instead of answering every time.
Type /settings:
↑ / ↓
Move between tools
Tab
Cycle that tool between allow, ask, and deny
Enter
Open one tool's detailed rules. Only the four that take patterns have any changing files, running commands, reaching outside this project, and opening files.
Esc
Close the screen
Inside a tool's own rules:
Tab
Cycle the verdict for the highlighted rule
Ctrl+A
Add a rule, for example git * → allow, or rm * → deny
Ctrl+D
Remove a rule
Esc
Go back
Four things to understand about this screen
Rules apply to this project only. They are saved in
<project>/.cora-cli/config.jsonand never follow you into another project.Read-only modes are not affected. Ask, plan, and review still cannot edit or run commands, whatever you set here. A promise a setting can switch off is not a promise.
Changes take effect the next time you start CORA. While what you have set and what the running agent enforces disagree, the screen says so. Do not assume you have locked something down mid-session.
denyis quieter than you expect. A denied tool raises no request at all; CORA simply works around it and never tells you it wanted it. Usedenyfor things you genuinely never want (rm *,git push *), and leave everything else onask.
Sensible starting policy
Reading and searching files
allow
Editing and creating files
ask
Deleting files
ask (never allow)
Running commands
ask, with narrow allow rules for safe families such as git status or your test command
Anything that reaches the network or an outside system
ask