Changelog
Copy Markdown0.1.0-rc.6 (2026-11-11)
deployment.runtimereturns resource use for each node: memory by type, memory the OS reports, processes grouped by the module that runs them, processes, ports, atoms and ETS tables against their limits, scheduler use, run queue, reductions, garbage collection, I/O, versions and, with os_mon, CPU load, memory and disks. It also returns the running agents that use the most memory.deployment.nodescounts the agents on the nodes that arerunning,idleandparked.agent.runtimereturns a running agent's memory, mailbox size, process count and reductions.agent.resolvedreturns what the app gives an agent: who it works for, its policies, MCP servers and their tools, notify targets, channels and workspaces.
0.1.0-rc.5 (2026-11-06)
interrupt.argumentsholds the arguments of the call a person decides on.namenames that call's tool, which for a coding agent's request differs from the call that parked.
0.1.0-rc.4 (2026-11-04)
trigger_definition.overlaptakessettle, the default for clock and feed triggers. A trigger that fires while the agent waits on an unanswered interrupt cancels that turn, then sends its prompt.agent.cancelledhastrigger, set when a trigger cancelled the turn.agent_definition.model_options:temperature,top_p,max_tokens,reasoning_effort, and the model call's timeouts in seconds. No other keys.agent_definition.retriesdocumentsRetry-After.
0.1.0-rc.3 (2026-11-03)
A timeline's run has
subagentsteps: a task handed to a delegate, with what it answered.events.listandevents.headread only the agents named:agentsis required.agents.listtakeslimitandafter, and answersnext, the cursor after the page. Withoutlimit, it lists every agent, as before.
0.1.0-rc.2 (2026-11-02)
- The events
wardrik.provider.added,wardrik.provider.removed,wardrik.notify_target.addedandwardrik.notify_target.removed. - Each generated operation function's doc shows a call.
- An interrupt given as
interrupt:names its ownagentandconversation:Wardrik.Agent.approve(scope, interrupt: interrupt). openapi.jsondescribes whathook.deliver,hook.deliver_with_secretandchannel.delivertake over HTTP: the request as the service sent it, in any content type.x-wardrik-inputandx-wardrik-outputgive what the operation itself takes and answers.agent.clearis summarized as clearing a history. The agent and its other conversations stay.
Breaking
- Behaviour callbacks take a request struct, then options.
Wardrik.Server'srun/1andstream/1take aWardrik.Server.Request, andfollow/2aWardrik.Server.Follow.Wardrik.Channel.notify/2takes aWardrik.Channel.Notification.Wardrik.Channel.Installationscallbacks take aWardrik.Channel.Installations.Request. - Secrets, ceilings, MCP servers and connections are no longer protocol operations.
Wardrik.Secrets,Wardrik.Ceilings,Wardrik.MCPServers,Wardrik.Connectionsand their types and schemas are gone. - The
wardrik.ceiling.reachedevent and its schema are gone. Ceilings belong to the app that sets them. agent_definitionno longer speaks of orgs, owners orconfig.yaml. Its example sharesagt_runbooks.- Statements and tokens are gone:
Wardrik.Statement,Wardrik.Tokens,Wardrik.Token, thetokens.*operations and theauthenticate/2callback. Wardrik.Resource,Definition.principal/1and the channel installation'sapproversare gone. A notification names itsworkspace.Wardrik.Scope.new/2takes the server, then:wardrik,:principal,:actorand:context.- Agent IDs are opaque: 1 to 255 characters, no control characters.
Wardrik.AgentIDis gone, andagents.listandagent.readno longer answer aname.{agent}in a route is one URL-encoded segment. - A conversation is a field, not part of the agent ID. Operations on one take an optional
conversation, and their routes sit under/v1/agents/{agent}/conversations/{conversation}.WardrikProtocol.operation/1gives that route as:conversation. - Events carry
agentandconversationattributes. A cursor encodes a list of[agent, conversation, sequence]. agents.list,agents.forget,agents.cancel,interrupts.list,events.list,events.headanddeployment.reloadtakeagents, a list of agent IDs, each with all its conversations.- An operation with two or more path parameters takes one keyword list, including
conversation::Wardrik.Agent.approve(scope, agent: "agt_1", interrupt: "call_1", conversation: "C1"). That'sWardrik.Agent'sapprove/2,deny/2,kill/2,authorization/2,trigger_set/2andtrigger_remove/2,Wardrik.Hook.deliver/2,deliver_with_secret/2andWardrik.Channel.deliver/2. Wardrik.Agent.decide/2takes one keyword list too, asapprove/2anddeny/2do:decide(scope, agent: "agt_1", decisions: %{"call_1" => :approve}, conversation: "C1").- An operation with one path parameter takes
conversation:in its options:Wardrik.Agent.ask(scope, "agt_1", "Hi", conversation: "C1"). - An operation's input takes only its own fields. Any other key raises
ArgumentError. - An operation with no fields of its own takes no input:
Wardrik.Agent.read(scope, "agt_1"). Wardrik.Interrupt'sagent_idisagent.Wardrik.Notice,Wardrik.InterruptandWardrik.Server.Followcarryconversation.
0.1.0-rc.1 (2026-10-30)
- Wardrik's events as CloudEvents: a JSON Schema for each event type, and for the envelope.
- Every operation in one OpenAPI 3.1 document, by its
operationId, with the action it needs, its effect and what it acts on. WardrikProtocol.schema/1, a schema with every$refinlined, for any JSON Schema validator.operations/0andoperation/1, each operation with oneinputschema across its path, query and body.types/0anddataschema/1, for every event type.- Live events, like
message.delta, markedx-wardrik-live: sent as they happen, never stored. - The typed Elixir functions, like
Wardrik.Agent.ask/3, that packages built on Wardrik call. Wardrik.Server, the behaviour for what runs Wardrik's operations.