PT.newsa PrompTugal.news site
4 commits · 3 pushes · 4 agents in 15 min

Independent of Web Summit · official site

The agentic team · a draft for Dinis and Angelo to correct (work/48)

PT
.news
a PrompTugal.news site · the agentic team
Lisbon Tech Fringe · brief 14 · Dinis Cruz with Angelo · 11 Nov 2026

Where agents run

"Use as much frontier models, so much open weight models as we can ... the point here is not to slow down."
01 · Two different things

An agent

a role, its craft, its rules, its context, its task and its key: a model in an environment, with tools, in a loop. It is not where it runs.

researcher.2 · design.1 · the lead

An LLM call

one input, one output, from a model. An agent makes many, on many models and accounts.

the second opinion · Llama 3.3 70B
Agents on near-frontier models; most calls inside them on open-weight models.
02 · The formula
# for a task t, choose the runtime r and the model m:
place(t) = the cheapest (r, m) where
  io(r) ≥ io(t)         # data in and out
  loop(r) ⊇ loop(t)     # the tools it needs
  identity(r) ≥ identity(t) # can it sign?
  trust(r,m) ≥ data(t)  # private stays ours or local
  capability(m) ≥ judgement(t)
  latency ≤ time(t) · oversight(r) ≥ oversight(t)
cost = quota pressure × tokens × price  # quota weighs most
03 · Data in and out: the levels
L0chat: a person pastes in and out L1files: a markdown or a zip to download L2vault: given, or made by the agent (provenance) L3signed lanes: inboxes, /tip/ L4git: push to dev behind the gate L5everything: git, vaults, network, wakes
An agent has a key and either git (L4) or vaults (L2).
04 · Where it can run
runtimes (the loop)
Claude Code · cloudClaude Code · laptopsChatGPTother agentsa person
models (the calls)
Claude: Opus · Sonnet · HaikuOpenRouter: open weightOllama on our laptopsOpenAI
Work travels as a task packet: a signed task.json, picked up anywhere, returned signed to a vault.
05 · The matrix today
Extract an event's factsopen weight
Second opinion on an eventopen weight
Classify persona, topic, free/paidopen weight
Parse a WhatsApp tip (private)Ollama, local
Translate to Portugueseopen weight
Screenshots, usability runslaptop agent
Design, code, outreach draftsClaude agent
Policy, security, routingClaude, frontier
lisbontechfringe.com · the agentic teamdocs/where-agents-run.md · work/48 · a draft for Dinis and Angelo to correct

Where agents run

Dinis: "Try to use as much frontier models, so much open weight models as we can, because ... we are already maxing out a lot of our accounts ... the point here is not to slow down. The point here is now to engineer a lot of our actions that actually can be done by open weight models, where we keep Claude and others running in the current loop."

1. Two different things: an agent and an LLM call

An LLM callAn agent
What it isone input, one output, from a modela model in an environment, with tools, in a loop
What makes ita prompt and a modela role, its craft, its rules (ABP), its context, its task, and its identity (a PKI key)
Memorynoneits context, its status file, its inbox, its vaults
Where it runsany model endpointany runtime that gives it a loop and tools
Examples herethe second opinion (Llama 3.3 70B on OpenRouter)researcher.2, design.1, the lead

An agent is not where it runs. The same agent (role, rules, key, context, task) can run on Claude Code today and on a laptop tomorrow, and inside one run it can make many LLM calls to many models on many accounts. The direction: agents on near-frontier models; most LLM calls inside them on smaller, cheaper or open-weight models. Claude already does this (Opus calling Sonnet and Haiku).

2. The primitives

2.1 Runtimes: where an agent's loop runs

