pinecallDocs
The gateway / Dev verbs

Dev verbs

The endpoints that exist only so a developer can drive a call by hand.

Some of what a console does needs the agent's directory, not the gateway: mount the class for a written call, read the goldens, push the docs, run the memory goldens, write a candidate, read a reproduction, render the panel an agent draws beside a conversation where the tenant's own systems are reachable. So the console asks the gateway, and the gateway asks the process standing there, the pinecall start holding the agent, over the app socket it already has open:

console ── POST /v1/agents/clinica-norte/dev/evals/goldens.run ──▶ gateway
gateway ── dev.request {id, verb, data} ──▶ the socket that answers the console for clinica-norte
gateway ◀── dev.answer {id, result | refused} ── the app
console ◀── 200 result, or the refusal's status and sentence, verbatim

The request is never stored: it goes down the socket as an ephemeral entry with seq: 0. The answer is the verb's own shape, which belongs to the CLI that answers it; the wire closes the verb (DevVerb) and the envelope.

family scope verbs
chat talk chat.roster · chat.start · chat.say · chat.end
knowledge knowledge knowledge.roster · knowledge.push · knowledge.eval
memory memory memory.roster · memory.eval · memory.extraction
view calls view.render
evals evals simulate.start · goldens.roster · goldens.run · promote.roster · promote.write · drift.read · reproductions.roster · reproductions.read

A verb asked under the wrong family is 404; an app that says nothing for two minutes is 504.

Which process answers#

pinecall start holds two sockets for an agent: the process serving the class, which takes the calls, and beside it a companion that registers with answers_dev: true and takes_unclaimed: false, which takes no call and answers the console. The gateway sends each verb to one of them:

the ask goes to
?app=<id> that socket, whatever the family; 409 when it does not hold the agent
view.render the socket serving the call: the class draws the panel. The newest that takes unclaimed calls, in the key's scope, else the org's own
every other verb the newest socket that answers the console and is not draining, in the key's scope, else the org's own

Nobody holding the agent is 404. An agent held only by processes that serve calls — an SDK's own process, with no pinecall start beside it — is 409 with agent <slug> is held, but nothing answers the console for it: run pinecall start in its directory; a view.render with nothing taking unclaimed calls is 409 with the sentence that names pinecall start too.