# 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 <PROVIDER>_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"
