Skip to content

0.3.0 — Assistants

Choose a tag to compare

@rameerez rameerez released this 19 Sep 00:14
· 12 commits to main since this release
108eefd

A machine can answer, and a person still owns every word it sends.

An assistant is an agent with a policy: a seat, a name, a turn budget and a level (off · observe · draft · reply · resolve) that says what she may produce on a case. At the default level that is a proposal a human reads and sends. Nothing turns itself on — without config.assistant the gem behaves exactly as 0.2 did.

Highlights

  • The gem owns the guardrails, the host owns the model. No LLM dependency, no prompt, no retrieval, no job loop. A ≤30-line job subscribes to :assistant_turn, reads ticket.brief, calls any model, and hands the answer to ticket.respond!(text, by: rose, turn:). Policy decides what that becomes.
  • The turn. assistant_revision moves on every message and every transition; every assistant action requires and consumes assistant_turn, so a late, retried or redelivered job raises StaleTurn and writes nothing. No idempotency keys, claims or leases needed.
  • Human in the loop. SupportDesk::Draft — one pending proposal per case; Enviar / Editar / Descartar in the console; a sent draft is the human's message with the machine's provenance in metadata. A stale approval is refused, never sent.
  • Two exits, always. escalate! (assistant → humans) and request_human! (the customer's door, POST /tickets/:id/request_human). Humans outrank assistants under every reply_policy.
  • Disclosure is your explicit choice. disclosure is required with no default: :signature_and_notice, :signature, :notice or :none. Exports say from: "assistant" in every mode.
  • A silent assistant never hides a case. rake support_desk:release_silent_assistants releases her seat and asks for a person; redispatch_assistant_turns retries dropped turns; eight new doctor checks.
  • Context as data. ticket.transcript (four roles) and ticket.brief (versioned facts, may/may_not, internal notes opt-in); Requester#support_context.
  • DX. rails g support_desk:assistant Rose --disclosure MODE, SupportDesk::TestHelpers additions, a full README section and reference.

Behaviour changes regardless of configuration

A host acts_as_support_agent kind: :ai model is now refused for every support write; console picker values are actor keys; Queue::TABS gains :needs_human (hidden unless relevant); every registration/transition writes assistant_revision. See the CHANGELOG for the upgrade steps — additive and rolling-safe.

Gem SHA-256: 885d2d97899879c94df47a63ffec810d5c820a229e814d201667dd7e64f75c19

What's Changed

  • System test: wait for the 422 navigation before touching the form by @rameerez in #4
  • README: the whole public surface, as a reference by @rameerez in #5
  • Assistants: AI agents as a first-class use case (0.3.0) by @rameerez in #6

Full Changelog: v0.2.0...v0.3.0