mohManual

Manual/Everyday work

moh asks before it acts

Chapter 05 · 3 min read

This is moh's defining feature. Every step that could change something — writing a file, running a command, clicking in a web page — passes a gate, and you hold the keys.

The permission prompt

When no rule has decided an action yet, moh stops and asks:

permission
KeyEffect
y yesAllow this one action.
a alwaysAllow it, and the same kind of action, for the rest of this conversation. The prompt shows the exact rule it will create.
e editChange the action before it runs — a safer command, a different file.
n noRefuse. moh is told, and looks for another way or asks you.
escClose the prompt; counts as no.

Standing rules

Answering the same question every time gets old. A rule decides in advance, in a simple pattern language that is the same everywhere:

PatternCovers
bashEvery shell command.
bash:git statusOnly commands that start with git status.
write:src/**Creating or overwriting files anywhere under src/.
edit:docs/**Editing files under docs/.

A rule either allows or denies. You can create one on the fly with a, pass one to a single run (--allow "bash:git status", --deny "write:secrets/**"), or write it in the project's moh.json file so it applies to everyone working on the project. When several apply, the most specific wins.

# moh.json — let moh check git freely, never let it touch secrets/
{
  "permissions": {
    "overrides": {
      "bashAllow": [["git", "status"], ["git", "diff"]],
      "bashDeny":  [["git", "push"]],
      "pathDeny":  ["secrets/**"]
    }
  }
}

The three caution levels

Press shift+tab to rotate between them. The current level is always named at the bottom of the screen, and the choice lasts only for this conversation — a new one starts from your settings again.

LevelWhat it doesUse it for
◌ NormalAsks for every action no rule allows. Stays inside the project folder.Learning, real work, anything you care about.
◐ Auto-acceptStops asking for moh's routine actions. Still asks for anything outside the project and for questions raised by extensions.Long tasks you are watching.
⚠ YOLONo questions at all, and no fence around the project folder.Throwaway experiments only.

Rule of thumb

Stay in Normal while you are learning. The prompts are not friction — they are the product. Reading what moh is about to do is how you learn what it does.

The limits nothing can lift

  • Writes outside the project folder are asked every single time. They can never become a rule, not even by accident.
  • Extensions can only make moh more careful. One can refuse an action or raise a question; it can never grant something you did not allow. Its questions offer yes/no only.
  • Commands you type yourself with ! go through the same gate (see running your own commands).
  • When nobody can answer — in scripts and CI — an action that would need a question is refused instead of waiting forever (see automation).

Web pages and the browser

Reading a web page is allowed, but moh refuses addresses on your private network (your router, local services) unless you opt in, so a page cannot trick it into poking around your home network. In the browser, looking is free; clicking, typing, uploading and downloading ask first, and "always for this site" stays limited to that site and this conversation.

Written for moh 0.61. Inside moh, ctrl+h opens the built-in manual for your exact version.