The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Configuration

corteza logo

Configuration

How to configure corteza for your workflow.

Config files

corteza reads two JSON files and merges them. Project config overrides global config.

Layer Path
Global tools::R_user_dir("corteza", "config")/config.json
Project .corteza/config.json

Merge semantics: project keys replace global keys at the top level; no deep merge.

Precedence: CLI flags > project config > global config > built-in defaults.

Example project config:

{
  "provider": "ollama",
  "model": "llama3.2",
  "context_files": ["README.md", "PLAN.md"],
  "approval_mode": "ask"
}

Create the directory first:

dir.create(".corteza", showWarnings = FALSE)

CLI flags

corteza [options]
Flag Description Default
--provider <p> LLM provider: anthropic, openai, moonshot, ollama anthropic
--model <name> Model name provider default
--tools <filter> Tool filter: core, file, code, git, r, data, web, chat all
--session <key> Session key; resumes if exists none
--resume Resume most recent session false
--list List sessions and exit false
--dry-run Preview tool calls without executing false
--trace Print structured tool-call events to stderr false
--help Show help and exit -

Flags override config values for the current run.

JSON config keys

All keys shown with type and default, current as of corteza 0.6.3. Most defaults live in R/config.R::load_config(); a few (memory keys and the CLI port fallback) live in inst/bin/corteza.

Core

Key Type Default Description
provider string "anthropic" LLM provider
model string or null null Model name (null = provider default)
port integer 7850 MCP server port

Context

Key Type Default Description
context_files string[] [] Extra files to load into the system prompt
context_warn_pct integer 75 Token-usage % to start showing warnings
context_high_pct integer 90 Token-usage % for orange indicator
context_crit_pct integer 95 Token-usage % for red indicator + hint to /clear
context_compact_pct integer 90 Auto-compaction threshold
context_include_soul boolean or null null Include SOUL.md (null = saber default)
context_include_user boolean or null null Include USER.md (null = saber default)

Safety

Key Type Default Description
approval_mode string "ask" "ask", "allow", or "deny"
dangerous_tools string[] ["bash", "run_r", "run_r_script", "write_file", "replace_in_file", "base::writeLines"] Tools requiring approval
permissions object {} Per-tool overrides, e.g. {"bash": "deny"}
denied_paths string[] ["~/.ssh", "~/.gnupg", "~/.aws", "~/.config/gcloud", "~/.kube", "~/.docker"] Blocked paths
allowed_paths string[] or null null If set, only these paths allowed

Skills

Key Type Default Description
skill_paths string[] [] Extra directories for SKILL.md files
skill_packages object[] [{"package":"base", ...}, {"package":"utils", ...}] R packages registered as tools
skill_timeout integer 30 Default skill execution timeout (seconds)

Diagnostics

Key Type Default Description
dry_run boolean false Preview tools without executing
trace boolean false Emit structured trace events

Rate limiting

Key Type Default Description
rate_limits object {} Per-provider limits

Subagents

Key Type Default Description
subagents.enabled boolean true Enable subagent commands
subagents.max_concurrent integer 3 Max parallel subagents
subagents.timeout_minutes integer 30 Subagent kill timeout
subagents.allow_nested boolean false Allow nested subagents
subagents.default_tools string[] ["read_file", "grep_files", "r_help", "web_search", "fetch_url"] Tools available to subagents when no preset is given
subagents.base_port integer 7851 Starting port for subagent MCP servers

Presets. /spawn --preset <name> picks a fixed tool list at spawn time:

/spawn --tools <comma-list> overrides the preset with an explicit tool list.

Permission model. Subagents have no interactive approval channel back to the parent or user. A child’s tool list is fixed at spawn time — via the --preset or --tools flags on /spawn, or the preset / tools arguments to subagent_spawn(). There is no mid-run path to escalate to a riskier capability: the child’s approval callback denies by default, and the parent cannot grant new tools after the fact. If a task may need shell, write, or network capability, choose a preset or explicit tool list that includes it at spawn time; otherwise the child should report that it is blocked.

Workspace

Key Type Default Description
workspace.enabled boolean true Enable managed workspace
workspace.budget_chars integer 32000 Context budget in characters
workspace.capture_results boolean true Promote large results to handles
workspace.max_result_size integer 50000 Max result size before handle promotion
workspace.scan_globalenv boolean true Scan .GlobalEnv on startup
workspace.scan_max_bytes integer 52428800 Max bytes to scan from .GlobalEnv (50 MB)
workspace.max_object_summary_chars integer 2000 Max summary length per object

Channels

Matrix

Matrix channel requires mx.api (Suggests). Configured via a separate helper, not the main JSON config.

corteza::matrix_configure(
  server = "https://matrix.example.com",
  user = "corteza_bot",
  password = "verysecure",
  room = "#general:example.com",
  model = "llama3.2",
  provider = "ollama"
)

