The principles please is built around.

No hand written git

Every git operation a developer needs is reachable through a please command. The goal is that you never need to drop down to raw git yourself.

Never a dead end

Running a please command outside a git repository does not just refuse with an error. please asks whether to initialize one right there, so a plain folder never feels broken.

No working tree clutter

please’s own local state, cached project context, saved please run decisions, and similar, never appears as a junk folder in git status. It lives inside .git/please/, or under your home directory when there is no repository yet. The one exception is .please/instructions.md, which is meant to be committed and shared with your team.

Explicit overrides, not blanket blocks

Guardrails, the sensitive file check and the junk directory check, can always be bypassed by staging the file yourself first. please assumes intent over blocking outright.

Bounded AI latency

The model’s own response time is not something please controls, but everything around it is. Requests are timeout bounded, progress is printed so the CLI never looks frozen, and the model is auto selected once at setup, self healing on failure, rather than re selected on every call.

Destructive operations require confirmation

Anything that can discard work, such as please sync exactly, explains the consequences up front and requires explicit confirmation.

See Safety Nets for the full picture, including the extra layer that applies inside agent mode.