Skip to content

chimera.permissions

chimera.permissions decides whether a tool call may execute. Every policy implements evaluate(tool_name, args) -> PermissionAction.

For a tutorial, see Configure Permissions.

from chimera.permissions import (
PermissionPolicy,
PermissionAction,
AutoApprove, AlwaysDeny, AllowList, DenyList,
Interactive, ReadOnly,
PermissionRuleset, Rule,
)
SymbolModulePurpose
PermissionPolicychimera.permissions.baseABC. Override evaluate(tool_name, args).
PermissionActionchimera.permissions.baseEnum: ALLOW, DENY, ASK.
AutoApprovechimera.permissions.presetsApprove everything.
AlwaysDenychimera.permissions.presetsDeny everything.
AllowList(allowed=[...])chimera.permissions.presetsAllow named tools, deny the rest.
DenyList(denied=[...])chimera.permissions.presetsDeny named tools, allow the rest.
Interactivechimera.permissions.presetsReads ALLOW; mutating tools ASK.
ReadOnlychimera.permissions.presetsOnly read_file, search, list_files, repo_map ALLOW. Everything else DENY.
PermissionRuleset(rules=[...])chimera.permissions.baseLast-match-wins glob ruleset.
Rule(tool_pattern, action, arg_key=, arg_pattern=, description=)chimera.permissions.baseSingle rule.

Approval modes (chimera.permissions.modes)

Section titled “Approval modes (chimera.permissions.modes)”

The five-mode --permission-mode surface used by ferret, badger, and mink CLIs:

ModeBacking policy
read-onlyReadOnly
suggestInteractive
autoAutoEditPolicy (reads + simple edits ALLOW; bash/git ASK)
yoloAutoApprove
strictAlwaysAskPolicy (every call ASKs)
from chimera.permissions.modes import (
ApprovalMode,
parse_mode,
policy_for_mode,
AutoEditPolicy,
AlwaysAskPolicy,
)
policy = policy_for_mode("auto") # AutoEditPolicy()

parse_mode() accepts canonical spellings, underscore variants, the legacy ferret --approval values (fullyolo), and the legacy mink --permission-mode choices (default, acceptEdits, bypassPermissions, plan).

The legacy six-mode PermissionMode enum (default, plan, accept_edits, bypass_permissions, dont_ask, auto) lives in the same module for backwards compatibility with the in-process permission checker.

from chimera.permissions.audit import AuditEntry, AuditLog

AuditLog.record(entry) appends a (tool_name, args, action, granted, timestamp) row; summary(), for_tool(name), and clear() query or reset the log.

Risk classifier (chimera.permissions.risk)

Section titled “Risk classifier (chimera.permissions.risk)”
from chimera.permissions.risk import RiskLevel, classify_risk

classify_risk(bash_command) returns LOW / MEDIUM / HIGH based on known-dangerous bash patterns (rm -rf, dd if=, chmod 777, …). Called by RuleBasedSecurityAnalyzer.