Skip to content

A row has its own agent and model - #2045

Merged
suleimansh merged 2 commits into
mainfrom
row-model-agent
Oct 9, 2026
Merged

suleimansh merged 2 commits into
mainfrom
row-model-agent

Conversation

@suleimansh

Copy link
Copy Markdown
Member

Each row of the Automations page gets its own coding agent and its own model.

👤

  • Every row of a project ran on one model (mine is Opus) and always on Claude Code. In my last 150 runs /update-tickets, a simple copying job that may run every 15 minutes, cost $0.27 a run on Opus, and /work-queue, real coding, $1.33.
  • A row has its own model, picked like everything else on a row: the skill may name the one it is made for, and I may pick my own on my machine. A row with no pick uses the scheduler's model, as today.
  • A row has its own agent too: Claude Code or Codex.
  • Both are one more line each in the row's Edit panel, and the row's line shows them.

🤖 automated · Opus 5.5, effort high

What a person sees

  • The Edit panel has a new part, "What it runs on": an Agent menu and a Model menu. The row's line says them: "Claude Code, Haiku 5.5", or "Codex".
  • The Model menu lists the picked agent's own models. Its first choice is what follows when nobody picks: "As the skill says (Haiku 5.5)", "The scheduler's model (Opus 5.5)", or "Codex's own default".
  • Picking another agent starts its model from that first choice: a model belongs to one agent.
  • An agent that cannot run the row is greyed, and the panel says why.

What a skill may say

schedule:
  every: 15m
  agent: claude-code
  model: haiku
  • Both keys are optional. agent is claude-code or codex; model is the id that agent knows the model by.
  • A person's pick on their machine wins: agent-scheduler agent <command> <claude-code|codex|skill> and agent-scheduler model <command> <id|skill>. agent-scheduler model <id>, with one word, is still the scheduler's own model.
  • A model belongs to one agent. A skill's model is a model of the agent the skill names, of Claude Code when it names none. A person's model is kept with the agent it was picked for, and holds only while the row runs on that agent. So a row whose agent changes later, by a pick or because its skill reached the other folder, never sends one agent's model to the other.
  • agent-scheduler model <command> with the id forgotten is refused: a command's name, or skill, is not taken for the scheduler's own model.

What Codex needed

  • The part that starts a run already took an agent and a model; the scheduler now passes each row's own.
  • Codex reads a project's skills from .agents/skills, Claude Code from .claude/skills. A row runs on an agent only when its skill is in that agent's folder. A skill that is only in .agents/skills used to be listed and never started; it now runs on Codex. A row made with "only on this machine" is no skill, so either agent runs it.
  • "Its skill is where a run's checkout starts" is asked for the folder of the agent the run is on.
  • Whether the agent's command-line tool is installed and logged in is asked once per agent, per look.

My picks, to correct if wanted

  • Nothing can read how much of Codex's quota is left. A Codex row starts without that check, and the panel says so. A Claude row keeps the check, now with its own model, so a model's own weekly window counts for the rows that use it.
  • Codex prices no turn, so a Codex run records no cost. The panel says so too.
  • The key is agent, one letter from agents (how many at once). A slip is refused in words: "agents is a whole number from 1 to 99", "agent is one of claude-code, codex".

Known

  • With no quota check, a Codex row whose shell line keeps printing work, and whose runs fail at once (Codex out of quota), starts again on every look. A Claude row has the same gap for failures the quota check does not see. Nothing here holds a row back after a failed run.
  • A skill kept as two different files in the two folders is scheduled by the .claude/skills copy alone. Where one folder links to the other, as in this repository, there is one file.
  • A skill that names an agent whose folder does not hold it is listed and says "Cannot start on …" until the skill is put there or a person picks the other agent.
  • A row made with "New automation" is saved in .claude/skills alone, so it runs on Codex only once it is linked into .agents/skills by hand; Remove then leaves that link.

Checked

  • On a rig of my own (own port, own settings folder): a row whose skill names agent: codex ran on Codex and answered; a row whose skill names model: haiku ran on Claude Code on Haiku for $0.002; another model picked in the panel was saved; a row whose skill is not in .agents/skills refused Codex in words.
  • Codex does run a skill sent as /name from .agents/skills, also with the front matter our scheduled skills carry, and it hands the word after the command to the skill (/name word). Tried with codex-cli 0.144.4.
  • Full root CI alone, the scheduler's tests once more without my git settings, 17 deliberate breaks caught by the tests, and one fresh reviewer: nine findings; the real ones are fixed with a test each, the rest are under Known.

DECISIONS.md

In packages/agent-scheduler/DECISIONS.md. Two bullets said that a scheduled run is on Claude Code, and that a row whose skill is only in Codex's folder is never started. This pick replaces them:

The schedule is read from both folders a coding agent reads skills from, .claude/skills first. A coding agent runs a command only when the command's skill is in that agent's own folder, .claude/skills for Claude Code and .agents/skills for Codex: sent to the other agent, the command finds no skill. A command whose skill is only in one folder runs on that folder's agent unless its skill or a person names the other, and a row set to an agent that cannot read its skill is listed, not started, and says so. Picked over reading .claude/skills alone, where such a skill would have no row and nothing would say why.

A row has its own coding agent and its own model, picked like its pace: its skill may name the ones it is made for (agent, model), and each person may pick their own for their machine, in the state file. With no pick a run is on Claude Code, on the scheduler's model. A model is one agent's: a person's model is kept with the agent it was picked for and holds only while the row runs on that agent, and a skill's model is a model of the agent the skill names, of Claude Code when it names none. Picked over one model and one agent for every row of a project, where a simple copying job that may run every 15 minutes cost as much a turn as real coding.

The scheduler's own model is per user, in the state file, set with model <id>, opus when unset: what a run on Claude Code starts on where neither its row's skill nor its person names another. Picked over a line in the tracked schedule alone, so each person controls what their own machine spends their quota on.

One bullet is new, for my pick about Codex's quota:

Only Claude's quota can be read. A run on Codex starts without the quota question, and the page says so; its cost is not recorded either, since Codex prices no turn. Picked over holding Codex rows back until a reading exists: nothing would start them.

And two bullets name the change in passing: the tick's order ("then the quota, for a run on Claude Code") and the dashboard part's commands (agent, model).

Logic files not updated

By the person's choice the LOGIC.md files are not updated in this pull request (#2038). They are brought in line later, in one pass.

suleimansh and others added 2 commits October 10, 2026 01:36
A scheduled row runs on its own coding agent, Claude Code or Codex, and on
its own model. Its skill may name them (schedule keys agent and model), a
person may pick their own on their machine (agent-scheduler agent, model),
and with no pick a run is on Claude Code on the scheduler's model, as before.
An agent runs a row only when the row's skill is in that agent's own skills
folder. Only Claude's quota can be read, so a run on Codex starts without
that check. The Edit panel gets "What it runs on", and the row's line says it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@suleimansh
suleimansh enabled auto-merge (squash) October 9, 2026 22:36
@suleimansh
suleimansh merged commit 36406db into main Oct 9, 2026
6 checks passed
@suleimansh
suleimansh deleted the row-model-agent branch October 9, 2026 22:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant