<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on core-agent</title><link>https://go-steer.github.io/core-agent/docs/reference/</link><description>Recent content in Reference on core-agent</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://go-steer.github.io/core-agent/docs/reference/index.xml" rel="self" type="application/rss+xml"/><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>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>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>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>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>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>