<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>core-agent</title><link>https://go-steer.github.io/core-agent/</link><description>Recent content on core-agent</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://go-steer.github.io/core-agent/index.xml" rel="self" type="application/rss+xml"/><item><title>Autonomous quickstart</title><link>https://go-steer.github.io/core-agent/docs/cli/autonomous/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/cli/autonomous/quickstart/</guid><description>&lt;p&gt;15 minutes from &lt;code&gt;core-agent&lt;/code&gt; installed → a working unattended agent that watches a real thing and reports back.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prefer to have an agent walk you through this?&lt;/strong&gt; The &lt;a href="https://go-steer.github.io/core-agent/docs/skills-library/autonomous-setup/"&gt;&lt;code&gt;autonomous-setup&lt;/code&gt; skill&lt;/a&gt; covers the same material in workflow form, including the multi-agent decomposition path. Install once, then say &amp;ldquo;set up an autonomous monitor for me&amp;rdquo; and the agent walks the 9-step runbook with you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-autonomous-means-here"&gt;What &amp;ldquo;autonomous&amp;rdquo; means here&lt;/h2&gt;
&lt;p&gt;The interactive TUI assumes an operator at the keyboard reacting to model output. Autonomous mode flips that: you describe a goal up front, hand the agent a set of tools and a budget, then walk away. The agent works until it decides it&amp;rsquo;s done, hits a budget cap, or you cancel it. The session log is the audit trail.&lt;/p&gt;</description></item><item><title>cli-setup skill</title><link>https://go-steer.github.io/core-agent/docs/skills-library/cli-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/skills-library/cli-setup/</guid><description>&lt;p&gt;The &lt;code&gt;cli-setup&lt;/code&gt; skill walks a user through configuring &lt;code&gt;core-agent&lt;/code&gt; for interactive use. It&amp;rsquo;s bundled in &lt;a href="https://github.com/go-steer/core-agent/tree/main/SKILLS/cli-setup"&gt;&lt;code&gt;SKILLS/cli-setup/&lt;/code&gt;&lt;/a&gt; at the repo root.&lt;/p&gt;
&lt;h2 id="what-it-covers"&gt;What it covers&lt;/h2&gt;
&lt;p&gt;The four customization layers, in order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Provider + model&lt;/strong&gt; — &lt;code&gt;.agents/config.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personality&lt;/strong&gt; — &lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt; — &lt;code&gt;.agents/skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools&lt;/strong&gt; — built-ins + MCP servers&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Plus permission posture (&lt;code&gt;ask&lt;/code&gt; / &lt;code&gt;allow&lt;/code&gt; / &lt;code&gt;yolo&lt;/code&gt; modes, allowlist patterns) and the verify-it-works step.&lt;/p&gt;
&lt;h2 id="triggers"&gt;Triggers&lt;/h2&gt;
&lt;p&gt;The skill&amp;rsquo;s description lists the verbatim phrasings the agent will match. The most common:&lt;/p&gt;</description></item><item><title>Interactive quickstart</title><link>https://go-steer.github.io/core-agent/docs/cli/interactive/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/cli/interactive/quickstart/</guid><description>&lt;p&gt;15 minutes from &lt;code&gt;core-agent&lt;/code&gt; installed → a tailored agent your whole team can use.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prefer to have an agent walk you through this?&lt;/strong&gt; The &lt;a href="https://go-steer.github.io/core-agent/docs/skills-library/cli-setup/"&gt;&lt;code&gt;cli-setup&lt;/code&gt; skill&lt;/a&gt; covers the same material in workflow form. Install once, then say &amp;ldquo;help me set up core-agent for my project&amp;rdquo; and the agent walks the four layers with you, writing files as you go.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-youll-have-at-the-end"&gt;What you&amp;rsquo;ll have at the end&lt;/h2&gt;
&lt;p&gt;A project-scoped agent that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Knows what your project is (system prompt via &lt;code&gt;AGENTS.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Has a reusable named procedure (a skill)&lt;/li&gt;
&lt;li&gt;Asks before running anything risky (permissions in &lt;code&gt;ask&lt;/code&gt; mode by default)&lt;/li&gt;
&lt;li&gt;Is checked into the repo so every teammate gets the same agent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The running example is a &amp;ldquo;Go code-reviewer&amp;rdquo; for a hypothetical project. Adapt as needed.&lt;/p&gt;</description></item><item><title>System instructions</title><link>https://go-steer.github.io/core-agent/docs/agent-design/system-instructions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/agent-design/system-instructions/</guid><description>&lt;p&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; is the most-impactful customization surface in &lt;code&gt;core-agent&lt;/code&gt;. The model sees it on every turn. Get it right and the agent behaves consistently across operators and across sessions; get it wrong and the agent acts unpredictably regardless of what skills or tools you wire up.&lt;/p&gt;
&lt;p&gt;This page covers the patterns that work, the failure modes to watch for, and how to iterate on an &lt;code&gt;AGENTS.md&lt;/code&gt; instead of writing it once and hoping.&lt;/p&gt;</description></item><item><title>autonomous-setup skill</title><link>https://go-steer.github.io/core-agent/docs/skills-library/autonomous-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/skills-library/autonomous-setup/</guid><description>&lt;p&gt;The &lt;code&gt;autonomous-setup&lt;/code&gt; skill walks a user through configuring an unattended &lt;code&gt;core-agent&lt;/code&gt; — single-agent monitor or multi-agent team. Bundled in &lt;a href="https://github.com/go-steer/core-agent/tree/main/SKILLS/autonomous-setup"&gt;&lt;code&gt;SKILLS/autonomous-setup/&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="what-it-covers"&gt;What it covers&lt;/h2&gt;
&lt;p&gt;A 9-step runbook:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Decide if autonomous actually fits (vs interactive + attach)&lt;/li&gt;
&lt;li&gt;Define the goal crisply&lt;/li&gt;
&lt;li&gt;Pick single-agent or multi-agent shape&lt;/li&gt;
&lt;li&gt;Bound the run with budget caps&lt;/li&gt;
&lt;li&gt;Write &lt;code&gt;AGENTS.md&lt;/code&gt; with unattended discipline&lt;/li&gt;
&lt;li&gt;Set headless permission posture&lt;/li&gt;
&lt;li&gt;Wire durable sessions&lt;/li&gt;
&lt;li&gt;Write the Go driver&lt;/li&gt;
&lt;li&gt;Test end-to-end before deployment&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The runbook is non-linear; the agent picks references based on which path the user is on.&lt;/p&gt;</description></item><item><title>Getting started</title><link>https://go-steer.github.io/core-agent/docs/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/getting-started/</guid><description>&lt;h2 id="install"&gt;Install&lt;/h2&gt;
&lt;h3 id="as-a-cli-go-toolchain"&gt;As a CLI (Go toolchain)&lt;/h3&gt;
&lt;p&gt;Requires Go 1.26 or newer.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go install github.com/go-steer/core-agent/cmd/core-agent@latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The binary lands in &lt;code&gt;$(go env GOBIN)&lt;/code&gt; (or &lt;code&gt;$GOPATH/bin&lt;/code&gt; if &lt;code&gt;GOBIN&lt;/code&gt; is unset). Make sure that&amp;rsquo;s on your &lt;code&gt;$PATH&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="as-a-pre-built-binary-no-go-toolchain-needed"&gt;As a pre-built binary (no Go toolchain needed)&lt;/h3&gt;
&lt;p&gt;Cross-compiled archives for &lt;code&gt;linux/darwin × amd64/arm64&lt;/code&gt; are published on the &lt;a href="https://github.com/go-steer/core-agent/releases/latest"&gt;Releases page&lt;/a&gt;, signed via Sigstore keyless.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;TAG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;gh release view --repo go-steer/core-agent --json tagName -q .tagName&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;OS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname -s &lt;span class="p"&gt;|&lt;/span&gt; tr A-Z a-z&lt;span class="k"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# linux | darwin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname -m &lt;span class="p"&gt;|&lt;/span&gt; sed &lt;span class="s1"&gt;&amp;#39;s/x86_64/amd64/;s/aarch64/arm64/&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gh release download &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$TAG&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; --repo go-steer/core-agent &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --pattern &lt;span class="s2"&gt;&amp;#34;core-agent_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TAG&lt;/span&gt;&lt;span class="p"&gt;#v&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.tar.gz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tar xzf &lt;span class="s2"&gt;&amp;#34;core-agent_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TAG&lt;/span&gt;&lt;span class="p"&gt;#v&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ARCH&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.tar.gz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./core-agent --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;core-agent-tui&lt;/code&gt; remote client uses the same naming pattern (swap &lt;code&gt;core-agent&lt;/code&gt; for &lt;code&gt;core-agent-tui&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Skills</title><link>https://go-steer.github.io/core-agent/docs/agent-design/skills/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/agent-design/skills/</guid><description>&lt;p&gt;Skills are named, reusable procedures the agent invokes when the task matches the skill&amp;rsquo;s description. This page covers the design patterns: when to write a skill vs. an &lt;code&gt;AGENTS.md&lt;/code&gt; rule, how to write a description that actually triggers, what belongs in the body vs. a &lt;code&gt;references/&lt;/code&gt; file, and how to test that a skill fires when you expect it to.&lt;/p&gt;
&lt;p&gt;For the schema and discovery details (file locations, YAML frontmatter, allow/deny lists), see &lt;a href="https://go-steer.github.io/core-agent/docs/reference/skills/"&gt;Reference → Skills&lt;/a&gt;. This page is the prescriptive companion.&lt;/p&gt;</description></item><item><title>Workflows</title><link>https://go-steer.github.io/core-agent/docs/cli/interactive/workflows/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/cli/interactive/workflows/</guid><description>&lt;p&gt;Worked examples of using &lt;code&gt;core-agent&lt;/code&gt; interactively. Each one shows a full &lt;code&gt;.agents/&lt;/code&gt; configuration you can adapt and a walkthrough of running it.&lt;/p&gt;
&lt;p&gt;If you haven&amp;rsquo;t done the &lt;a href="https://go-steer.github.io/core-agent/docs/cli/interactive/quickstart/"&gt;Interactive quickstart&lt;/a&gt; yet, do that first — these examples assume you know how &lt;code&gt;AGENTS.md&lt;/code&gt;, skills, and permission posture fit together.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="workflow-1--go-code-reviewer-with-mcp-backed-web-search"&gt;Workflow 1 — Go code reviewer with MCP-backed web search&lt;/h2&gt;
&lt;p&gt;The marquee operator example. A code-reviewer agent that knows your house style, follows a documented review procedure, and can reach the web when it needs context on an unfamiliar library.&lt;/p&gt;</description></item><item><title>GKE multi-agent scenario</title><link>https://go-steer.github.io/core-agent/docs/cli/autonomous/gke-team-scenario/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/cli/autonomous/gke-team-scenario/</guid><description>&lt;p&gt;A worked multi-agent example for running unattended &lt;code&gt;core-agent&lt;/code&gt; agents against a GKE fleet. Three coordinating agents — &lt;code&gt;platform&lt;/code&gt;, &lt;code&gt;operator&lt;/code&gt;, &lt;code&gt;devteam&lt;/code&gt; — each with their own role, MCP servers, skills, and budget envelope. The scenario at the end shows them interacting around a real production-style workflow: a rollout that breaches an SLO and gets investigated and remediated through the team&amp;rsquo;s normal escalation path.&lt;/p&gt;
&lt;p&gt;The team shape mirrors &lt;a href="https://github.com/gke-labs/kube-agents"&gt;gke-labs/kube-agents&lt;/a&gt;. The MCP wiring, skills, and scenario are concrete to &lt;code&gt;core-agent&lt;/code&gt;&amp;rsquo;s capabilities — you can adapt them to your fleet.&lt;/p&gt;</description></item><item><title>library-embedding skill</title><link>https://go-steer.github.io/core-agent/docs/skills-library/library-embedding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/skills-library/library-embedding/</guid><description>&lt;p&gt;The &lt;code&gt;library-embedding&lt;/code&gt; skill walks a Go developer through embedding &lt;code&gt;core-agent&lt;/code&gt; in their own binary. Bundled in &lt;a href="https://github.com/go-steer/core-agent/tree/main/SKILLS/library-embedding"&gt;&lt;code&gt;SKILLS/library-embedding/&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="what-it-covers"&gt;What it covers&lt;/h2&gt;
&lt;p&gt;A 5-step runbook:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Confirm the use case (CLI use vs library use)&lt;/li&gt;
&lt;li&gt;Show the minimal embed (20-line &amp;ldquo;hello world&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Identify which extension point the user needs&lt;/li&gt;
&lt;li&gt;Show a full worked example for non-trivial embeddings&lt;/li&gt;
&lt;li&gt;Discuss long-term maintenance (&lt;code&gt;go.mod&lt;/code&gt; pinning, breaking-change policy)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The extension points covered include &lt;code&gt;Prompter&lt;/code&gt;, custom tools, custom &lt;code&gt;Provider&lt;/code&gt;, custom &lt;code&gt;session.Service&lt;/code&gt;, &lt;code&gt;Compactor&lt;/code&gt; / &lt;code&gt;Checkpointer&lt;/code&gt;, &lt;code&gt;BackgroundAgentManager&lt;/code&gt;, and &lt;code&gt;RemoteAgentSpawner&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Providers</title><link>https://go-steer.github.io/core-agent/docs/reference/providers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/providers/</guid><description>&lt;p&gt;&lt;code&gt;core-agent&lt;/code&gt; ships four model backends, all behind the same &lt;code&gt;models.Provider&lt;/code&gt; interface. Pick one explicitly via &lt;code&gt;model.provider&lt;/code&gt; in &lt;code&gt;.agents/config.json&lt;/code&gt; or with the &lt;code&gt;--provider&lt;/code&gt; CLI flag, or let env-based auto-detection pick.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="auto-detection"&gt;Auto-detection&lt;/h2&gt;
&lt;p&gt;When &lt;code&gt;model.provider&lt;/code&gt; is empty (the default), &lt;code&gt;core-agent&lt;/code&gt; walks the environment in this order and picks the first match:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Vertex Gemini&lt;/strong&gt; — fires when &lt;code&gt;GOOGLE_GENAI_USE_VERTEXAI=true&lt;/code&gt; &lt;strong&gt;and&lt;/strong&gt; &lt;code&gt;GOOGLE_CLOUD_PROJECT&lt;/code&gt; is set&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gemini API&lt;/strong&gt; — fires when &lt;code&gt;GOOGLE_API_KEY&lt;/code&gt; &lt;strong&gt;or&lt;/strong&gt; &lt;code&gt;GEMINI_API_KEY&lt;/code&gt; is set&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anthropic&lt;/strong&gt; — fires when &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; is set&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If none match, you get a clear error listing the env vars to set. &lt;strong&gt;Anthropic-via-Vertex is not auto-detected&lt;/strong&gt; — it overlaps with Vertex Gemini in env vars, so you have to opt in explicitly with &lt;code&gt;--provider anthropic-vertex&lt;/code&gt; or &lt;code&gt;model.provider: &amp;quot;anthropic-vertex&amp;quot;&lt;/code&gt; in config.&lt;/p&gt;</description></item><item><title>Slash reference</title><link>https://go-steer.github.io/core-agent/docs/cli/interactive/slash-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/cli/interactive/slash-reference/</guid><description>&lt;p&gt;Reference for every slash command and keybinding available in the interactive TUI. Type &lt;code&gt;/help&lt;/code&gt; in any session for the operator-side version of this catalog.&lt;/p&gt;
&lt;p&gt;For attach-mode (&lt;code&gt;core-agent-tui&lt;/code&gt; remote client) commands, see &lt;a href="https://go-steer.github.io/core-agent/docs/reference/attach-tui/"&gt;Attach mode TUI&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="quick-reference"&gt;Quick reference&lt;/h2&gt;
&lt;h3 id="session-control"&gt;Session control&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Command&lt;/th&gt;
 &lt;th&gt;Aliases&lt;/th&gt;
 &lt;th&gt;Effect&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/help&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;Print the command list + keybindings into the scrollback&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/clear&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;Clear the local scrollback (session log is untouched)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/quit&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;Leave the TUI cleanly&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/interrupt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;Cancel the in-flight model turn (same as pressing Esc during a turn)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/resume&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;Resume a saved session from &lt;code&gt;&amp;lt;AgentsDir&amp;gt;/sessions/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/reload&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;Re-walk &lt;code&gt;AGENTS.md&lt;/code&gt;, skills, and MCP config on disk. Reports per-surface results inline (&lt;code&gt;Memory: ✓&lt;/code&gt;, &lt;code&gt;Skills: ✓&lt;/code&gt;, &lt;code&gt;MCP: ✗&lt;/code&gt; with errors listed) so you can confirm an edit parsed cleanly. Live MCP server restart and system-prompt rebuild still require a daemon restart.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="status--observability"&gt;Status + observability&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Command&lt;/th&gt;
 &lt;th&gt;Aliases&lt;/th&gt;
 &lt;th&gt;Effect&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/stats&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;Session token totals, cost, duration, per-model breakdown&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/context&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/boundaries&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Context-management activity: compactions, checkpoints, summarized chars, subtask cost&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/tools&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;List the tools the agent has access to (built-ins + MCP + skills)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/skills&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;List loaded skills with their trigger descriptions&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/mcp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;List configured MCP servers and their status&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/subagents&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/sub&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;List background subagents spawned this session&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/memory&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;Show the resolved &lt;code&gt;AGENTS.md&lt;/code&gt; chain (user-global + project)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="context-management"&gt;Context management&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Command&lt;/th&gt;
 &lt;th&gt;Aliases&lt;/th&gt;
 &lt;th&gt;Effect&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/compact [focus]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/summarize&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Manually compact the session; optional &lt;code&gt;focus&lt;/code&gt; biases what the summary preserves&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/done [note]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/checkpoint&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Write a task-boundary checkpoint; optional &lt;code&gt;note&lt;/code&gt; becomes part of the handover record&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Both run a summarizer LLM call (5-15s); the next turn picks up from the summary with prior history sliced. See &lt;a href="https://go-steer.github.io/core-agent/docs/reference/context-management/"&gt;Context management&lt;/a&gt; for the design.&lt;/p&gt;</description></item><item><title>Subagents and wrappers</title><link>https://go-steer.github.io/core-agent/docs/agent-design/subagents-and-wrappers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/agent-design/subagents-and-wrappers/</guid><description>&lt;p&gt;Two ways to push work off the parent agent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Agentic tool wrappers&lt;/strong&gt; (&lt;code&gt;agentic_read_file&lt;/code&gt;, &lt;code&gt;agentic_grep&lt;/code&gt;, &lt;code&gt;agentic_research&lt;/code&gt;, &lt;code&gt;agentic_fetch_url&lt;/code&gt;) — synchronous, bounded, single-purpose. The parent calls them like any other tool; under the hood they spawn a focused subtask on a (typically cheaper) model and return only the digest. Raw tool output never enters the parent&amp;rsquo;s context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Background subagents&lt;/strong&gt; (&lt;code&gt;spawn_agent&lt;/code&gt;, &lt;code&gt;list_agents&lt;/code&gt;, &lt;code&gt;check_agent&lt;/code&gt;, &lt;code&gt;stop_agent&lt;/code&gt;) — asynchronous, longer-running, multi-turn. The parent dispatches a goal; the subagent works in its own session until done; alerts and completion summaries land back in the parent&amp;rsquo;s chat.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This page covers when to use each, how to actually get the model to use them (the model-side adoption story is non-trivial), and the failure modes worth designing around.&lt;/p&gt;</description></item><item><title>Why core-agent</title><link>https://go-steer.github.io/core-agent/docs/why-core-agent/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/why-core-agent/</guid><description>&lt;p&gt;If you&amp;rsquo;re building an agent in Go, your starting point is the &lt;a href="https://pkg.go.dev/google.golang.org/adk"&gt;Google Agent Development Kit&lt;/a&gt; (ADK). ADK gives you a model interface, a tool-calling loop, a session abstraction, and some streaming primitives. That&amp;rsquo;s roughly 30% of what a production agent needs. &lt;code&gt;core-agent&lt;/code&gt; is the other 70% — the parts every team writes the second they take an ADK demo from &amp;ldquo;responds to my prompt&amp;rdquo; to &amp;ldquo;I&amp;rsquo;d let a real user touch this.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://go-steer.github.io/core-agent/docs/reference/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/configuration/</guid><description>&lt;h2 id="the-agents-directory"&gt;The &lt;code&gt;.agents/&lt;/code&gt; directory&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;core-agent&lt;/code&gt; walks up from the working directory looking for a folder named &lt;code&gt;.agents/&lt;/code&gt;, analogous to how &lt;code&gt;git&lt;/code&gt; looks for &lt;code&gt;.git&lt;/code&gt;. The first match wins. Everything &lt;code&gt;core-agent&lt;/code&gt; reads or writes lives there:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;.agents/
├── config.json # this file — provider, model, permissions, scope, telemetry, etc.
├── mcp.json # MCP server declarations (see MCP page)
├── skills/ # SKILL.md bundles (see Skills page)
└── sessions/ # one-shot transcripts; auto-written, safe to .gitignore
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You don&amp;rsquo;t have to create &lt;code&gt;.agents/&lt;/code&gt; — without it, &lt;code&gt;core-agent&lt;/code&gt; runs with built-in defaults and skips the project-specific bits (no transcripts, no MCP, no skills). It&amp;rsquo;s required only when you want to customize.&lt;/p&gt;</description></item><item><title>Cost efficiency</title><link>https://go-steer.github.io/core-agent/docs/agent-design/cost-efficiency/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/agent-design/cost-efficiency/</guid><description>&lt;p&gt;What actually moves the cost needle on &lt;code&gt;core-agent&lt;/code&gt; sessions, in rough order of impact. Built-in price tracking and per-model breakdowns make the tradeoffs measurable rather than guesswork; this page covers how to read those signals and the patterns that consistently reduce cost without sacrificing capability.&lt;/p&gt;
&lt;p&gt;For the mechanism details see &lt;a href="https://go-steer.github.io/core-agent/docs/reference/context-management/"&gt;Context management&lt;/a&gt; and &lt;a href="https://go-steer.github.io/core-agent/docs/reference/configuration/"&gt;Configuration → pricing&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-cost-hierarchy"&gt;The cost hierarchy&lt;/h2&gt;
&lt;p&gt;A rough sense of where dollars go on a typical coding session:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Driver&lt;/th&gt;
 &lt;th&gt;Typical share of session cost&lt;/th&gt;
 &lt;th&gt;Lever&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Input tokens (cumulative across turns)&lt;/td&gt;
 &lt;td&gt;70-90%&lt;/td&gt;
 &lt;td&gt;Compaction, checkpoints, agentic wrappers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Output tokens&lt;/td&gt;
 &lt;td&gt;10-25%&lt;/td&gt;
 &lt;td&gt;Tighter &lt;code&gt;AGENTS.md&lt;/code&gt; (&amp;ldquo;be concise&amp;rdquo;), structured output formats&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Per-turn model rate&lt;/td&gt;
 &lt;td&gt;Multiplier on both&lt;/td&gt;
 &lt;td&gt;Model selection (Pro vs Flash for subtasks)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Subtask + compaction LLM calls&lt;/td&gt;
 &lt;td&gt;2-10%&lt;/td&gt;
 &lt;td&gt;Bounded by infrastructure, not operator-tunable&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;The input-token share is the killer.&lt;/strong&gt; Every turn re-sends the entire conversation history to the model. By turn 30, you&amp;rsquo;re paying input-token prices for everything that came before, plus the new turn. The single biggest lever on cost is preventing that input-token total from growing without bound — which is exactly what compaction, checkpoints, and agentic wrappers do.&lt;/p&gt;</description></item><item><title>Built-in tools</title><link>https://go-steer.github.io/core-agent/docs/reference/tools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/tools/</guid><description>&lt;p&gt;The model-facing tool catalog &lt;code&gt;core-agent&lt;/code&gt; registers by default, plus the optional lifecycle tools the runtime wires when the corresponding feature is enabled (checkpoints, ask, autonomous scheduling). For declaring third-party tools, see &lt;a href="https://go-steer.github.io/core-agent/docs/reference/mcp/"&gt;MCP servers&lt;/a&gt;. For writing your own tools from Go, see &lt;a href="https://go-steer.github.io/core-agent/docs/library/api/"&gt;Library API&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="the-built-in-catalog"&gt;The built-in catalog&lt;/h2&gt;
&lt;p&gt;Thirteen tools are registered by default. Each is configurable via the &lt;code&gt;BuiltinTools&lt;/code&gt; struct in &lt;code&gt;pkg/tools&lt;/code&gt; (library callers) or the &lt;code&gt;--disable-tools&lt;/code&gt; flag / &lt;code&gt;tools.disable&lt;/code&gt; config field (CLI users). Every call routes through the &lt;a href="https://go-steer.github.io/core-agent/docs/reference/permissions/"&gt;permission gate&lt;/a&gt; under the &lt;code&gt;tool&lt;/code&gt; namespace — denying a tool by pattern keeps it from running even if it&amp;rsquo;s registered.&lt;/p&gt;</description></item><item><title>Library guide</title><link>https://go-steer.github.io/core-agent/docs/library/guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/library/guide/</guid><description>&lt;p&gt;This guide is for Go engineers embedding &lt;code&gt;core-agent&lt;/code&gt; in their own binary. Where the &lt;a href="../user-guide/"&gt;user guide&lt;/a&gt; is about configuring the bundled CLI, this one is about &lt;em&gt;extending&lt;/em&gt; the library — replacing the CLI&amp;rsquo;s defaults with your own UI, tools, providers, and runtime topology.&lt;/p&gt;
&lt;p&gt;The full API reference lives in &lt;a href="../library-api/"&gt;Library API&lt;/a&gt;. This guide is the narrative path through it, organized by extension point with worked examples for each.&lt;/p&gt;
&lt;h2 id="who-this-is-for"&gt;Who this is for&lt;/h2&gt;
&lt;p&gt;You&amp;rsquo;re a Go engineer building one of:&lt;/p&gt;</description></item><item><title>MCP servers</title><link>https://go-steer.github.io/core-agent/docs/reference/mcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/mcp/</guid><description>&lt;p&gt;&lt;code&gt;core-agent&lt;/code&gt; integrates with &lt;a href="https://modelcontextprotocol.io"&gt;Model Context Protocol&lt;/a&gt; servers via ADK&amp;rsquo;s &lt;code&gt;mcptoolset&lt;/code&gt;. Declare servers in &lt;code&gt;.agents/mcp.json&lt;/code&gt;; &lt;code&gt;core-agent&lt;/code&gt; spawns or connects to them at startup, namespaces their tools, and routes every tool call through the &lt;a href="https://go-steer.github.io/core-agent/docs/reference/permissions/"&gt;permission gate&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="mcpjson-schema"&gt;&lt;code&gt;mcp.json&lt;/code&gt; schema&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;servers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;filesystem&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;transport&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;stdio&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mcp-server-filesystem&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;--root&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/tmp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;env&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;LOG_LEVEL&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;info&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;github&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;transport&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;http&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://api.githubcopilot.com/mcp/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;headers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Bearer ${env:GITHUB_TOKEN}&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Top-level fields:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;version&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;int&lt;/td&gt;
 &lt;td&gt;Schema version. Currently &lt;code&gt;1&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;servers&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;object&lt;/td&gt;
 &lt;td&gt;Map of &lt;code&gt;name&lt;/code&gt; → &lt;code&gt;ServerSpec&lt;/code&gt;. The &lt;code&gt;name&lt;/code&gt; becomes the tool namespace prefix.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="serverspec"&gt;&lt;code&gt;ServerSpec&lt;/code&gt;&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Required when&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;transport&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;always&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;quot;stdio&amp;quot;&lt;/code&gt; or &lt;code&gt;&amp;quot;http&amp;quot;&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;command&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;transport: stdio&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Executable to spawn.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;args&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;optional, stdio&lt;/td&gt;
 &lt;td&gt;Argv tail.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;env&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;optional, stdio&lt;/td&gt;
 &lt;td&gt;Extra env vars; layered on top of the parent env. Values support &lt;code&gt;${env:NAME}&lt;/code&gt; interpolation.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;transport: http&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Streamable HTTP endpoint.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;headers&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;optional, http&lt;/td&gt;
 &lt;td&gt;Custom headers. Values support &lt;code&gt;${env:NAME}&lt;/code&gt; interpolation — useful for &lt;code&gt;Authorization: Bearer ${env:TOKEN}&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;auth&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;optional, http&lt;/td&gt;
 &lt;td&gt;Selects an authentication strategy that manages tokens for you instead of static headers. See &lt;a href="#authentication"&gt;Authentication&lt;/a&gt; below.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Validation runs at config load time. A server that mixes transports (e.g. both &lt;code&gt;command&lt;/code&gt; and &lt;code&gt;url&lt;/code&gt;) is rejected with a clear error before the agent starts.&lt;/p&gt;</description></item><item><title>Context management</title><link>https://go-steer.github.io/core-agent/docs/reference/context-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/context-management/</guid><description>&lt;p&gt;Long agent sessions hit two failure modes the model can&amp;rsquo;t recover from on its own:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The context window fills up.&lt;/strong&gt; Every turn appends to the prompt; eventually the next turn errors out with &amp;ldquo;context window exceeded.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Raw tool output bloats the parent.&lt;/strong&gt; A 5,000-line file read, a 200KB URL fetch, a grep with hundreds of matches — each dumps that volume into the parent&amp;rsquo;s window even while it&amp;rsquo;s still working, slowing every subsequent turn and crowding out the actual task.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;core-agent&lt;/code&gt; ships three mechanisms — designed together, deployed independently — to keep long sessions alive. All three are on by default. See &lt;a href="https://github.com/go-steer/core-agent/blob/main/docs/context-management-design.md"&gt;&lt;code&gt;docs/context-management-design.md&lt;/code&gt;&lt;/a&gt; for the full design rationale.&lt;/p&gt;</description></item><item><title>Skills</title><link>https://go-steer.github.io/core-agent/docs/reference/skills/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/skills/</guid><description>&lt;p&gt;&lt;code&gt;core-agent&lt;/code&gt; loads &lt;code&gt;SKILL.md&lt;/code&gt; bundles from &lt;code&gt;.agents/skills/&amp;lt;name&amp;gt;/&lt;/code&gt;. The schema mirrors &lt;a href="https://docs.claude.com/en/docs/agent-skills/overview"&gt;Anthropic&amp;rsquo;s published skills format&lt;/a&gt; so existing skill bundles drop in directly.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="directory-layout"&gt;Directory layout&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;.agents/
└── skills/
 ├── echo/
 │ └── SKILL.md
 ├── jira-triage/
 │ ├── SKILL.md
 │ └── examples/
 │ └── ticket.md
 └── data-export/
 ├── SKILL.md
 └── helpers/
 └── export.py
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Each subdirectory of &lt;code&gt;.agents/skills/&lt;/code&gt; is one skill. A skill must contain a &lt;code&gt;SKILL.md&lt;/code&gt; at its root; the directory name is the skill&amp;rsquo;s identifier (and what the agent invokes by). Other files in the directory are referenced from &lt;code&gt;SKILL.md&lt;/code&gt; and loaded on demand.&lt;/p&gt;</description></item><item><title>Permissions</title><link>https://go-steer.github.io/core-agent/docs/reference/permissions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/permissions/</guid><description>&lt;p&gt;The permission gate is the central chokepoint consulted before every tool call. It enforces three things in order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A built-in &lt;strong&gt;bash denylist&lt;/strong&gt; that&amp;rsquo;s non-overridable (even &lt;code&gt;yolo&lt;/code&gt; mode can&amp;rsquo;t run &lt;code&gt;rm -rf /&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;path scope&lt;/strong&gt; check for file tools — out-of-scope reads/writes either prompt the user or fail.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;mode + allow/deny patterns&lt;/strong&gt; from &lt;code&gt;.agents/config.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="modes"&gt;Modes&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Mode&lt;/th&gt;
 &lt;th&gt;Behavior&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ask&lt;/code&gt; (default)&lt;/td&gt;
 &lt;td&gt;Allowlisted calls pass automatically; everything else prompts the user via the configured &lt;code&gt;Prompter&lt;/code&gt;. With no &lt;code&gt;Prompter&lt;/code&gt;, prompts fail closed with a clear error.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;allow&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Only allowlisted calls pass. Everything else is rejected without prompting — useful for headless / automated runs.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;yolo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;All calls pass except those caught by the bash denylist or a deny-pattern. Use with care; intended for trusted local dev.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Set via &lt;code&gt;.agents/config.json&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Attach TUI</title><link>https://go-steer.github.io/core-agent/docs/reference/attach-tui/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/attach-tui/</guid><description>&lt;p&gt;&lt;code&gt;core-agent-tui&lt;/code&gt; is the operator-facing terminal UI for attach-mode — the remote client for an agent running elsewhere (workstation, K8s pod, peer-registered fleet member). It ships as a separate binary so the default &lt;code&gt;core-agent&lt;/code&gt; stays distroless-clean (no terminal-rendering deps land in production K8s images). See &lt;a href="https://go-steer.github.io/core-agent/docs/reference/configuration/"&gt;Configuration → attach&lt;/a&gt; for the listener-side config and the HTTP/SSE protocol it consumes.&lt;/p&gt;
&lt;p&gt;For local interactive use, run &lt;code&gt;core-agent&lt;/code&gt; directly — its in-process TUI is the default when stdin is a terminal. &lt;code&gt;core-agent-tui&lt;/code&gt; is the remote client only.&lt;/p&gt;</description></item><item><title>Library API</title><link>https://go-steer.github.io/core-agent/docs/library/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/library/api/</guid><description>&lt;p&gt;&lt;code&gt;core-agent&lt;/code&gt; is designed to be embedded as a Go library. The bundled &lt;code&gt;cmd/core-agent&lt;/code&gt; is a thin reference wrapper; production consumers will typically write their own binary that composes these packages.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="package-overview"&gt;Package overview&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Import path&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/agent&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Multi-turn agent wrapping ADK&amp;rsquo;s &lt;code&gt;llmagent + runner&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/instruction&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; / &lt;code&gt;CLAUDE.md&lt;/code&gt; / &lt;code&gt;GEMINI.md&lt;/code&gt; fallback loader.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/config&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.agents/config.json&lt;/code&gt; schema, discovery, atomic persist.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/permissions&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Ask / allow / yolo gate; bash denylist; path scope.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/tools&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;GateToolset&lt;/code&gt; wrapper bridging permissions to ADK toolsets.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/mcp&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;MCP server lifecycle from &lt;code&gt;.agents/mcp.json&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/skills&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;SKILL.md&lt;/code&gt; discovery → ADK &lt;code&gt;skilltoolset&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/models&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Provider&lt;/code&gt; interface + registry / &lt;code&gt;Resolve()&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/pkg/models/gemini&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Gemini API + Vertex AI provider.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/pkg/models/anthropic&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Anthropic / Claude provider (first-party + Vertex).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/telemetry&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;OpenTelemetry exporter setup.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/usage&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Per-turn token + cost tracker.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/session&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Transcript persistence (&lt;code&gt;.agents/sessions/&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;github.com/go-steer/core-agent/runner&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Headless (one-shot) + REPL (multi-turn) drivers.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="minimal-example"&gt;Minimal example&lt;/h2&gt;
&lt;p&gt;The shortest possible program: pick a Gemini model, run one turn, print partial text:&lt;/p&gt;</description></item><item><title>Agent card</title><link>https://go-steer.github.io/core-agent/docs/reference/agent-card/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/agent-card/</guid><description>&lt;p&gt;&lt;code&gt;core-agent&lt;/code&gt; can publish a &lt;a href="https://agent2agent.info/docs/concepts/agentcard/"&gt;&lt;code&gt;/.well-known/agent-card.json&lt;/code&gt;&lt;/a&gt; descriptor from its attach-mode listener so external discovery systems — most notably &lt;a href="https://docs.cloud.google.com/agent-registry/register-agents"&gt;Google Cloud Agent Registry&lt;/a&gt; — can index the binary&amp;rsquo;s name, description, and skills without a parallel registration channel. The endpoint is opt-in: a binary built without the card config behaves exactly like today&amp;rsquo;s binary plus a card-shaped 404 at the well-known path.&lt;/p&gt;
&lt;p&gt;The card is &lt;strong&gt;discovery metadata, not a transport promise.&lt;/strong&gt; core-agent does not speak the A2A JSON-RPC transport — the &lt;code&gt;url&lt;/code&gt; field on the card points at the attach listener, and an A2A client that POSTs JSON-RPC at it gets a 404. GCP Agent Registry, the actual consumer of this endpoint, only reads the card; it never drives the URL as A2A. If you need a non-A2A-shaped registration, GCP also supports &lt;code&gt;NO_SPEC&lt;/code&gt; which doesn&amp;rsquo;t require a card at all — see the Agent Registry &lt;a href="https://docs.cloud.google.com/agent-registry/register-agents"&gt;register-agents docs&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Autonomous runs</title><link>https://go-steer.github.io/core-agent/docs/cli/autonomous/operations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/cli/autonomous/operations/</guid><description>&lt;p&gt;&lt;code&gt;agent.RunAutonomous&lt;/code&gt; is the multi-turn driver for unattended workers — batch jobs, CI tasks, scheduled scripts, anything that needs to keep working after a single &lt;code&gt;agent.Run&lt;/code&gt; turn would have ended. It loops &lt;code&gt;agent.Run&lt;/code&gt; against a goal, enforces run-level budgets, and stops when the model signals &amp;ldquo;done&amp;rdquo; via an internal lifecycle tool.&lt;/p&gt;
&lt;p&gt;Two senses of &amp;ldquo;autonomous&amp;rdquo; matter here:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Sense&lt;/th&gt;
 &lt;th&gt;Driver&lt;/th&gt;
 &lt;th&gt;When to reach for it&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Within one turn&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;agent.Run&lt;/code&gt; already loops the model through tool-call cycles until a final response&lt;/td&gt;
 &lt;td&gt;Single self-contained tasks: &amp;ldquo;find every TODO in the repo and write a list&amp;rdquo;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Across turns&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;agent.RunAutonomous&lt;/code&gt; loops &lt;code&gt;agent.Run&lt;/code&gt; against a goal&lt;/td&gt;
 &lt;td&gt;Long-running work the model decomposes into multiple turns&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This page covers across-turn autonomy. For the within-turn case, see &lt;a href="https://go-steer.github.io/core-agent/docs/library/api/#streaming-events-to-a-chat-like-ui"&gt;Library API → Streaming events&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Web UI (--ui flag)</title><link>https://go-steer.github.io/core-agent/docs/reference/web-ui/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/web-ui/</guid><description>&lt;p&gt;The &lt;code&gt;--ui&lt;/code&gt; flag mounts the &lt;a href="https://github.com/go-steer/mast-web"&gt;mast-web&lt;/a&gt; operator UI at &lt;code&gt;/ui/*&lt;/code&gt; on the attach listener. One binary, one port, one auth boundary — the SPA shares the same TLS cert, bearer token, and CORS origin as the attach API endpoints, eliminating cross-origin configuration entirely. The agent serves the UI; no separate web server required.&lt;/p&gt;
&lt;p&gt;This is one of four ways to deploy mast-web. The others (hosted SPA, container image, self-host tarball) live in &lt;a href="https://github.com/go-steer/mast-web"&gt;&lt;code&gt;go-steer/mast-web&lt;/code&gt;&lt;/a&gt; and don&amp;rsquo;t involve core-agent at all. Pick &lt;code&gt;--ui&lt;/code&gt; when you want a single binary, an air-gapped deployment, or local-dev iteration.&lt;/p&gt;</description></item><item><title>Sessions and event log</title><link>https://go-steer.github.io/core-agent/docs/reference/sessions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/sessions/</guid><description>&lt;p&gt;By default, every &lt;code&gt;agent.Agent&lt;/code&gt; uses ADK&amp;rsquo;s in-memory session service: conversation history is alive only for the process lifetime, and a crash loses everything. For audit logs, replay, crash-resume, or any cross-restart workflow, wire a durable backend via the &lt;code&gt;eventlog&lt;/code&gt; package.&lt;/p&gt;
&lt;p&gt;This page covers when to use durable sessions, how to enable them, and what the substrate gives you.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-you-get"&gt;What you get&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;github.com/glebarez/sqlite&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;github.com/go-steer/core-agent/pkg/agent&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;github.com/go-steer/core-agent/pkg/eventlog&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;eventlog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sqlite&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;sessions.db&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;defer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithEventLog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WithTools&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myTools&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;*eventlog.Handle&lt;/code&gt; bundles two things every consumer wants:&lt;/p&gt;</description></item><item><title>Scion adapter</title><link>https://go-steer.github.io/core-agent/docs/reference/scion-adapter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/scion-adapter/</guid><description>&lt;p&gt;&lt;a href="https://github.com/go-steer/core-agent/tree/main/extras/scion-agent"&gt;&lt;code&gt;extras/scion-agent/&lt;/code&gt;&lt;/a&gt; packages core-agent for &lt;a href="https://github.com/GoogleCloudPlatform/scion"&gt;Scion&lt;/a&gt;&amp;rsquo;s container runtime. It is the Go counterpart of Scion&amp;rsquo;s Python &lt;code&gt;adk_scion_agent&lt;/code&gt; example — same lifecycle contract, built on the core-agent library.&lt;/p&gt;
&lt;p&gt;The adapter is opt-in. The core library and bundled CLI work standalone; you only build &lt;code&gt;scion-agent&lt;/code&gt; when you want to deploy core-agent as a Scion-managed agent.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-it-adds-on-top-of-core-agent"&gt;What it adds on top of &lt;code&gt;core-agent&lt;/code&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--input &amp;lt;task&amp;gt;&lt;/code&gt; flag.&lt;/strong&gt; Scion&amp;rsquo;s harness appends this when starting an agent with an initial task. From v1.3.0 the value is pushed onto the agent&amp;rsquo;s inbox via &lt;code&gt;Agent.Inject&lt;/code&gt; before the main loop starts; the first turn then drains it as the first &lt;code&gt;[Inbox]&lt;/code&gt; block.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Non-blocking inbox loop (v1.3.0+).&lt;/strong&gt; A background goroutine reads stdin and pushes each line onto the agent&amp;rsquo;s inbox via &lt;code&gt;Agent.Inject&lt;/code&gt;. The main loop waits on &lt;code&gt;Agent.InboxArrived()&lt;/code&gt; and runs a turn with prompt &lt;code&gt;&amp;quot;continue&amp;quot;&lt;/code&gt;; the per-turn drain prepends queued messages as an &lt;code&gt;[Inbox]&lt;/code&gt; block. Messages arriving while a turn is in flight no longer block — they queue immediately and land on the next turn&amp;rsquo;s prompt. (Previously the binary scanned stdin between turns, so a 30-second tool call delayed every message by 30 seconds.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transient activity emission.&lt;/strong&gt; On every agent / tool boundary the adapter writes &lt;code&gt;thinking&lt;/code&gt;, &lt;code&gt;executing&lt;/code&gt;, or &lt;code&gt;working&lt;/code&gt; to &lt;code&gt;$HOME/agent-info.json&lt;/code&gt; so Scion&amp;rsquo;s UI can render what&amp;rsquo;s happening live.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sticky lifecycle states via a &lt;code&gt;sciontool_status&lt;/code&gt; tool.&lt;/strong&gt; The model invokes this tool to declare &lt;code&gt;ask_user&lt;/code&gt;, &lt;code&gt;blocked&lt;/code&gt;, &lt;code&gt;task_completed&lt;/code&gt;, or &lt;code&gt;limits_exceeded&lt;/code&gt;. The tool shells out to Scion&amp;rsquo;s &lt;code&gt;sciontool&lt;/code&gt; binary so the hub gets notified.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Outside a Scion container (no &lt;code&gt;sciontool&lt;/code&gt; on &lt;code&gt;PATH&lt;/code&gt;, no writable &lt;code&gt;$HOME&lt;/code&gt;) the lifecycle hooks degrade to no-ops, so the same binary is usable for local development.&lt;/p&gt;</description></item><item><title>Multi-session daemon</title><link>https://go-steer.github.io/core-agent/docs/reference/multi-session/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://go-steer.github.io/core-agent/docs/reference/multi-session/</guid><description>&lt;p&gt;One &lt;code&gt;core-agent&lt;/code&gt; daemon serves multiple concurrent sessions belonging to different users — each with its own identity, ACL, permission grants, instruction overlays, and audit attribution. Multi-session is &lt;strong&gt;opt-in&lt;/strong&gt; and &lt;strong&gt;strictly backward-compatible&lt;/strong&gt;: deployments that don&amp;rsquo;t enable it see identical single-user behavior.&lt;/p&gt;
&lt;p&gt;This page covers when to turn it on, how to configure it, and what isolation guarantees the substrate gives you. Design background: &lt;code&gt;docs/multi-session-design.md&lt;/code&gt; in the repo.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="when-to-use-it"&gt;When to use it&lt;/h2&gt;
&lt;p&gt;The single-user &amp;ldquo;one process per user per pod&amp;rdquo; model is fine for personal interactive sessions and per-tenant pod-per-user K8s deployments. Reach for multi-session when &lt;strong&gt;one or more&lt;/strong&gt; of these is true:&lt;/p&gt;</description></item></channel></rss>