You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Web: a new chain link (continue →) shows the model picker in its composer until its first turn, so the next link can
start on another model or provider; the continue toast shows the fallback warning when the previous model's host is
gone.
Built-ins a session's toolkit leaves out are reachable: find_tools searches them (group chi) beside MCP
servers' tools, and call_tool runs them through the usual guardrails as the real call. remove: / --no-tool / /toolkit remove stay hard.
Changed
find_tools' description and its server parameter (now group) changed: sessions with MCP servers read their
prompt again once. So do sessions on lean, child, coordinator or a kit based on them: they now declare find_tools and call_tool, and their not-loaded line changed.
A toolkit based on lean or child (a toolkit.kits entry, a bundle's chi.toolkit) no longer keeps the
built-ins its base leaves out from the model: they're reachable through find_tools / call_tool, guarded as
themselves. Name one under remove: to keep it out.
Guardrail rules on call_tool no longer see calls of chi's own tools made through it; they match the tool's own
name.
Shipped bundles: a change that needs a newer chi marks the manifest requires_chi_next instead of raising requires_chi; rake release:bump raises it to the released version and rake release:check fails on a marker
left over.
/toolkit remove X on a tool the toolkit leaves out is saved (it makes X unreachable). /toolkit add X then /toolkit remove X now removes X (it used to go back to the kit's default), and a remove then an add declares X.
The child toolkit also removes delegate and delegate_result: a child on it can't start children, even
through call_tool.
Fixed
A TLS handshake blip on a gateway (SSL_connect … unexpected eof, a reset mid-handshake) is retried like other
network errors instead of failing the turn at once; a certificate chi doesn't trust, a certificate for another
name, or an https:// base_url on a plain HTTP port fails at once, saying what to check (SSL_CERT_FILE, the
host's base_url).
A bundle tool named like an MCP tool (mcp_fs_read) no longer takes call_tool calls of that MCP tool out of mcp_* rules.
Web: on a phone the start page's model, thinking and LLM context chips wrap instead of being cut short; a toast no
longer covers a fresh link's open model panel; the family popover's status dots keep pulsing in step.
Web: the settings popovers' selects (thinking level, LLM context strategy and apply) look the same in Safari, Chrome
and Firefox: chi's own box and caret instead of each browser's native control.
Web: the thinking chip comes before the LLM context chip, on the session bar (think, reasoning, llm ctx, tools) and
beside the start page's model picker.
Fixed
/model while the web or another terminal read /stats no longer leaves the new model on the old model's prompt
profile (its turns formatted for the wrong family until the next /model).
Web: the sessions strip no longer blinks when a session updates: a card fades in only when it is new to the list,
and a running or waiting card's dot keeps its pulse through the redraw. All sessions no longer re-fades on every
update or search keystroke either.
Update with chi update (the system bundle 0.68.0), then restart chi web.
Desktop helper: agents in tmux panes: with tmux.enabled: true (then chi update) the panel lists agent CLIs
running in tmux panes, in any terminal, beside kitty's, and pastes into them with or without Enter (a pane in copy
mode is taken out of it first). tmux.binary defaults to the tmux on chi's PATH when the launch file is written; chi update warns when there is none. ChiHelper --kitty is now --agents (the helper's internal seam). See
docs/desktop.md, "Agents in kitty and tmux".
Continue on another model: chi send --new --continues ID --model NAME and the web API's POST /api/sessions
with continues and model start the next link of a chain on that model (its host checked first, nothing
archived on a refusal). See docs/sessions.md, "Session chains".
Host API keys from the macOS Keychain: with the variable a host's api_key_env: names unset, chi reads the key
from the login Keychain (service chi, account the variable's name), so the desktop helper's sessions and model
list, launchd and cron reach keyed hosts. Store a key with security add-generic-password -s chi -a VAR -w. chi self says VAR (keychain), chi desktop status has a host keys row, and install/upgrade warn about keys
the helper won't get. SAMAGOTCHI_KEYCHAIN=off turns it off. See docs/configuration.md, "API keys from the Keychain".
The peer loop: chi and a paired Claude Code or Codex session can go back and forth on a part. A peer's answer
wakes chi up to context.peer_turns (default 3) turns in a row, within session.max_wakes; chi fixes what it
flagged or replies with claude_send/codex_send; an answer whose verdict is VERDICT OK arrives as a note and
ends the round; only a message typed in the web or a TUI starts the count again (not chi send). The wake note
frames the answer as the peer's advice, within your task; every other source keeps its guard line. Plugins
declare a peer's source with chi.peer_source. See docs/context.md, "Peer sources: the peer loop".
Changed
claude-peer 0.3.0 and codex-peer 0.2.0 join the peer loop and need chi 0.67.0 (chi update, then chi bundle upgrade claude-peer / codex-peer, and /claude install-skill / /codex install-skill again for the peer's
side). Both are now built on Samagotchi::Plugin::Peer, one shared base; their texts are unchanged but for the
peer loop's.
session.max_wakes caps every wake turn in a row (delegate reports, attached context, peers); the docs said
delegate reports only.
MCP: find_mcp_tools and mcp_call are now find_tools and call_tool, chi's own tool index's (the mcp
bundle publishes its servers' tools into it: chi.tool_source, docs/plugins.md). Run chi bundle upgrade mcp
(mcp 0.7.0) to get it; an older mcp bundle keeps its own two tools on this chi. Search, calls, lazy starts and /mcp work as before. Rename tool: mcp_call in guardrail rules and hooks, and mcp_call in loop-guard's or
check-in's ignore_tools in config.yml, to call_tool; rules on mcp_* keep working (they match the MCP
tool). Approvals saved for MCP tools (keyed mcp_call>…) no longer match: each MCP tool is asked about once
more. The two tools' new names and place in the tool list re-prefill an MCP user's prompt once.
A continue whose previous link's model names a host config.yml no longer has (or a disabled one) starts the new
link on the default model with a warning (chi send: warning: …, the API's model_warning) instead of being
refused.
Fixed
Web: a session opened (or switched to) shows its live worker's features at once: the queue link on the delivery
line, the task-stop button, Alt+Enter's queue and the stale-worker badge with Restart no longer wait for the
session's next change.
Web: a switch starts the open session's page state over: a "copied ✓" on the info bar no longer carries into the
next session, a Restart under way in one session no longer blocks Restart in another, and a worker woken after a
failed load streams from its start, not from the previous session's cursor.
Web: a send stays with the session it was sent from: switching sessions while its images upload no longer sends the
prompt into the other session, and an image whose send failed in one session is uploaded again when it is sent to
another (it was refused there as an unknown image).
Update with chi update (it upgrades the bundles too): mcp 0.7.0, claude-peer 0.3.0, codex-peer 0.2.0 and the
system bundle 0.67.0. Then restart chi web and run chi desktop upgrade for the tmux support.
Plugin annotation actions (web): chi.annotation(label, command:, template:, send:) adds a pill to the
selection bar that prepares a command line of the plugin from the selected text ({quote}, {text}, {source}):
it fills the composer (an earlier draft stays under the quote), or with send: true sends at once. Up to 3 inline,
the rest behind ⋯. See docs/plugins.md, chi.annotation.
claude-peer 0.2.0: Confirm with Claude in the web's selection bar fills /claude validate with the quote; /claude validate|context titles a quote by its first quoted line, not its From …: label.
The codex-peer bundle (in the dev profile): claude-peer for an OpenAI Codex CLI session. Codex pairs (its chi-peer skill, installed by /codex install-skill), the codex_send tool and /codex validate|context|last
send it a part of the work with codex queue (killed after 10 s, never a hang), and Codex's answer comes back as
the codex-review context; Confirm with Codex in the web's selection bar. Codex's sandbox needs chi's
context folder in writable_roots (the install card shows the line). See docs/plugins.md, "The codex-peer bundle".
Toolkits: a session's toolkit names the tools its prompts declare. chi ships full (every built-in, the
default), lean (the file, shell, memory, task, question, web_fetch and context_read tools: ~1.4k tokens
fewer) and child (lean with send_note, without memory_write); config's toolkit.kits and bundles
(chi.toolkit) add their own. Pick one with toolkit.default / toolkit.child, chi --toolkit NAME (with --tool / --no-tool, also on chi send --new) or /toolkit NAME | add TOOL | remove TOOL. It is saved in the
session when it is created and kept by continues and forks; a change applies at the next turn's start. A left-out
tool is named in one prompt line, and a call to it is refused before the guardrails. The web shows a session not
on full as a tools chip. See docs/configuration.md, "Toolkits".
Plugins: ctx.toolkit and ctx.use_toolkit(name) (before the session's first reply). The coordinator bundle
(0.4.0) declares the coordinator toolkit (lean + delegate, delegate_result, list_sessions), and /coordinate puts a fresh session on it.
Changed
A command's name may be followed by any whitespace, a newline too: /foo on its own line with text under it
runs /foo with that text, in the terminals and the web (before, only a space did).
Web: a command refused as busy mid-turn comes back into the composer (it was cleared when sent).
A delegate child is told to report what should change (a wrong memory or skill, instructions that led it astray)
in its reply instead of writing memories (delegated.md).
Fixed
dialect: fireworks hosts: the web's ctx meter no longer reads 0% while an answer streams (Fireworks' first stream
event carries all-zero usage; its counts come at the end).
Still open: the Claude 5.x "bound to a different conversation" 400 on Anthropic Messages hosts (see 0.65.0); its
recovery comes in a later release.
Update with chi update (the system bundle moves with the gem; claude-peer 0.2.0, coordinator 0.4.0, and the dev
profile 0.5.0 with the new codex-peer 0.1.0).
Anthropic Messages hosts (api: anthropic): streamed text and thinking, native tool use, images, usage with
cache reads and writes, thinking blocks replayed verbatim (also after --resume; reasoning_history defaults to all there). A new host key auth: bearer|x-api-key (any host) picks the header the key goes in. Thinking levels
map to Messages' thinking (off disabled, low/medium/high adaptive at that effort, default nothing), with
fallbacks when a host refuses a field. Recaps, ctx.ask_model and broadcast triage work there too. See
docs/configuration.md, "Anthropic Messages hosts". Known limit until the next release: Claude 5.x models
(Opus, Sonnet and Haiku 5.5, Fable 5.1) may stop a turn with a 400 "… bound to a different conversation" after the
history changed under their thinking blocks; the next release adds the recovery.
dialect: fireworks on an api: anthropic host, for Fireworks directly or behind a gateway: Bearer auth, no
thinking display, no cache_control, and x-session-affinity for cache routing. chi self names it.
A provider's refusal (Messages stop_reason: refusal, or an empty content_filter stop) ends the turn with no answer: refused by the provider (category) in every UI and isn't retried. A content_filter stop after some
text keeps the text, marked [cut off by the provider's content filter].
Web composer: a row above the text field shows the keys while idle and, while a turn runs, where a message sent now
goes in (after this thinking step, tool call or answer, with its clock), with cut in now and queue for after the turn links. Alt+Enter (Option+Enter) queues. See docs/cli.md, "Typing during a turn".
Terminal: while a turn runs, the status row ends in · typing goes in at the next step (/cut, /queue).
Changed
Web: a message queued for after the running turn sits below the running turn's card, not among its rows, also
after a reload.
A chat host that refuses a sampling field (temperature, top_p, top_k) gets the step again without it instead
of the turn failing; on api: openai hosts such a 400 no longer turns reasoning off.
A Splash or Fireworks model's vision comes from its model list instead of reading "unknown".
Fixed
A server error without a numeric code is classified by its type: an invalid request fails at once instead of being
retried, an unknown model (404, NOT_FOUND) is no longer retried, a timeout_error is a 504.
Anthropic's context-overflow 400s ("prompt is too long", "input length and max_tokens exceed context limit")
roll the turn back and report it as too long for the context window, also through a gateway on the OpenAI path.
Update with chi update (the system bundle moves with the gem).
/queue TEXT during a running turn now works in an attached terminal and the web composer too, as it did in the
plain REPL: TEXT runs as a turn of its own after the running one, instead of merging into it ((queued: runs after this turn)). A session whose worker is older than this says to restart it rather than steering the turn. See
docs/cli.md, "Typing during a turn".
chi send --queue: the message runs as a turn of its own after the running turn instead of merging into it, and chi send --queue --wait waits for that turn's own answer (a running turn no longer refuses it; the running turn's
reply, end and questions are not the answer). Each turn's reply file now carries its message's id. See
docs/sessions.md, "Sending a message", and docs/sub-agent.md.
Plugins: ctx.sessions.send(id, text, delivery: :queue) runs the message as a turn of its own after the session's
running turn; delivery: :cut raises (plugins never cut). See docs/plugins.md.
Changed
Plain REPL (--no-shared): the lines a turn left over (a steer it didn't merge, /queue lines, image lines, commands
that wait) run in the order you sent them; before, an unmerged steer ran ahead of a /queue line typed earlier.
A message with images sent during a running turn no longer holds back the text lines sent after it: they go in at
the turn's next step as usual, and the image message still runs as a turn of its own after it.
Fixed
Stopping a session mid-turn (chi sessions stop, the web's stop, a parent stopping its delegate) cancels the turn
with its own reason, session_stopped, instead of the user's Stop: the turn's line reads "canceled (session
stopped)", a command it was running "stopped as the session was stopped" (slow-commands 0.2.2 counts it as
stopped, not slow), and chi send --wait --format json reports cancel_reason: session_stopped.
A delegate (and any worker a session's own commands start, such as chi send --new) reads hosts: from config.yml
as it starts, so it sees a host added or changed after its parent's worker started; before, it got the parent's
start-time hosts through SAMAGOTCHI_HOSTS_JSON, which workers no longer inherit (one set in your shell
applies to that chi process only; put hosts in config.yml).
Web: a step that only called plugin tools with a verb label is titled by the label ("echoing"), not "working
with echoing"; among other tools such a call is named by its tool ("working with read, echo").
Web: a send from a stale tab into a session deleted meanwhile goes back to the start page with a "was not
found" notice, the line kept in the composer, instead of an alert.
chi send, the web composer and a plugin's ctx.sessions.send now report a message the session's worker refuses
(a 4xx answer such as a delivery it doesn't run) instead of writing it as an input file the worker would merge
anyway; a body over the worker's size limit still goes in as a file, as before.
chi answer, chi send --wait ID (no message) and delegate_result wait for the reply of the turn they are about
(the answered turn, the running turn, the follow-up's turn), not a newer one queued behind it; a Continue of the
step-limit question gets the continued turn's reply, and a Stop ends the wait as not_continued. Workers older
than this keep the old behaviour.
The claude-peer bundle (in the dev profile): pair a chi session with a Claude Code session you work with, and
the claude_send tool sends Claude a part of the work (a plan step, a diff, a finding) to validate, as context or
with a question; Claude's answer comes back as the claude-review context. /claude validate|context <text> and /claude last send without the model, /claude shows whether a Claude is paired, and /claude install-skill
installs Claude's chi-peer skill, which pairs ("pair with chi "). See docs/plugins.md, "The claude-peer
bundle".
Plugins: ctx.context.list gives each source's last summary: too. See docs/plugins.md, "Attached context".
Fixed
Attached context: a source added with chi context add NAME --push now wakes an idle session when its first
push asks to ("wake": true); before, only later pushes could.
Plugins: ctx.context.list returns [] for a new session whose file isn't saved yet (a plugin command before
the first turn) instead of raising "Session not found".
An after_turn hook's file refs on the answer (event[:refs]) must be under the session's folder, as a plugin
tool row's are: a file elsewhere is refused (and logged), and a stored one is dropped when the answer is shown.
loop-guard (0.3.8): the card for a turn it stopped prints under the blocked call's row in the terminal, not
before it.
Attached TUI: joining a session whose last turn was images alone (sent from the web) names each image once, not
twice.
Attached TUI: text you had typed when the step-limit question opened comes back at the prompt once you answer
it, instead of being lost.
chi -p … --non-interactive says so on stderr and exits 1 when the iteration limit cuts the turn short, instead
of exiting 0 with the partial text as if it were the answer.
chi --no-shared --resume drops a question the session's last worker saved and died with, as an attached resume
does, instead of keeping it in the session file.
Plugins: chi.tool(…, refs: ->(args) { [...] }) gives a tool call's web row its refs (a ticket, a PR, a file
under the session's folder) with their URL actions: the row's title opens the first, its ▾ menu offers the
rest, on a phone too. Saved with the result, so a reload shows them. See docs/plugins.md, "Refs on a tool's
row".
Changed
Web: the stage view no longer jumps: it keeps its height while a turn runs, its chip stays put when the answer
arrives, and the finished turn slides away instead of collapsing. The stage floats above the composer (its rising at
a turn's start moves nothing, and the history behind it glides instead of jumping); content changes inside it (the
first words of a reply, an answered card, a short answer), so a card you answer stays where it is; it grows with a
short ease when a card or the answer needs room; its chip is its footer (the steps open right above it); and when
the turn moves into the history the stage slides away under the composer, then the turn appears there.
Web: on a phone the top bar no longer gains a row mid-turn when the hidden strip's pill grows ("· 1 waiting"), which
pushed the whole session down; the pill drops its session count while it says live or waiting.
Web: while a question or approval waits in the stage view, the stage shows the whole text of the reply that asked
it, not only its last sentence.
Web: the model's question or its own approval, once answered, keeps the reply that asked it (a delegate's relayed
approval, a hook's question and the step limit don't): two muted lines under its question → answer line, the
whole text when the card is open, live and after a reload.
Web: a finished turn's steps block shows its outline when its steps said something: open, one line per step that
wrote text (a mid-turn note reads without a click), and each run of tool-only steps folded into one · N steps
line that shows them. Live (both views) and after a reload; a turn whose steps said nothing collapses as before.
Web: question and approval cards answer from the keyboard. Enter in the response box or on an option submits
(never Deny or Dismiss), and a new card takes the focus when the message box is empty.
github-pr 0.5.0: a path:line it links in an answer is also a file ref, so the web's ref menu offers the file in
this checkout (editor, show in turn, copy) and a "PR diff" (or "File at head") action. Needs chi 0.61.0; run chi update.
source-links 0.5.0: each ref it links in an answer gets an "Open in " action in the web's ref menu; a
source's new kind: key names its refs' kind (default issue). Needs chi 0.61.0; run chi update.
Chat hosts (api: openai) keep the running turn's reasoning across a mid-turn steer under reasoning_history: turn, as native hosts do: a person's line, a plugin's nudge (check-in, agents-md) or a step-limit Continue's text no
longer drops the reasoning of the replies before it, so the request after it extends the one before and the
server's prompt cache holds. A !cmd run while the step-limit question stands still starts past itself. On a stock
Qwen template (Splash) the benefit needs chat_template_kwargs.preserve_thinking: true; see docs/configuration.md.
Fixed
A turn run in the REPL (--no-shared) keeps the answer's display and refs (source-links' and github-pr's links,
a hook's present), so the web shows them when it opens the session; before, the save dropped them.
A command a signal to chi stopped (a worker's TERM, HUP or INT mid-execute) says "stopped by a signal to chi",
not "stopped by the user"; one it kept from starting says "not run, a signal to chi stopped the turn".
slow-commands 0.2.1 doesn't count either as slow.
A turn whose worker was killed (SIGKILL, a crash) keeps its tokens, speed and timings up to its last checkpoint:
the session's stats count it as a canceled turn (worker_stopped); before, they lost it.
Web: hovering a ref with a ▾ at the very end of a line no longer pushes it onto the next line.
Web: a failed + URL attach keeps the "why" you typed (it was emptied), and a context chip with the keyboard
focus keeps it when the chips refresh.
Update with chi update: the system bundle 0.62.0, github-pr 0.5.0, source-links 0.5.0 and slow-commands 0.2.1.
Then restart chi web.
Hooks and plugins can attach refs to the answer: event[:refs].call(match:, kind:, target:, label:, actions:) on :after_turn, stored as display_refs on the answer (display only: the model never sees them). The web pairs them
with the answer's links and text: their actions join the ref's menu, live and after a reload. Caps: 200 refs and
256 KiB per answer; a refused ref is logged as refs_rejected. See docs/hooks.md.
Changed
A ref's values are capped (Ref, RefAction): a label at most 200 characters, at most 8 actions, a target id
200 and a path 4,096 characters; an action's id 64 and label 100. An action URL with userinfo
(https://user:pass@host/) is refused, and the web page refuses one too.
Fixed
A worker that gets TERM, HUP or INT (chi sessions stop, a closed terminal, a process-tree teardown) stops its
running turn as a Stop with reason signal and saves it, then exits; before, the turn and its prompt were lost.
A stopped session's worker now saves the turn it kept too.
A worker killed mid-turn (SIGKILL, a crash) no longer loses the whole turn: the worker writes the turn so far to
the session file with an interrupted_turn mark (the prompt as the turn starts, then its iteration boundaries,
at most every 10 s), so it loses only what came after its last written boundary. The next worker (or a --no-shared REPL resuming the session) ends that turn as canceled with a note the model reads
(cancelled (worker-stopped)), so the session is idle again.
Workers outlive whoever spawned them: a worker leaves the spawner's process tree (forked again, setsid,
reparented to init), so a tool tearing down a background chi send --wait, or a closing terminal, no longer
kills it mid-turn (run #43 lost a 169-step turn that way).
A card shown during a turn by a worker that has since exited comes back read-only: no buttons. A stale check-in
card's Nudge steered the next worker's turn on every click. Cards shown between turns (github-pr's offer, btw,
coordinator) keep their buttons.
check-in nudges once per check-in: repeated Nudge clicks (or /checkin nudge) on the same check-in answer
"check-in: already nudged at N tool calls" instead of steering the turn again. Run #43 got 12 identical nudges.
Web: a ref's ▾ sits in room the ref makes on hover, never over the next words.
Update with chi update: the system bundle 0.61.0 and check-in 0.2.4 (nudges once per check-in). Then restart chi web.
chi web has a favicon: χ on a blue-to-violet rounded square. Safari showed a "1" monogram before.
chi --append-system-prompt FILE (repeatable) and a config.yml append_system_prompt: list: a file's text goes
into the system prompt after AGENTS.md, in the cached part. A relative config entry is looked up where chi runs
(append_system_prompt: [CLAUDE.md]); the flag's files are saved in the session and kept by forks and continues. /stats names the prompt's files on a prompt files: line.
An analytics resumed mark on the turn record of a step-limit Continue (resumed: true; every other turn has resumed: false). continue also marks a reminder's and a wake's turn, so script/model_notes_report now counts
Continues from resumed, falling back to continue record by record for older files. :turn_started and the before_turn hook payload carry resumed too.
A hook's or plugin's notice can be marked fallback_for: :editor: a line naming a file the viewer could open from
a ref. The web leaves it out for a viewer on this machine with web.editor set; a phone and the terminals show it.
ctx.prompt_files for plugins: the files whose text is in the session's system prompt now — the AGENTS.md chain
and the appended files — as absolute paths in prompt order.
The agents-md bundle, in the core profile (core 0.3.0: chi update installs it for existing core users):
a nested AGENTS.md of the session's checkout — one in a directory the session doesn't run in, which the
system prompt never sees — is steered into the conversation the first time a tool (read, write or edit) touches a file under its directory, outermost first, once per session, and never re-injected after a
resume or a woken worker. It never stops generation or thinking, and leaves the chain's and appended AGENTS.md files alone (ctx.prompt_files). Files in another repository, a nested repository or a
submodule are ignored. Opt out with skip_agents_md: true, as with the chain; bundles: agents-md:
settings: tools, max_chars. See "The agents-md bundle" in docs/plugins.md.
Changed
The default step limit (turn.max_iterations) is 300, up from 100: most long build turns now finish in one turn
instead of stopping at the step-limit question. Loops are caught by the loop-guard bundle, and check-in's card
(at 50 tool calls, then every 50) still says a turn is long without stopping it. --no-interrupt stays 1000.
Started in a subdirectory, chi loads every AGENTS.md from the top of the git work tree down to the current
directory, outermost first, instead of the subdirectory's replacing the root's. A further file is headed with its
directory ("Project specific description for pkg/:"); a session with one AGENTS.md gets the same prompt as before.
Fixed
A step-limit Continue no longer drops the turn's reasoning: on a chat host (reasoning_history: turn) the
continued turn sends the earlier replies' reasoning back as before the limit, and on a native host
(/completion) the prompt keeps the run's thought blocks, those before a mid-turn steer too. The model keeps its
thinking, and the first request after the Continue matches the last one before the limit (before the fix, a local
27B read most of a 17k prompt again: 24.9 s to the first token instead of 4.0 s). Continue's text is a steer, and on a chat host still starts
the reasoning afresh from it. After a /model change while the question stands, the Continue starts afresh.
Update with chi update: the system bundle 0.60.0, the core profile 0.3.0 (now with agents-md) and the new
agents-md 0.1.0 bundle.