0.3.0 — Assistants
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, readsticket.brief, calls any model, and hands the answer toticket.respond!(text, by: rose, turn:). Policy decides what that becomes. - The turn.
assistant_revisionmoves on every message and every transition; every assistant action requires and consumesassistant_turn, so a late, retried or redelivered job raisesStaleTurnand 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) andrequest_human!(the customer's door,POST /tickets/:id/request_human). Humans outrank assistants under everyreply_policy. - Disclosure is your explicit choice.
disclosureis required with no default::signature_and_notice,:signature,:noticeor:none. Exports sayfrom: "assistant"in every mode. - A silent assistant never hides a case.
rake support_desk:release_silent_assistantsreleases her seat and asks for a person;redispatch_assistant_turnsretries dropped turns; eight new doctor checks. - Context as data.
ticket.transcript(four roles) andticket.brief(versioned facts,may/may_not, internal notes opt-in);Requester#support_context. - DX.
rails g support_desk:assistant Rose --disclosure MODE,SupportDesk::TestHelpersadditions, 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