Legacy memory

Key Type Default Description
legacy_memory_tools_enabled boolean false Show memory slash commands
memory_flush_enabled boolean true Auto-flush before compaction
context_include_memory_logs boolean false Include daily logs in context

Slash commands

In-chat commands prefixed with /.

Command Description
/quit, /exit, /q Exit corteza
/status Runtime and session status
/doctor Check provider, git, MCP, context health
/tools List available tools
/diff [ref] Git diff against HEAD or ref
/review [ref] Review local changes with LLM
/config Active runtime configuration
/permissions Tool approval and sandbox settings
/clear Clear conversation (keeps session)
/compact Summarize conversation to free context
/sessions List sessions
/context Live context usage and loaded files
/model <name> Switch model
/provider <p> Switch provider
/dryrun Toggle dry-run mode
/trace [N] Last N tool executions
/skill list List installed skills
/skill install <path\|url> Install a skill
/skill remove <name> Remove a skill
/skill test <path> Run skill tests
/spawn <task> Spawn a subagent
/agents List active subagents
/ask <id> <prompt> Query a subagent
/kill <id> Terminate a subagent
/remember <fact> #tags Remember with tags
/remember --global <fact> Remember globally
/recall <query> Search memories
/recall --tags List memory tags
/flush Flush memories to daily log
/last [N] Show Nth most recent tool output
/outputs List recent tool outputs
/help Show help

Skills

Skills are SKILL.md files loaded at startup. Built-in R skills are always registered.

Search paths:

Scope Path
Global tools::R_user_dir("corteza", "data")/skills/
Project .corteza/skills/

Nested (skill/SKILL.md) and flat (skill.md) layouts both work.

Package skills: register R packages as tools via skill_packages in config.

MCP server

Expose corteza tools to external MCP clients. serve() supports two transports:

# stdio transport (Claude Desktop, Claude Code, other MCP clients)
corteza::serve()

# socket transport (corteza CLI, R-to-R clients)
corteza::serve(port = 7850)

# restrict the toolset
corteza::serve(port = 7850, tools = "core")

port = NULL (the default) selects stdio. cwd = NULL (the default) leaves the working directory alone; pass an explicit path to anchor the server elsewhere. Tools execute in a persistent R session, so objects and loaded packages survive across calls.

Claude Desktop config (~/.config/claude/claude_desktop_config.json):

{
  "mcpServers": {
    "corteza": {
      "command": "Rscript",
      "args": ["-e", "corteza::serve()"]
    }
  }
}

Session tuning

new_session() is the programmatic entry point for embedding corteza in your own R code: a Shiny app, a batch script, a custom approval flow, or tests. The CLI and Matrix channels build on this same primitive.

library(corteza)

s <- new_session(
  channel = "cli",
  provider = "anthropic",
  max_turns = 20L,
  verbose = FALSE
)

result <- turn("What packages are loaded?", session = s)

The session is an environment that carries history, the active provider/model, and the approval callback. turn() mutates it in place and also returns the updated session, so you can chain calls or persist s$history between runs.

Session parameters

Parameter Type Default Description
channel string "cli" "cli", "console", "matrix"
history list or null null Prior messages; resumes mid-conversation
model_map list or null null list(cloud = ..., local = ...); falls back to corteza.model_map option
provider string "anthropic" LLM provider
tools_filter string[] or null null Restrict available tools
system string or null null System prompt override
approval_cb function or null null Called when policy returns "ask". Default denies.
max_turns integer 10 Max tool-use turns per call
verbose boolean FALSE Print tool-call progress

systemd service

matrix_run() is designed for a systemd user unit.

~/.config/systemd/user/corteza-matrix.service:

[Unit]
Description=corteza Matrix bot
After=network.target

[Service]
Type=simple
ExecStart=Rscript -e 'corteza::matrix_run()'
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target

Enable and start:

systemctl --user daemon-reload
systemctl --user enable corteza-matrix.service
systemctl --user start corteza-matrix.service

View logs:

journalctl --user -u corteza-matrix.service -f

Environment variables

Variable Required for Description
ANTHROPIC_API_KEY Anthropic API key
OPENAI_API_KEY OpenAI API key
MOONSHOT_API_KEY Moonshot API key
TAVILY_API_KEY web_search tool Optional
NO_COLOR CLI Disable ANSI colors
FORCE_COLOR CLI Force ANSI colors
CORTEZA_STATE_DIR Matrix bot Out-of-band signal directory

Set API keys in ~/.Renviron:

ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...

R options

Option Default Description
corteza.model null Default model (overrides provider default)
corteza.local_models c("gpt-oss:120b", "gpt-oss:20b") Candidates for default_local_model()
corteza.max_turns null Default max_turns for chat() (null falls back to 50)
corteza.trace FALSE Enable structured trace events

Set in ~/.Rprofile or per-session via options().


Guide version: 0.6.3

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.