Evidence record / temporal-agent-harness

A dated record of one change, kept so the writing that cites it can be checked. Compiled from the sources listed below by the research run, not written for reading. The judgment lives in the issues that cite it, below.

2026-10-13-temporal-agent-harness-first-class-messages-shipped-in-0-5-0-the-packaged-skip-all-route-is-gone-and-the-examples

First-class messages shipped in 0.5.0: the packaged skip-all route is gone, and the examples rebuilt it as handlers that model_callable=False does not hide. The packaged slash commands, /approvals skip among them, are deleted. Every inbound path now runs through @agent.accepts handlers that declare mid_turn (ENQUEUE, ACCEPT, or REJECT by default); events carry message_id; expected_turn, is_message_queuing_enabled and the reply, error, message_queued and operator_command_* events are gone, replaced by message_accepted and message_handler_start/_end/_error; agents are defined with @agent.defn and @agent.init (#150, #155). So the wheel no longer ships an HTTP route to the skip-all layer. But the two examples that let a user change posture do it with @agent.accepts(mid_turn=MidTurn.ACCEPT, model_callable=False) handlers whose choices include dangerously_skip_all, and a posture change releases every parked call the new policy allows. model_callable=False only keeps a handler out of a parent agent’s generated toolset. It hides nothing from POST /api/messages, which takes any handler name, from the chat-server, which offers every handler (section 7), or from a parent built with SubagentToolPolicy.dangerously_allow_all(). The code comment that a child’s approval policy “stays operator-owned even under dangerously_allow_all()” holds for the tool_approval update and not for a policy handler the author wrote. HTTP session creation still passes an empty AgentConfig(), so an HTTP caller cannot choose the starting policy; a Temporal client still can.

Channel: preview-or-beta. Half: both. Date: 2026-09-30.

Operator consequence: Clients written for 0.4.0 break on 0.5.0: key on message_id, drop expected_turn, replace is_message_queuing_enabled with per-handler mid_turn, and move agents to the agent.* decorators. Do not treat model_callable=False as access control. A handler that moves the guardrail belongs to whoever reaches the server or the chat thread. If you copy the examples, drop the skip-all choice or gate the handler in your own app layer, and never give a parent dangerously_allow_all() over a child that has such a handler. The capability half: one dispatch path with typed, self-describing handlers replaces the operator-command channel the last read flagged, so there is less harness surface to lock down and the remaining risk sits in code the agent author controls.

Receipt

Finding metadata

Run: 2026-10-13-profile-refresh-2026-09-21_2026-10-13-frontier-v0

Finding ID: 2026-10-13-temporal-agent-harness-first-class-messages-shipped-in-0-5-0-the-packaged-skip-all-route-is-gone-and-the-examples

Profile citations

Source links

Primary links, including exact changelog lines when available.

Versioned source: run artifact