# Pigo global configuration (example template) # Copy this file to ~/.config/pigo/config.toml and fill in your own values. # https://github.com/smallnest/pigo # Provider base URL (overrides the provider's default endpoint). # Leave unset to use the selected provider's built-in default. # base_url = "https://api.anthropic.com/v1" # Default model to use. model = "claude-opus-4-8" # API key for authentication. # Prefer supplying this via the _API_KEY environment variable # (e.g. ANTHROPIC_API_KEY) instead of committing it to a config file. # api_key = "your-api-key-here" # Output format: text | stream-json output_format = "text" # Trust the working directory for this run: skip the first-launch trust prompt. approve = false # Disable the built-in file/shell tools. no_tools = false # Tool-level admission control (the middle ground between "all tools" and # no_tools). Names match case-insensitively, so "Read" hits the built-in "read". # disallowed_tools wins when a name appears in both lists (fail-closed). # # A boundary declared here is a HARD boundary: filtering happens at the tool- # registration layer, so `approve = true` waives per-call confirmation but can # never let the model reach a tool outside the boundary. Task sub-agents inherit # it too. An unknown tool name aborts startup with exit code 2 rather than being # silently ignored. # # Each CLI flag REPLACES its own file value wholesale (it does not merge): # --allowed-tools overrides allowed_tools, --disallowed-tools overrides # disallowed_tools, independently. So a CLI --allowed-tools can widen what # allowed_tools narrowed. Note the two lists stay independent and deny still # wins: a file-level disallowed_tools is NOT lifted by a CLI --allowed-tools — # to re-admit a tool the file denied, override --disallowed-tools on the CLI. # Parameter-level forms such as Bash(git log:*) are not supported yet. # allowed_tools = ["read", "grep"] # disallowed_tools = ["bash", "bash_output", "kill_bash"] # Disable skill discovery (do not load skills under ~/.agents/skills as /skill-name commands). no_skills = false # Force wire protocol for a custom endpoint: openai | anthropic # protocol = "anthropic" # Run in headless print mode with the given prompt. # print = "" # Resume the most recent interactive session. # continue = false # List stored interactive sessions and exit. # list_sessions = false # Resume the interactive session with this id. # resume = "" # Internal: run as a process-isolated sub-agent JSON-RPC server over stdio (US-019). # subagent_rpc = false # --- Persistent memory + infinite context (nested tables) --- # [memory] controls the persistent memory system. All keys are optional and # default to the values shown; set memory.enabled = false to fully disable it. # [memory] # enabled = true # master switch for the memory system # reconcile_on_search = true # lazily re-index memory files before each search # search_score_floor = 0.15 # drop search hits below this relevance score (0..1) # cc_index = false # also index the Claude Code memory directory (read-only) # [checkpoint] controls infinite-context checkpointing. # [checkpoint] # thresholds = ["40%", "60%", "80%"] # context-window fill levels that trigger compaction # reserved = 4096 # optional: tokens to reserve (int) or a percentage ("10%") # [checkpoint.push_caps] caps per-section injection token budgets. # [checkpoint.push_caps] # memory = 800 # recall = 1200 # [compaction] tunes auto-compaction. # [compaction] # max_context accepts a token count (300000), a K/M suffix ("300K", "1M"), or a # percentage of the provider window ("50%"). It only lowers the trigger point and # is always clamped by the provider limit. # max_context = "300K"