idRuntimeLoop and toolsNotes
R1Claude Code, cloud (this account and the team's)full: shell, git, browser, network, scheduled wakeswhat runs today; quota is the bottleneck
R2Claude Code, local on our laptopsfull, plus the laptop's own modelsthe bridge to the laptops' Ollama models: the laptop's agent pulls task packets and calls its own Ollama; nothing on the laptop is exposed
R3ChatGPT (an agent mode)its own tools; no git of ourstalks to us through vaults, files or chat; our ABP hooks do not run there, so its output is checked where it lands
R4Other agent providersvariesto add as we find them
R5A person with a chat windowthe person is the looplevel 0: paste in, paste out

2.2 Model endpoints: where an LLM call goes

idEndpointModelsCostNotes
M1Anthropic, through ClaudeOpus, Sonnet, Haikuquotathe agents' own brains
M2OpenRouteropen-weight (Llama, Qwen, DeepSeek) and othersmetered, cheaplive: admin/tools/llm.mjs, /models/
M3Ollama on our laptopsopen-weight, localfree at the marginprivate data never leaves; reached only by an agent on the same laptop (R2)
M4OpenAIGPT modelsmeteredthrough ChatGPT (R3) or its API

2.3 The I/O level: how data gets in and out of an agent

levelNameIn and out byProvenance
L0chata person pastes in and copies outnone: the person vouches
L1filesthe agent returns a markdown file or a zip to downloadthe file's sha256, noted by whoever uploads it
L2vaultthe agent reads and writes an sgit vault, given to it or made by itstrong: a vault made by one session is that session's record (as on ruv.sgit)
L3signed lanessealed, signed messages on append lanes (our inboxes, /tip/)signature checked against data/keys.json
L4gitthe agent pushes to dev behind the gate (Dinis, 14:26 UTC: "the agents run always on dev"; never main); CI deploysthe commit, its Agent: trailer, its key
L5fullgit, vaults, lanes, network, wakesall of the above

2.3b The session layer (Angelo, 14:26 UTC)

ModeStateExample
stateless callnone: one input, one outputthe second opinion via the router
chat sessiona conversation's context, kept by the providera person with ChatGPT or Claude chat (L0); an API conversation
agent loopits context, files, vaults, status, inbox, wakesresearcher.2, the lead

The same model can serve all three; what changes is who holds the state and for how long.

Mapped by architect.1 (brief 15). Each mode, with whose state it is and what that means for the record and the ABP:

idModeState held byOur recordABPEndpoints
S0stateless callnobodythe router's ledger (prompt hash, model, cost)the calling agent's grant; the call cannot actM1 (API), M2, M3, M4 (API)
S1chat sessionthe providernone unless exported: outside git and the vaultsno hooks: a person is the loop (L0), or the output is checked where it landsM1 (Claude chat), M4 (ChatGPT)
S2agent loopus: container, git, vaultscommits, status files, inboxes, the hook logits grant, the hooks (R1, R2), the gateM1 via R1/R2; M2/M3 via the router

Rules: a task's state(t) is the longest-lived state it needs (none, a conversation, memory across runs), and the formula adds modes(r, m) ⊇ state(t). State the swarm must keep (decisions, evidence) lives in our record; a chat session is never the only copy. Dinis talking to an agent in its own session is an S1 input into an S2 agent: the agent writes it down (briefs/, its status) so it outlives the session.

2.4 The other requirements of a task

PrimitiveValues
Loopnone (a single LLM call) / tools in a loop (an agent)
Identitynone / a session key (PKI) / a key registered in data/keys.json
Judgementlow (extract, classify) / medium (summarise, check) / high (design, code, decide, write for people)
Datapublic / internal / private (people, keys): private stays on our runtimes or on local models (M3)
Networknone / public web (within sources.md) / our services only
Timeinteractive / within the hour / batch
Oversightnone / reviewed output (the gate, a vault check) / ABP hooks in the loop (R1, R2): what a task that writes our repository or speaks for us needs

3. What an agent is: the altitudes of execution

*Revised 11 November 2026, 15:1x UTC, by Dinis with Angelo (briefs/2026-11-11-1440-the-operating-model.md); the page: /agentic-team/operating-model/.*

The rule was "an agent has a PKI key and either git (L4) or vaults (L2)". It is replaced by the altitudes of execution (also *the holarchy of work*): the same shape at every size, only bigger or smaller.

AltitudeWhat it is
A4swarmagents of agents: can spawn and schedule others (the control plane)
A3agenta loop with an environment: memory (status file, inbox, vaults), its own wake, a reach beyond its sandbox
A2loopa closed agentic loop: calls models and uses the tools it was handed until the task is done, then stops; cannot start others or schedule
A1LLM calla prompt in, an answer out
A0computecode that runs

4. The formula

For a task *t*, write its needs: loop(t), io(t), identity(t), judgement(t), data(t), network(t), time(t). For each runtime *r* and model *m*, we know what it offers and what it costs. Then:

place(t) = the cheapest (r, m) such that
    io(r)        ≥ io(t)                       # it can get the data in and out
    loop(r)      ⊇ loop(t)                      # it has the tools the task needs
    identity(r)  ≥ identity(t)                  # it can sign, if the task must be signed
    trust(r, m)  ≥ data(t)                      # private data only on our runtimes or local models
    capability(m) ≥ judgement(t)                # the model is good enough for the judgement
    reach(r)     ⊇ network(t)                   # it can reach what the task must read
    latency(r,m) ≤ time(t)                      # it answers in time
    oversight(r) ≥ oversight(t)                 # its actions can be observed against the ABP
    modes(r,m)   ⊇ state(t)                     # stateless, chat session or agent loop (§2.3b)
cost(r, m) = quota_pressure(r) × tokens(t) × price(m)      # quota is the scarce thing, so it weighs most

And inside an agent, for each LLM call *c*: model(c) = the cheapest tier whose capability ≥ difficulty(c), through the router (admin/tools/llm.mjs, tiers in llm-models.json). Prefer M3 (local) when the data is private or the volume is large and latency does not matter.

5. The matrix today: our tasks, where they run now, where they could run

Task (who does it today)LoopI/OJudgementDataNowCould run on
Extract an event's facts from its page (researcher.2)callL1lowpublicR1 + SonnetM2/M3 open-weight 70B, driven by any agent
Second opinion on an event (dev.2)callL1lowpublicM2 Llama 70BM3 local, same model
Classify persona, topic, size, free/paid (researcher.2, ontologist.1)callL1lowpublicR1 + SonnetM2/M3
Summarise a WhatsApp tip into fields (tips lane)callL3low to mediumprivate (a sender)R1M3 local (private)
Translate pages to PortuguesecallL1mediumpublicnone yetM2 open-weight
Re-read events hourly (researcher.2)agentL4mediumpublicR1 SonnetR2 laptop agent + M3 for the extraction
Screenshots and covers (capture.1)agentL2lowpublicR1 SonnetR2 laptop (a browser and a vault)
Usability runs (usability.1)agentL4mediumpublicR1 SonnetR2 laptop
Drafts for people to send (outreach.1)agentL4highinternalR1 SonnetR1, or R3 ChatGPT through a vault
Designs (design.1 to 4)agentL4highpublicR1 SonnetR1; community designers on any runtime (L1, a folder)
Code, build, CI (dev.1, dev.2)agentL5highinternalR1 SonnetR1
Policies, architecture, security reviewagentL5highinternalR1 OpusR1 (frontier)
Routing, briefs from Dinis (the lead)agentL5highinternalR1 OpusR1 (frontier)

The shape: keep the agents with high judgement on Claude (R1), and move the high-volume, low-judgement LLM calls (extraction, classification, second opinions, translation, tip parsing) to open-weight models: OpenRouter now, the laptops' Ollama next. That frees quota without slowing down.

6. The task packet: work that any runtime can pick up

So that a task can be done anywhere, it travels as a packet (a small folder, or a zip in a vault):

task.json     id, role, rules (link to its ABP), context links, inputs, the expected output,
              where the output goes (a vault id, or a branch), deadline, the requirements of §2.4
inputs/       the files it needs (public only, or sealed to the runtime's key)
SIGNATURE     the lead's signature over task.json

The runtime that takes it signs a claim, does the work, and writes the output, signed by its own key, to the named vault (or pushes a branch). The lead (or an agent with the grant) checks the signature and brings the result in. /tasks/ on the site would list the open packets, with their requirements, so that a laptop, a ChatGPT agent or a contributor's agent can pick up the ones it can do.

7. Next steps (work/48)

  1. Dinis and Angelo correct this draft (the runtimes, the levels, the rule in §3).
  2. architect.1: put the matrix into data/runtimes.json and a page under "The agentic team", and add runtime and io_level to each agent's ABP.
  3. dev.2: add an Ollama tier to the router for an agent running on the same laptop (R2), which pulls its work as task packets; no laptop exposes its Ollama to a cloud agent or to the internet. Move one task to it (the tips lane's parsing, which is private).
  4. researcher.2 and ontologist.1: move extraction and classification calls to the router's open-weight tier; log them on /models/.
  5. The lead: the task-packet format (task.json) and a first packet (translate today's event pages) for any runtime to pick up.

8. Changes in v0.2 (architect.1.fringe@PrompTugal.dinis, 14:23 UTC)

  1. The laptop bridge runs the other way. v0.1 had a laptop expose its Ollama to one of our cloud agents. A cloud container cannot reach a laptop without opening the laptop to the network. So the laptop's own agent (R2) pulls task packets (§6) and calls its local Ollama (M3), and nothing is exposed. M3 is reached only from R2. (§2.1, §2.2, §7.3)
  2. Two constraints were missing from the formula. time(t) was listed as a need but never checked: added latency(r,m) ≤ time(t). And the ABP: our hooks run only on R1 and R2, so added oversight (§2.4) and oversight(r) ≥ oversight(t). A task that writes our repository or speaks for us needs a runtime we can observe, or output that is reviewed where it lands (the gate, a vault check).
  3. R3 (ChatGPT) is not observed by our hooks. It can be an agent under §3 (key plus vaults), but its work is checked when it lands, not while it runs. (§2.1)
  4. The data is in data/runtimes.json: runtimes, endpoints, levels, requirements, the formula, the matrix, and each agent's runtime and I/O level today (every agent is on R1). Each agent's ABP page names them (abp/<agent>.md).

Not changed, for Dinis and Angelo: the rule in §3 (key plus git or vaults); whether L3 (signed lanes) alone makes an agent (our lanes are vaults underneath, so it already counts as L2); the matrix's "could run on" column, which is a proposal until a task actually moves.

Every agent, where it runs today

AgentRoleRuntimeModelsI/O levelMode
conductor.fringe@PrompTugal.dinisleadR1M1 OpusL5S2
architect.1.fringe@PrompTugal.dinisarchitectR1M1 OpusL5S2
fable.fringe@PrompTugal.dinisadvisorR1M1 FableL4 (a branch; the lead brings it onto dev)S2
observability.fringe@PrompTugal.dinisobservabilityR1M1 OpusL4S2
design.1.fringe@PrompTugal.dinisdesignR1M1 SonnetL4S2
design.2.fringe@PrompTugal.dinisdesignR1M1 SonnetL4S2
design.3.fringe@PrompTugal.dinisdesignR1M1 SonnetL4S2
design.4.fringe@PrompTugal.dinisdesignR1M1 SonnetL4S2
dev.1.fringe@PrompTugal.dinisdevR1M1 Sonnet; M2 through admin/tools/llm.mjsL5S2
dev.2.fringe@PrompTugal.dinisdevR1M1 Sonnet; M2 through admin/tools/llm.mjsL5S2
researcher.2.fringe@PrompTugal.dinisresearcherR1M1 Sonnet; M2 for the second opinionL4S2
capture.1.fringe@PrompTugal.diniscaptureR1M1 SonnetL4S2
outreach.1.fringe@PrompTugal.dinisoutreachR1M1 SonnetL4S2
usability.1.fringe@PrompTugal.dinisusabilityR1M1 SonnetL4S2
researcher.fringe@PrompTugal.dinisresearcherR1M1 Sonnet; M2 for the second opinionL4 (a branch; the lead brings it onto dev)S2
security.fringe@PrompTugal.dinissecurityR1M1L4 (a branch; the lead brings it onto dev)S2
dev.fringe@PrompTugal.dinisdevR1M1 Sonnet; M2 through admin/tools/llm.mjsL4 (a branch; the lead brings it onto dev)S2
dev.lead.fringe@PrompTugal.dinisdevR1M1 Sonnet; M2 through admin/tools/llm.mjsL5S2
conductor.C.fringe@PrompTugal.dinisconductorR1M1 (its person's account)L4S2
conductor.B@ios.PrompTugal.dinisconductorR1M1 (its person's account)L4S2
conductor.fringe@PrompTugal.vickyconductorR1M1 (its person's account)L4S2
conductor.fringe@PrompTugal.indiconductorR1M1 (its person's account)L4S2
conductor.fringe@PrompTugal.angeloconductorR1M1 (its person's account)L4S2
designer.fringe@PrompTugal.angelodesignR1M1 SonnetL4S2
graph.fringe@PrompTugal.angelodevR1M1 Sonnet; M2 through admin/tools/llm.mjsL5S2
tracer.fringe@PrompTugal.angeloobservabilityR1M1 OpusL4S2
conductor.fringe@PrompTugal.joseconductorR1M1 (its person's account)L4S2
conductor.fringe@PrompTugal.silvioconductorR1M1 (its person's account)L4S2
conductor.fringe@PrompTugal.danielaconductorR1M1 (its person's account)L4S2
researcher.1.fringe@PrompTugal.joseresearcherR1M1 Sonnet; M2 for the second opinionL4S2
ontologist.1.fringe@PrompTugal.dinisontologistR1M1 SonnetL4S2
conductor@web-summit.dinisreviewerR1M1L4S2

The data: /api/v1/runtimes.json (from data/runtimes.json). The document: docs/where-agents-run.md. Who may edit what: the Agent Behaviour Policies.