ADR-048: Node-Agent

Date: 2026-10-19 Status: Revised Again

QNTX interacts with a Node Agent; Claude Code in our case, until we support Pi more properly, this ADR should be just about the Claude Code Node Agent, at some point this ADR needs to be split (again), previously split off is: [[ADR-053-Namespace-Agents]]

A2A

The NODE agent

"NODE agent, one persistent session agent that is QNTX itself as expressed to ROOT."

"we cant just have any ai be the ROOT agent"

"NODE is ROOT"

"i want to be able to do anything"

"anything that can talk to the NODE agent can say anything to it"

"make sure --permission-mode for Claude is configurable in the Agent Element"

The loop

The loop is Claude Code's, not the node's: "accepted." The node hosts the process. It starts it, resumes it and stops it.

Its harnesses

Update: This Entire Section may be moved elsewhere, as a development doc, its not ADR ready yet. The Entire Pi story, everything Pi, move it to a separate Development doc under docs.

"IS BECAUSE I WANT TO EXPECT THAT IT WILL HAPPEN THAT I RUN OUT"

"AND HAVE A FALLBACK"

"NOT BE ENTIRELY DEPENDENT ON ONE HARNESS"

"IF PI DOESNT WORK, WE PAY MONEY FOR BEDROCK"

"IT MEANS WE ALSO NEED A PI ELEMENT"

"LETS SAY FOR DEVELOPMENT WEE USE"

The namespace agent

"an agent session for a particular namespace, different concept from the ROOT host agent"

"The shared namespace agent, opted into"

"The Namespace agent is a common Agent of the Namespace it’s opted into. That means the one who sets it up knows it’s shared amongst anyone who has REACH on it."

"The one who set’s it up does, they provide their own Subscription or API key"

"Namespaces shouldn’t be catalogued"

First uses

First: ROOT talks to QNTX

As ROOT, I open the node and say something to it. It answers as the node, and when I ask it to do something it does it itself: a sigil, or a command on the box. Each turn is attested by the ROOT agent's own DID, and tomorrow it is the same session, readable as a transcript.

"for development purposes SUPER will be allowed temporarily, but SUPER needs to be removed before the work get's merged."

"remove SUPER"

Its reach line names ROOT and nobody else.

Its git

"another thing i want it to have is its own git user so it can develop and create branches and so on."

"QNTX has a lot of github related functionality that we arent properly utilizing"

"I want to get into a position where i can use the Claude Element to prepare PR's againt QNTX"

Not there: the App reads contents and cannot write them, and where the agent runs has none of what building QNTX takes.

Not done

For the first story. It ends in something that can be checked.

  1. The box upgraded.
  2. An agent per model. The node derives one DID for the ROOT agent (agent:root) and gives it one session in each harness.

The node does not see the model traffic of an agent Claude Code runs.

"for a later phase we make sure it always runs with ground"

Ground's last release is behind its main, so Ground on the box takes a Ground release.

"Upgrading the box is in scope"

A turn that Claude Code cannot answer because the plan is spent is not handed to Pi by itself: what Claude Code answers then has not been seen.

Under ground

"to get ground setup for the ROOT agent"

"which is for A2A agents to receive a coment first, or be known that they run under ground before they do A2A shut"

"another thing i want is that rituals run on the box from now on, not locally on my machine per se."