corteza 0.6.9

Fix: scope all three tools::R_user_dir() roots to tempdir under R CMD check

PR #96 already redirected R_USER_CACHE_DIR for the test run (so saber’s transitive briefs writes landed in tempdir), but corteza itself writes to all three tools::R_user_dir() roots — cache (saber briefs, /last response), data (session transcripts via R/paths.R, matrix state), and config (matrix.json). Session tests were still leaking files under ~/.local/share/R/corteza/agents/…/sessions/*.jsonl, which would have tripped CRAN’s “checking for new files in some other directories” NOTE on BDR’s donttest box even when local tinypkgr::check() reports Status: OK. The suite-level redirect in tests/tinytest.R now sets all three (R_USER_CACHE_DIR, R_USER_DATA_DIR, R_USER_CONFIG_DIR) to tempfiles for the check run; end-user behavior is unchanged.

corteza 0.6.8

Patch release batching the 0.6.7.1 through 0.6.7.12 dev cycles. Per-PR detail is preserved in the dev-marker sections below.

corteza 0.6.7.12

Fix: spawned subagents inherit the parent session’s provider/model

chat(provider = "ollama") followed by an LLM-triggered spawn_subagent was silently producing children on Anthropic: the default tool_executor in .make_tool_handler() called call_skill() with no ctx, so tool_spawn_subagent() saw ctx$session = NULL and subagent_spawn() fell through to getOption("corteza.provider"). The executor now passes ctx = list(session = session), so provider, model, cwd, plan_mode, and archival_depth all flow through to the child.

corteza 0.6.7.11

Fix: cap tool output before it reaches model context

A single unbounded tool result (e.g. a bash command that printed 57k lines) was flattened straight to the model and mirrored into history, blowing the next call past the provider token limit; /compact then couldn’t recover the session. Tool results now pass through a universal guard (admit_tool_result()) that caps oversized output to a marker plus a recoverable handle, and /compact elides giant message bodies so it can rescue an already-wedged session.

corteza 0.6.7.10

Fix: chat() crash on a model-less session

A chat() started without an explicit model no longer crashes after the first turn. The per-turn context meter called context_limit_for_model() with a NULL model and errored on the table subscript; it now falls back to the default limit (and resolves a model-less session to the provider default for display).

corteza 0.6.7.9

CRAN pre-submission housekeeping

Packaging-only pass ahead of the 0.6.8 release: applied a deferred rformat reflow, generated the user_interrupt_marker man page, refreshed cran-comments.md, and turned the skills vignette’s clone example into a <your-skills-repo-url> placeholder so it carries no dead link. No code behavior changes.

corteza 0.6.7.8

Interrupt marker matches the deny marker’s directive

A turn interrupted with Ctrl+C / Esc now leaves the same “stop and ask the user what to do instead” instruction in history as an explicit deny, so the LLM checks in on the next turn rather than quietly continuing. Previously the interrupt marker was terser than the deny marker even though the approval prompt’s Esc/Ctrl+C hint routes through the interrupt path.

corteza 0.6.7.7

Provider default models come from llm.api

default_provider_model() now delegates to llm.api::provider_default_model() instead of corteza’s own provider-to-model table, which had drifted. corteza tracks llm.api’s picks going forward (e.g. openai and moonshot defaults shift to llm.api’s current choices). No change when you set a model explicitly.

corteza 0.6.7.6

MCP subagent exposure is opt-in, with a spend cap

serve() no longer hands the subagent tools (spawn_subagent, query_subagent, collect_subagent, list_subagents, kill_subagent) to MCP clients by default. A spawned subagent runs its own agent loop and spends autonomously on the host’s LLM credentials, so an unattended MCP client could otherwise trigger unbounded cost it never sees.

Enable with subagents.expose_over_mcp (config, default FALSE) or serve(expose_subagents = TRUE). When enabled, cumulative subagent spend over MCP is capped: spawn_subagent/query_subagent are refused once spend crosses subagents.mcp_spend_cap_usd (default $5.00; <= 0 disables) or an optional subagents.mcp_spend_cap_tokens for providers that don’t report cost. The cap reads the same meter as /spent; the in-process chat()/CLI loop is unaffected.

