Configuration and one-off grants#

The defaults gate the opus, fable, and sol tiers; recognize explicit light pins matching sonnet, haiku, terra, or luna; notify on confirmed events; and allow no standing exceptions.

Create the starter file:

gate init-config

It is written to ~/.config/gate/config.toml on Linux and macOS or %APPDATA%\gate\config.toml on Windows. Set GATE_CONFIG to use a different path.

superheavy_pattern = "(?<![a-z0-9])(?:opus|fable|sol)(?![a-z0-9])"
light_pattern = "(?<![a-z0-9])(?:sonnet|haiku|terra|luna)(?![a-z0-9])"
allow = [
    "adversarial-critic",
    "workflow:deep-research",
]
notify = true
notify_command = []
throttle_seconds = 60

Allowlisted launches remain visible: they are allowed and notify at normal urgency.

notify_command runs directly as an argument vector, without a shell. Keep it that way: {title} and {body} include hook-payload text, so do not interpolate them into sh -c, PowerShell source, or another shell-evaluated string.

One-off grants#

A grant is a terminal-minted, TTL-bounded exception. The default is one launch for 15 minutes:

gate grant general-purpose
gate grants
gate revoke general-purpose

Use --session <session_id> to bind the grant to the exact session named in a deny message:

gate grant general-purpose --uses 1 --ttl 15m --session session-123

Agents can request that command but cannot mint the grant themselves. Every successful consumption sends a normal-urgency notification and decrements the remaining uses.

Terminal tinting#

gate tint reads its own optional config at ~/.config/gate/tint.toml (override with GATE_TINT_CONFIG). Write a commented starter with gate tint init:

base_color = "slate"        # revert color when leaving a triggered dir
denial_window = 600         # seconds a deny event keeps tinting
activity_window = 3600      # seconds heavy/workflow activity counts as active

[aliases]                   # name -> hex; overrides built-ins
jade = "#2B8A6E"

[events]                    # predicate -> color; severity order is fixed
denied_recently = "red"
heavy_active = "orange"
workflow_active = "amber"
grant_active = "violet"

[directories]               # nested tables compose regex prefixes
"~/my/apps" = { irix = "jade", "superheavy-gate" = "cyan" }

[commands]
"^git push" = "red"

[places]                    # literal path prefixes (escaped, match on boundary)
"~/vault" = "violet"

See Terminal tinting for the full model: event predicates, precedence, overrides, and terminal caveats.