Skip to content

Releases: caliban-ai/ariel

v0.4.0

Choose a tag to compare

@johnford2002 johnford2002 released this 06 Oct 19:17
5c76a2e

Ariel says whose agent it is, and stops missing the quick ones.

A channel could see that an agent started but not whose it was: Ariel holds one
operate token for a whole Discord, so every spawn was attributed to ariel.
Agents now carry the person who asked for them, from the chat command through
prosperod to the live message. And the notifier no longer polls: it watches
prospero's fleet-wide stream, so an agent that starts and finishes between two
old five-second polls — previously invisible — is announced like any other.

This release needs prosperod v0.9 or later. The fleet stream is where every
notification now comes from, and a v0.8 daemon does not serve it.

Added

  • An agent started from chat says who started it (#59). Ariel holds one
    operate token for a whole Discord, so prosperod's actor read ariel for
    every spawn and a channel could not tell one person's agents from another's.
    Ariel now names the person on the requests a command makes, using prospero
    v0.9's X-Prospero-On-Behalf-Of header (prospero#251), and the live message
    gains a started by field. The person id that comes back on the event is
    resolved to their display name; an id with no person behind it is shown as it
    came, and an agent started outside Ariel renders exactly as before.

    Prosperod does not verify the header — it is Ariel's assertion, recorded
    beside the token that is authenticated. Requires prosperod v0.9 or later; an
    older daemon ignores the header and the field simply does not appear.

Changed

  • arield watches one fleet-wide event stream instead of polling the fleet
    and holding a connection open per agent (#55). It now reads prospero v0.9's
    GET /api/fleet/stream, whose SSE id: is a fleet cursor, and reconnects
    with ?from=<cursor> so a dropped connection neither skips an event nor
    repeats one.

    This fixes a gap rather than only a cost: an agent that started and
    finished between two five-second polls was never seen, so the channel heard
    nothing about it at all. The first connection asks for ?from=now, which is
    ADR 0011's rule stated to prosperod rather than approximated by skipping
    agents that are already terminal.

    One behaviour changes with it. A restart used to replay each running agent's
    history, so every running agent got a fresh live message immediately; now one
    appears on that agent's next event. For a working agent that is
    milliseconds, but an agent sitting idle — waiting on a permission prompt, say
    — stays invisible until it does something. Requires prosperod v0.9 or later.

  • The end-to-end smoke test runs against prosperod v0.9.0, up from v0.8.1,
    and now asserts that an agent spawned from chat reaches the channel naming
    the person who ran the command — the whole loop through a real prosperod and
    a real gonzalod. router_with_auth gained an automations argument in v0.9
    (prospero#220), which the test passes None.

  • The Rust toolchain is pinned to 1.99.0 in rust-toolchain.toml, and the
    builder image moves from rust:1.95-bookworm to rust:1.99-bookworm (#68).
    CI resolved its toolchain at run time, so a new stable release could break a
    build whose code had not changed — which is what happened to prospero when
    stable moved 1.97 → 1.99. ariel is more exposed than most, because
    crates/e2e builds prospero from a git tag and so compiles its source too.
    Upgrading is now a deliberate, reviewable commit.

Docs: the README and the guide were brought up to v0.3.0, which had drifted
behind the commands and configuration that shipped in it (#67).

v0.3.0

Choose a tag to compare

@johnford2002 johnford2002 released this 21 Sep 02:32
e802027

Ariel runs the fleet from chat, and takes care of itself while running.

/ariel kill and /ariel respawn finish the command set, so a stray agent is
dealt with where it was noticed. /ariel channel, /ariel configure and
/ariel invite move channel administration and onboarding into chat, which
previously meant a port-forward to gonzalod and a locally built CLI. A channel
record written while arield runs is now picked up without a restart — the
first thing the in-cluster install got wrong. And arield speaks TLS, so it
can reach a prosperod through an ingress rather than only across a namespace.

Added

  • arield can reach an https prosperod (#60 — [#65]). Its HTTP client was
    built without TLS, so an https URL failed before opening a connection —
    reaching the fleet from outside the cluster needed a port-forward. TLS goes
    through rustls, verifying against the platform's trust store, which the
    runtime image already populates. In-cluster plain HTTP is unchanged.
  • /ariel channel shows a channel's configuration, /ariel configure changes
    it, and /ariel invite mints a one-time link token (#58 — [#64]) — so adding a
    channel or onboarding someone no longer needs access to gonzalod. Both
    changing commands need admin and are audited. An invite's reply is always
    private, and on a platform that cannot answer privately it mints nothing;
    nobody can invite above the role they act with. The CLI and the chat command
    now share one parser, so they write the same record.
  • /ariel kill <agent> stops an agent and /ariel respawn <agent> restarts it
    from the prompt it was given, naming the restarted agent's new id
    (#57 — [#63]). Both
    need an operator in the agent's own workspace: the agent is looked up in the
    fleet first, and authorization is against the workspace it is in. A channel
    with no configuration is refused before the fleet is read, so it cannot be
    used to discover which agents exist.

Fixed

  • arield now picks up channel configuration changes while it runs
    (#56 — [#62]). A
    channel record written after startup was invisible until the process
    restarted — adding a chat channel meant restarting the daemon. It re-reads
    the records every ARIEL_CHANNEL_RELOAD_SECS (60 by default), starting,
    stopping and restarting notifiers as records appear, vanish or change. A
    failed read keeps the channels already served.

Container image

ghcr.io/caliban-ai/ariel:0.3.0

Built for linux/amd64 and linux/arm64. The crates are not published to crates.io.

v0.2.0

Choose a tag to compare

@johnford2002 johnford2002 released this 20 Sep 03:22
9cfe36b

Ariel answers for the fleet, not just about it.

/ariel status and /ariel spawn are the first commands that act on the fleet,
each authorized on the person's role and the channel's ceiling and audited in
gonzalo. arield also has a voice at last: it writes its log to stderr, so a
refused token or a throttled bot is visible instead of silently dropped. The
whole path — link, spawn, notify, status — now runs in CI against prosperod's
and gonzalod's own server code, and was confirmed by hand in a real Discord
guild against the home cluster.

Added

  • /ariel status summarizes the workspaces a channel follows, and
    /ariel spawn <workspace> <prompt> starts an agent (#20 — [#51]). Both are
    authorized on the person's role and the channel's ceiling; every spawn is
    audited, and prosperod errors reach the person as plain sentences
    (Chat Commands).
  • A headless end-to-end smoke test in its own CI job (#21 — [#52]): the bridge
    against
    prosperod's and gonzalod's own server code, with token authentication on and
    prospero's fake caliban for agents, covering linking, a spawn from chat, its
    notification to the finish, and fleet status.

Fixed

  • arield now writes its log to stderr, so it shows up in kubectl logs. Before
    this, every warning and error was silently dropped, including prosperod
    refusing Ariel's token and the chat platform rate-limiting it (#49 — [#50]).
    RUST_LOG sets the level and ARIEL_LOG_FORMAT=json switches to JSON lines.
  • arield checks its prosperod token at startup whenever ARIEL_PROSPERO_URL
    is set, even if gonzalod or the chat provider is not configured yet
    (#49 — [#50]).

Container image

ghcr.io/caliban-ai/ariel:0.2.0

Built for linux/amd64 and linux/arm64. The crates are not published to crates.io.

v0.1.0

Choose a tag to compare

@johnford2002 johnford2002 released this 18 Sep 15:21
b47f741

The first release: Ariel notifies chat about the fleet, and knows who is allowed
to ask it for anything.

arield watches prosperod's fleet, keeps one live message per agent in every
chat channel configured to follow that agent's workspace, and answers
/ariel link so a person's chat account can be tied to their fleet identity. The
ariel CLI configures channels and mints link tokens. Everything Ariel
remembers — people, bindings, role grants, channel configuration, link tokens and
the audit trail — lives in gonzalo; Ariel stores nothing of its own.

Not in this release: the fleet commands themselves (/ariel status,
/ariel spawn), which land next (#20).

Added

  • The chat provider boundary. ChatProvider, addressing types, a
    provider-neutral Message, capabilities with limits and a send budget, and an
    in-memory ConsoleProvider for tests, plus a shared contract suite every
    backend must pass (#11, #2 — #33, #28).
  • A Discord backend on twilight: /ariel commands, embeds coloured by
    severity, edits, private replies, and the three-second interaction deadline
    handled by auto-deferring (#14 — #36).
  • The prospero client: fleet polling, per-agent SSE fan-in with gap handling,
    and spawn, kill, respawn and input (#12 — #27).
  • Notifications: one live message per agent, edited in place; a burst of five
    or more agents shares a summary; sends are paced against the provider's own
    budget, and rate limits, lost access and deleted messages are handled (#13,
    #19 — #34, #40).
  • arield, the daemon: reads its configuration from the environment,
    connects to prosperod, gonzalod and Discord, notifies every channel that
    follows an event's workspace, serves /healthz, and shuts down cleanly. A
    restart replays nothing (#19, #30 — #41, #35).
  • Access-control records in gonzalo: typed reads and optimistic writes for
    people, identity bindings, role grants, channel configuration and link tokens,
    with an append-only audit trail (#15 — #38).
  • Account linking: ariel link new mints a one-time token and
    /ariel link <token> redeems it in chat. Only a hash of the token is stored,
    it works once, and every attempt is audited (#16 — #45).
  • Two-key command authorization: a command runs at the lower of the person's
    role and the channel's ceiling; an unlinked account gets nothing, and every
    mutating command is audited, allowed or denied (#17 — #44).
  • Channel configuration from the CLI: ariel channel show and
    ariel channel set, audited, with a concurrent edit reported as a conflict
    rather than overwritten (#18 — #42).
  • Authentication to prosperod: a bearer token from
    ARIEL_PROSPERO_TOKEN_FILE, sent on every request including the event stream,
    for prosperod v0.8's API authentication (#46 — #47).
  • A container image ghcr.io/caliban-ai/ariel for linux/amd64 and
    linux/arm64, a health endpoint, and file-based credentials (#30 — #35).
  • The ADR log (0001–0013) and an mdBook guide published to GitHub Pages
    (#9 — #24, #37).
  • CI: format, lint, build, test, a build with no chat backend, a guard that
    ariel-core pulls in no chat SDK, and an 85% line-coverage floor (#10 —
    #25).