corteza 0.6.7.5

/spent: approximate session cost

/spent (alias /cost) reports the approximate USD spent this process run, in both chat() and the CLI. Each turn accumulates the cost scalar that llm.api 0.1.4 returns, plus token counts. When a model is absent from llm.api’s price snapshot its cost is unknown, so totals are shown as a floor rather than a precise figure.

Spend is process-lifetime: /clear no longer zeroes the tally, it closes the current conversation and opens a new one, so /spent itemizes each conversation between clears with a grand total. /clear now also kills any live subagents (a fresh conversation leaves none behind); their spend is retired into the run total, shown as a separate process-level subagents line that keeps counting an agent after it is killed. Resumed prior-run spend is not loaded from disk.

corteza 0.6.7.4

CLI and chat() share one in-process REPL loop

The CLI no longer runs tools in a separate callr worker. chat() and the CLI now drive one shared loop (run_repl_loop) in a single R process, executing tools in-process via corteza::turn().

corteza 0.6.7.3

Interrupt / denial preserves context across the exit

Hitting Ctrl+C (CLI) or Esc (RStudio chat) after a multi-tool turn no longer loses the tool calls that completed before the interrupt. Previously the next turn / next CLI invocation saw the original user prompt, an interrupt marker, and nothing else.

corteza 0.6.7.2

Subagents can return a value by handle

corteza 0.6.7.1

Base-R cleanups from a redundancy audit

corteza 0.6.7

Patch release batching the 0.6.6.1 through 0.6.6.20 dev cycles plus the out-of-band “Deny aborts the whole turn” change. Per-PR detail is preserved in the dev-marker sections below.

RStudio addin: multi-line statements

corteza 0.6.6.20

Codex review for #110 + #111

corteza 0.6.6.19

RStudio addin: route Ctrl+Enter to /r or ! when chat() is active

Setup: in RStudio, open Tools -> Modify Keyboard Shortcuts, pick “Addins” in the dropdown, and bind Ctrl+Enter (and optionally Alt+Enter) to the two corteza addins. Override the built-in “Run current line/selection” mappings.

corteza 0.6.6.18

Fix: tool_run_r now actually persists <- assignments

corteza 0.6.6.17

Brain-corn brick banner + docker-style session names

CLI startup layout

corteza 0.6.6.16

Brain-corn startup banner

corteza 0.6.6.15

! <cmd> shell-line in chat() and CLI

corteza 0.6.6.14

Persistent task list the LLM maintains across turns

corteza 0.6.6.13

chat() banner resolves provider default model

corteza 0.6.6.12

Approval-prompt deny advertises the surface-appropriate

interrupt key

corteza 0.6.6.11

Markdown rendering for chat() responses

Deny aborts the whole turn

corteza 0.6.6.10

/copy command in chat()

corteza 0.6.6.9

tool_run_r_script dodges callr Windows hang

corteza 0.6.6.8

Tool-count parity between chat() and CLI

/context and /status are one command

corteza 0.6.6.7

/context shows a real meter

corteza 0.6.6.6

corteza 0.6.6.5

Slash-command parity between chat() and the CLI

Dead commands removed

corteza 0.6.6.4

Input handling

corteza 0.6.6.3

Approval prompt

corteza 0.6.6.2

Inline diffs on file edits

Console color policy is shared

corteza 0.6.6.1

Interrupt key

Other

corteza 0.6.6

Async subagent queries

Durable subagent transcripts

Context-budget helpers

Subagent context compaction

Token visibility in /agents

corteza 0.6.5.1 (development)

Plan mode

Retroactive-extraction runtime (opt-in)

CLI

Subagents

MCP

Documentation

corteza 0.6.2

CLI

CLI prompt input

corteza 0.6.1

corteza 0.6.0

First CRAN submission.

Architecture: CLI / worker split

Eight-phase refactor of the command-line interface so its subprocess no longer speaks MCP internally.

Derived tool schemas

Context-aware tool pruning

Handle-based large results

Observability

Platform support

Dependencies