Skip to main content
Symbiotic Code supports a layered permission configuration that controls whether the AI can run bash commands, write files, or edit files without prompting you every time

Load order

Configs are deep-merged. Later sources win.

Config schema

A <rule> is either:
  • A string: "allow", "ask", or "deny" -> applies to all inputs
  • A pattern map: { "<pattern>": "<rule>", ... } -> matched by specificity

Pattern matching

The most specific pattern wins (longest literal prefix before the first *).

Examples

1. Deny all bash, ask for writes, auto-allow src/

.symbiotic/symbiotic.json:
What happens:

2. Allow safe git commands, deny destructive ones

What happens:
Pattern specificity: git commit * (11 literal chars) beats git * (4 literal chars) beats * (0 literal chars).

3. Trust the whole project — allow everything

No prompts at all. Useful for trusted personal projects.

4. Lock down everything — full review mode

Every action requires your approval. This is the default behavior when no config is present.

Deep merge behavior

When multiple sources define rules for the same tool, pattern maps are merged (later keys win), and string rules replace entirely. Example: symbiotic.json defines bash rules, .symbiotic/symbiotic.json adds more specific ones: symbiotic.json:
.symbiotic/symbiotic.json:
Effective config:

“Allow always” persistence

When you choose Allow always at a permission prompt, the approval is saved to .symbiotic/symbiotic.json automatically and takes effect immediately — no restart needed.

How patterns are stored

For bash commands, the stored pattern depends on the command structure: For write/edit, the exact file path is stored.

Shell operator security

Commands containing &&, ||, ;, or | always prompt — they are never auto-allowed by config and never persisted. This prevents a stored pattern like "git commit *" from matching git commit -m "ok" && rm -rf /.

Live config reload

The config is re-read from disk on every tool call. You can edit any config file (symbiotic.json, .symbiotic/symbiotic.json, or the file pointed to by SYMBIOTIC_CONFIG) while Symbiotic is running and changes take effect on the next tool execution — no restart required.

File Locations

Recommendations
  • Commit symbiotic.json with team-wide defaults
  • Use .symbiotic/symbiotic.json for personal overrides
  • Add .symbiotic/ to .gitignore