.praisonai/config.yaml wires your project’s full agent runtime — model, MCP servers, permissions — for every praisonai run in the directory.
.praisonai/config.yaml; every praisonai run in the project loads that single source.
Quick Start
Run anywhere in the project
How It Works
The resolver deep-merges five layers (highest wins):| Layer | Source | Precedence |
|---|---|---|
| 1 | Built-in defaults | Lowest |
| 2 | ~/.praisonai/config.yaml (global) | |
| 3 | .praisonai/config.yaml (project, walk-up) | |
| 4 | Environment variables | |
| 5 | CLI flags | Highest |
Configuration Schema
mcp.servers.<name>
| Key | Type | Default | Description |
|---|---|---|---|
command | list[str] or str | — | Local (stdio) server launch command. List form preferred. Required for local servers; ignored for remote. |
args | list[str] | [] | Extra args appended to command. Local servers only. |
env | dict[str, str] | {} | Env vars for the server process. Local servers only. |
enabled | bool | true | Set false to declare-but-not-wire a server. |
type | "remote" | — | Marks a remote server. Optional — a non-empty url also implies remote. |
url | str | — | Remote endpoint (HTTP-stream, SSE, or WebSocket). Presence implies remote. |
headers | dict[str, str] | {} | HTTP headers for remote servers. Ignored for legacy SSE URLs ending in /sse (a warning is printed). |
timeout | int (milliseconds) | 30000 | Per-server connect timeout. Converted to seconds before being passed to the SDK MCP(...). |
praisonai run wires every enabled server under mcp.servers.* — multiple local (stdio) servers and remote (url: / type: remote) servers are all aggregated and exposed to the agent. Servers with enabled: false are skipped silently. If --mcp "<command>" is also given on the command line, its tools are added on top of the config servers, not in place of them.permissions
Two equivalent forms:
Structured (rule list):
| Key | Type | Default | Description |
|---|---|---|---|
default | "allow" | "deny" | "ask" | — | Fallback action when no rule matches. Equivalent to "*": <default> in flat form. |
rules | list[{pattern, action}] | [] | Structured rule list. action must be allow, deny, or ask. Invalid actions are silently dropped. |
<pattern> | "allow" | "deny" | "ask" | — | Flat shorthand. Can be combined with rules and default. |
Precedence
--mcp, if present, merges with config-declared servers — CLI ad-hoc tools are added alongside every enabled config server.--allow/--deny/--permissionsare merged on top of config rules — CLI wins per-pattern.--permission-defaultsets the fallback action, overridingpermissions.defaultfrom config.
Common Patterns
Pin a model + a single MCP server
CI-safe defaults
Mix with CLI flags
Config gives the base; flags override per-run:Declare-but-not-wire a server
Best Practices
Commit .praisonai/config.yaml for team alignment
Commit .praisonai/config.yaml for team alignment
Checked-in config ensures every teammate and CI runner uses the same model, MCP servers, and permission defaults automatically.
Keep secrets out of env in config
Keep secrets out of env in config
mcp.servers.<x>.env is fine for non-secret config values (paths, flags). For API tokens, use shell environment variables — they are read by the server process at runtime without being stored in YAML.Use praisonai config show --sources to debug
Use praisonai config show --sources to debug
When behaviour is unexpected,
praisonai config show --sources prints exactly which layer won for each key.Prefer the structured rules form when ordering matters
Prefer the structured rules form when ordering matters
The
rules: list is evaluated in order; priority fields are respected. The flat mapping form is convenient for simple deny lists but gives no ordering guarantees.Related
CLI Configuration
Full cascade reference for the praisonai CLI config layers
Declarative Permissions
All surfaces for pre-declaring allow/deny rules
MCP Transports
Remote MCP server configuration
Config CLI Reference
praisonai config subcommand reference
