With a CodeAlta Server, you look after all your machines from CodeAlta Desktop: update them at once, see what they spend, cap it with budgets, hear of their problems, give them secrets and the events of other tools, and send their telemetry where you watch it.
The machines update first, two at a time, each when no session is working, then the server updates itself. The card follows the campaign: each machine with its state, and Cancel until the server's turn comes. A machine that is offline updates when it connects again. The Fleet canvas shows the version of each machine.
Your computer signs what the machines install, with the hash of the package of each system: a machine installs only an update that a computer of the owner signed, never an older version unless you named it, and only the package that matches that hash. The server alone cannot make your machines install anything.
Policy… sets how the fleet updates:
| Policy | Effect |
|---|---|
| Manual | Machines update only when you click Update the fleet… |
| Pinned | The fleet stays on one version: an update to another version is refused until you change the policy |
| Automatic | The server reads the feed every day and updates the fleet to its latest stable version at the time of day you choose; each machine checks the package against the hash the feed publishes |
Each machine linked to your server counts the statistics of its sessions, a node as CodeAlta Desktop does, and sends them to the server: tokens, active time, runs, tool calls and estimated costs, by provider, model and quarter hour.
My fleet shows the totals, then the numbers By machine (with when each machine last sent its statistics, so a machine that stopped sending shows), By project and By model. The days are those of your computer's time zone.
A node starts counting with the day it first runs.
A budget limits the tokens or the estimated cost (in US dollars) your machines spend per day, week or month.
| How it holds | Effect |
|---|---|
| Enforced: each machine gets a share | Each machine holds a share of the budget and spends it without asking, also offline. A run starts only when its machine holds enough; a machine that runs out asks for more, and the server never gives more than the limit |
| Advisory: it warns | The budget counts what the machines report; machines working at once or offline can pass it before you hear of it |
| At its limit | Effect |
|---|---|
| Hold new runs for me | A new run in its scope waits; Continue anyway starts it, Stop drops it |
| Stop new runs | A new run in its scope does not start |
Each budget shows a bar of what its scope used in its period, red once it is reached. Edit and the trash button change or remove it, beside its row. You hear of a budget once at 80% and once at 100% of each period: a message you dismiss, or close, is gone from all your computers.
A run that waits comes as a message wherever you are in CodeAlta, with Continue anyway and Stop, and in Runs that wait for a budget at the top of the page. A session you start on a machine whose budget holds new runs starts, and its prompt waits on the machine: the message says so, with Continue anyway. Your computer signs each Continue anyway for that one run: the machine checks it, so the server alone cannot start a run past your budget. A budget you edit while a run waits decides again: when it still holds the run, a Continue anyway given for the budget as it was does not start it: start the run again. Estimated costs come from the prices of the model catalog, as in the Statistics tab.
Your nodes tell the server how they are: little disk space left, a provider whose sign-in failed or ends within three days without renewing itself, an automation whose last runs failed, their policy refusing runs. The server also sees a node offline for more than six hours and one that runs an older version than the server. A problem that lasts more than ten minutes comes to you once, as a message with Dismiss, and stays listed under Notifications in Settings > Fleet > Budgets until you dismiss it or it ends. Dismissing it, or closing its message, dismisses it on all your computers. One that comes back later comes again.
Settings > Fleet > Secrets and environments sets the secrets and variables of your machines from the computer that made the server: for all your work, a space, a project or an environment, for the machines you choose, rotated from there. Environments such as production run only on the machines they name and can wait for your approval before a run starts. See Secrets of your machines with a server.
incident.io and other tools that push signed webhooks send their events to a hook of your server, for one of your machines.
alta fleet hook list lists your hooks with their addresses; --events <hook> says what the machine did with the latest events.Your server and your nodes can send their traces, metrics and logs to an OpenTelemetry collector (Grafana, Datadog, Azure Monitor, the Aspire Dashboard...), so that you follow their activity and their errors without connecting to them.
https://otlp.example:4318), its protocol, and the signals to send: Traces, Metrics, Logs.production). Click Save.The server applies the setting at once and sends it to every machine; each machine checks that your computer signed it before it applies it, so the server alone cannot send your machines' telemetry elsewhere. A header you saved shows masked: leave it empty to keep it.
Nothing sent holds your prompts, answers, tool calls or session titles. Logs are the records of CodeAlta itself: they may hold file paths and error messages, so they are sent only when you choose them.
The owner of a machine decides last, with the telemetry.json file of the machine: ~/.alta/fleet/telemetry.json for a node, ~/.altaserver/telemetry.json for the server.
telemetry.json |
Effect |
|---|---|
{ "enabled": false } |
Sends nothing, whatever the fleet says |
{ "fleet": false } |
Ignores the fleet's setting |
{ "endpoint": "http://localhost:4318", "signals": ["traces", "metrics", "logs"] } |
Sends to this collector instead |
The standard OTEL_EXPORTER_OTLP_ENDPOINT and other OTEL_* variables of the service also work, and win over the fleet's setting; OTEL_SDK_DISABLED=true turns telemetry off.