openvisio-agent 0.20.0 → 0.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,786 @@
1
+ # Changelog
2
+
3
+ ## [0.21.1] — 2026-09-10
4
+
5
+ - Recover identifier-owned assignments even when the agent is missing from `list_agents` or the roster request fails. Keep numeric-assignee compatibility, fresh ticket verification, and reassignment guards.
6
+ - Center Studio and its transparent sidebar together, with the OpenVisio logo, locally bundled Satoshi, and OA-style cards with white frames and recessed gray panels.
7
+ - Show recorded task activity across agents and add Plan, Commands, and Response views with bounded content and responsive layouts.
8
+ - Add a Documentation card in the sidebar and a mobile header link to the local guide.
9
+
10
+ ## [0.21.0] — 2026-09-09
11
+
12
+ - Add per-agent Studio settings for reply and coding models, with runtime model choices, private atomic saves, stale-edit protection, and live application to the next request.
13
+ - Start Studio automatically alongside backend watchers and support app/chat buttons that open a selected agent's model settings.
14
+ - Surface OpenCode main-request rate limits promptly, release the blocked session, and include a Studio settings CTA in the blocker.
15
+ - Distinguish rate-limited cycles from successful completions in Studio and document local-machine controls and upgrade requirements.
16
+
17
+ - Route explicit ticket-creation requests through the authenticated coordination bridge and recognize creation failures without replaying the mutation.
18
+ - Skip confirmed duplicate mentions before network lookups; bound optional thread context to one second while retaining authoritative final-delivery checks.
19
+ - Include message identities in duplicate logs and report intake and delivery timing separately from queue and model time.
20
+
21
+ ## [0.20.0] — 2026-09-08
22
+
23
+ - Add `openvisio-agent studio`: a local live viewer of watcher processes, cycles, explicit plans, tool calls, and coding progress, with a separate demo mode.
24
+ - Mark unfinished cycles and runtimes from stopped or replaced watchers offline; retain stable keyboard focus during updates and reveal linked cycles through existing filters.
25
+ - Ship a plain-language user guide and local, printable Studio help with keyboard instructions, status explanations, setup, and troubleshooting.
26
+ - Record bounded, credential-redacted activity locally without blocking agent execution; closing the viewer leaves agents running.
27
+ - Include the executable scenario catalogue in the npm package so its advertised command works after installation.
28
+ - Add an executable catalogue of over 1,000 BYO workspace scenarios, including production watcher integration sequences and machine-readable results.
29
+ - Unify assignment identity precedence, recover owned-thread context, keep distinct messages distinct, and persist threaded replies through delivery outages without rerunning models.
30
+ - Correct cancellation, timeout, session cleanup, tool evidence, memory isolation, transport retry and parsing, PR authorization, and task-column edge cases found by the scenario suite.
31
+ - Align the runtime specification, prompts, and README on model preservation, setup PR authority, retries, and recovery behavior.
32
+ - Fix issues reproduced in live validation: prefer the server's `create_task_comment` capability, keep Codex commentary out of final replies, and remove agent-directory credentials before ACP model delivery.
33
+ - Subscribe to the verified organization for live channel events, restore the subscription after reconnect, and share guarded mention routing without self-replies or duplicate fanout responses.
34
+
35
+ ## [0.19.12] — 2026-09-08
36
+
37
+ - Register agent-authored completion threads as owned conversations, and recover older roots from verified backend thread authorship before filtering follow-ups.
38
+ - Route explicit build/test repair requests using the completion thread's PR context, preserve original-thread delivery, and retain redirect, cancellation, and replay guards.
39
+
40
+ ## [0.19.11] — 2026-09-08
41
+
42
+ - Enable routine PR branch publishing in coding setup, shared by future clones and linked worktrees. Keep an opt-out and repository revocation.
43
+ - Check authorization-blocked tickets every two seconds, clear stale failure gates when authorized, and recover legacy helper denials once.
44
+ - Route new threads to the agent’s dedicated channel, preserve source-thread replies, and stop older answers from suppressing fresh follow-ups.
45
+ - Remove unreachable pre-Mastra Codex/OpenCode runners, lazily load the watcher for CLI commands, retain bounded warm sessions, and use asynchronous Git snapshots.
46
+ - Reconcile three projects concurrently and start ticket work before optional activity reads. Keep per-thread ordering with bounded parallel replies.
47
+ - Require completed ACP tool evidence; route helper failures as structured blockers. Allow scoped coordination mutations without enabling local tools, and never retry those mutations after ambiguous failures.
48
+ - Deduplicate unchanged memory observations and separate per-thread write waits. Log queue, preflight, first-event, and runtime latency.
49
+
50
+ ## [0.19.10] — 2026-09-08
51
+
52
+ - Route ticket implementation requests and assignment notifications through live assignment lookup into independent coding workers before the restricted chat runtime runs.
53
+ - Pick up actionable assignments discovered during pending-ticket questions, unless the requester explicitly asks for status only. Preserve ownership checks, queue deduplication, and review/testing handoffs.
54
+ - Keep automatic backlog pickup working when the activity feed is unavailable, and resolve agent identity when a ticket lookup arrives before startup reconciliation.
55
+ - Explicit `--chat-only` installations still require a coding workspace; no remote runtime dispatch API is available in this watcher.
56
+
57
+ ## [0.19.9] — 2026-09-08
58
+
59
+ - Fix reproduced missing-credential MCP failures by isolating the Codex stdio bridge from inherited HTTP server configuration.
60
+ - Preserve exact model selections, persist same-model shorthand resolution, honor the Codex chat model, and disable automatic generation/family/effort substitution.
61
+ - Log redacted ACP error details and distinguish completed turns with tool failures from clean success.
62
+ - Other findings from the integration audit remain outstanding.
63
+
64
+ ## [0.19.8] — 2026-09-08
65
+
66
+ - Publish the accumulated local 0.19.5–0.19.7 changes: pending-ticket reads, warm ACP sessions, and the Codex chat MCP allowlist.
67
+ - Known limitations: the integration audit identified unresolved reply suppression, permission classification, work-evidence, identity lookup, and latency issues. This version does not resolve those findings.
68
+
69
+ ## [0.19.7] — 2026-09-07
70
+
71
+ - Fix Codex ACP's opaque MCP permission requests by enforcing a strict read-only tool allowlist in the private chat bridge, safely approving those requests, and retrying idempotent chat reads once.
72
+
73
+ ## [0.19.6] — 2026-09-07
74
+
75
+ - Permit named OpenVisio team-state reads in chat-only ACP sessions while continuing to reject mutations, local filesystem access, and execution, fixing live project lookups reported as cancelled.
76
+
77
+ ## [0.19.5] — 2026-09-07
78
+
79
+ - Answer pending-ticket questions with fast watcher-owned MCP reads, avoiding model-side project discovery and `list_agents` cancellation failures.
80
+ - Keep Mastra ACP sessions warm per ticket or conversation thread, cache model negotiation, send the static charter once per session, and bound idle reply sessions with LRU eviction.
81
+
82
+ ## [0.19.4] — 2026-09-07
83
+
84
+ - Stop promoting read-only reply discovery failures such as `list_agents` into generic intervention blockers; the watcher supplies its known identifier and reserves fail-closed blocker delivery for failed mutations.
85
+
86
+ ## [0.19.3] — 2026-09-07
87
+
88
+ - Recover untagged human follow-ups in persistently owned threads during backlog reconciliation, including messages suppressed by the former pre-routing duplicate acknowledgement.
89
+
90
+ ## [0.19.2] — 2026-09-07
91
+
92
+ - Preserve recipient ownership after an agent is explicitly tagged in a thread, so later human follow-ups are handled without repeated @mentions; explicit redirects, stand-downs, and other-agent chatter still fail closed.
93
+
94
+ ## [0.19.1] — 2026-09-07
95
+
96
+ - Negotiate Codex and OpenCode selections against each ACP session's advertised models, resolving shorthand family names to the closest available effort-qualified or provider-qualified model before work starts.
97
+ - Normalize versioned Claude model names to stable family aliases and configure Claude's native ordered fallback models for unavailable or overloaded selections.
98
+
99
+ ## [0.19.0] — 2026-09-07
100
+
101
+ - Run Codex and OpenCode workers as isolated Mastra ACP sessions while preserving their existing local authentication, OpenVisio MCP access, worktree scoping, cancellation, and evidence gates.
102
+ - Persist ticket and conversation context with Mastra Memory and local libSQL; retain the compact JSON graph only as an exact delivery/deduplication ledger.
103
+ - Stop broadcasting working, thinking, and typing presence updates from autonomy workers, eliminating notification noise during long runs.
104
+ - Run up to three independent ticket workers concurrently while serializing tasks that share a mutable worktree; keep reply delivery serialized and cancellation scoped to the matching worker.
105
+ - Include a bounded, credential-redacted failure reason beside each failed Codex MCP call so transport, authorization, throttling, and backend errors are distinguishable.
106
+
107
+ ## [0.18.15] — 2026-09-07
108
+
109
+ - Launch Codex ticket cycles and their recovery attempt with the prepared ticket worktree as the actual process directory, rather than relying only on a prompt hint.
110
+
111
+ ## [0.18.14] — 2026-09-07
112
+
113
+ - Pause an evidence-gate failure at its resulting ticket revision so the watcher's own blocker update and backlog reconciliation cannot create an infinite retry loop; resume once after a genuine ticket change.
114
+ - Direct assigned coding work to an existing ticket-specific local worktree and keep completion-delivery retries from rerunning repository work.
115
+
116
+ ## [0.18.13] — 2026-09-07
117
+
118
+ - Route feature tickets containing words such as “message”, “status”, or “label” to the coding lane unless they begin with an explicit coordination command.
119
+ - Supply exact internal project/ticket argument shapes to assigned-task tool calls and log remote MCP failures with credentials removed.
120
+
121
+ ## [0.18.12] — 2026-09-07
122
+
123
+ - Route Codex through a local authenticated MCP bridge that removes credential fields from model-visible schemas and injects them into backend calls outside the model.
124
+
125
+ ## [0.18.11] — 2026-09-07
126
+
127
+ - Teach Codex agents to discover deferred OpenVisio MCP actions with native tool search before claiming the server or a ticket lookup is unavailable.
128
+
129
+ ## [0.18.10] — 2026-09-07
130
+
131
+ - Make the injected OpenVisio MCP server required for Codex cycles and allow 30 seconds for startup, preventing a failed tool connection from becoming a successful prose-only reply.
132
+ - Keep live assignment and ticket lookups available in watcher-delivered replies so agents resolve task slugs themselves.
133
+
134
+ ## [0.18.9] — 2026-09-07
135
+
136
+ - Fail closed on unaddressed human activity fanned out from previously mentioned threads, while recognizing exact full-name mentions and punctuation correctly.
137
+ - Make agents resolve assigned work through the live OpenVisio MCP board before asking teammates for a project or ticket slug.
138
+ - Keep OpenCode fast reply cycles MCP-only with explicit denials for local grep, file, shell, web, and delegation tools, preventing oversized ripgrep JSON records from disrupting chat replies.
139
+
140
+ ## [0.18.8] — 2026-09-05
141
+
142
+ - Replace assignment coalescing with independent FIFO cycles, stable-key duplicate suppression, shared backlog/event verification, and authoritative checks before queued work starts.
143
+ - Give reply runners a chat-only workspace configuration; add explicit OpenCode reply permissions and keep thread cancellation effective during recovery.
144
+ - Bound MCP requests and activity calls, discover paginated tool lists, and avoid resetting healthy sessions after late expiry responses.
145
+ - Retain unresolved tool failures across recovery; reject unknown completion states and Codex MCP error results as evidence.
146
+ - Await model process termination before releasing cancelled lanes, and terminate POSIX tool process groups during cancellation/shutdown.
147
+ - Save credentials, replay state, and memory atomically with private permissions. Remove ticket-text authorization shortcuts and unsafe branch-reset/blanket-staging instructions.
148
+ - Preserve complete mention instructions and carry explicit source-thread identity into blocker delivery.
149
+
150
+ ## [0.18.7] — 2026-09-04
151
+
152
+ - Claude, Codex, and OpenCode coding cycles now require completed runtime-observed repository actions; assistant prose and a successful process exit can no longer close work by themselves.
153
+ - A progress or intent message no longer ends a coding cycle. The watcher preserves the original request and thread context through one focused continuation, permits a distinct final result after progress, and requires that final result before conversation-originated code work is accepted.
154
+ - Recovery delivery keeps only the latest verified answer, so an earlier promise is never concatenated into the final watcher-owned reply.
155
+
156
+ ## [0.18.6] — 2026-09-02
157
+
158
+ - BYO coding prompts now treat an existing local repository as the primary code surface and reserve linked-codebase read/write/branch/commit tools for cases where a repository cannot be obtained locally.
159
+
160
+ ## [0.18.5] — 2026-09-01
161
+
162
+ - BYO system prompts now reserve numeric project/task ids for MCP arguments and require the backend's project-scoped ticket slug in every human-facing message, comment, PR description, summary, blocker, and result.
163
+ - Watcher-owned completion reports use canonical uppercase slugs such as `OVS-57`. Older backends that omit a slug fall back to the ticket title instead of exposing or inventing a numeric reference.
164
+ - Verified assignment prompts carry both identities explicitly: the slug for communication and the numeric ids for tool calls, preventing models from copying database ids into conversation.
165
+
166
+ ## [0.18.4] — 2026-09-01
167
+
168
+ - Conversation events are now treated as wake-up hints, not ownership. The watcher validates the actual source message and ignores redirects, explicit other-agent recipients, and unaddressed agent-authored chatter before starting a model.
169
+ - A direct stand-down cancels queued or running work for that source thread across Codex, Claude Code, and OpenCode, suppresses stale final delivery, and receives at most one terse confirmation.
170
+ - Coding intent now requires both an action and a concrete repository target, so product discussion containing words such as “feature”, “API”, or “file” cannot accidentally start a full coding cycle.
171
+ - Generic “picked this up” messages were removed. Activity state shows accepted work; the first durable message is a verified result or concrete blocker.
172
+ - Watcher-owned Codex prompts now have one consistent delivery contract: `post_message` is disabled and the watcher performs the authoritative, cancellation-aware thread post.
173
+ - The companion bare-agent frontend path is thread-scoped, fail-closed on ambiguous follow-ups, and revalidates a live conversation before allowing `post_message`.
174
+
175
+ ## [0.18.3] — 2026-09-01
176
+
177
+ - BYO watchers now discover and cache the backend MCP `tools/list` response instead of assuming every deployment exposes the same optional tools.
178
+ - A missing `comment_ticket` tool no longer strands verified completions in an endless reconnect retry loop. Completions continue through the verified ticket state and deduplicated project-channel report; blockers fall back to an `update_ticket` description note.
179
+ - Backend prompts no longer advertise absent ticket-comment tools or mistake MCP resource discovery for team actions.
180
+
181
+ ## [0.18.2] — 2026-08-31
182
+
183
+ - Backend MCP initialization now supports both Streamable HTTP modes. A successful initialize without `Mcp-Session-Id` is treated as stateless instead of fatal; stateful session expiry still gets one bounded reinitialize and retry.
184
+ - Concurrent startup probes share one initialize promise, and stateless tool 4xx responses no longer cause initialize loops.
185
+ - OpenCode's generated API-key MCP configuration now explicitly disables OAuth discovery and uses a bounded connection timeout, matching the current official remote-MCP configuration.
186
+ - Every OpenCode work and reply lane now gets a private per-agent config directory. The code repository is passed separately with `--dir`, and a higher-precedence runtime config prevents stale shared-workspace credentials from replacing the active agent identity.
187
+ - Backend introductions are watcher-owned for Claude, Codex, and OpenCode. First connection no longer spends a model cycle that can hallucinate relay-only inbox tools.
188
+ - Backend prompts explicitly forbid `get_marching_orders`, `poll_inbox`, and `get_resource`, while failed OpenCode tool events retain a bounded, credential-redacted diagnostic in watcher logs.
189
+
190
+ ## [0.18.1] — 2026-08-31
191
+
192
+ - Codex message delivery is now watcher-owned. Guarded cycles cannot call `post_message`; the watcher fetches the real backend thread, recognizes this agent across REST and WebSocket sender shapes, and skips an exact or already-answered reply before rendering.
193
+ - Reconnected activity mentions now pass through the same per-message path as live WebSocket mentions instead of one batched model reply. Stable delivery keys and independent queued replies persist across restarts.
194
+ - BYO agents now maintain a bounded local memory graph keyed by real project, ticket, channel, thread, and message ids. Verified task states, blockers, and deliveries are recalled only for related work so agents do not redo or re-say completed actions.
195
+ - Codex now prefers OpenVisio's authenticated linked-codebase branch, commit, and pull-request MCP tools, avoiding local `git push`. Repositories without that tool path have a one-time scoped fallback: `authorize-pr-push` installs a narrow Codex rule; `push-pr-branch` accepts no arguments and can only push `HEAD` to the matching authorized `agent/*` branch; `revoke-pr-push` removes access.
196
+ - A missing PR-push authorization produces one visible blocker and pauses the ticket. Reconciliation detects the local authorization later and resumes the same ticket without requiring approval text to be copied into the ticket.
197
+
198
+ ## [0.18.0] — 2026-08-31
199
+
200
+ - Codex cycles now recover from an expired command-session id by starting a fresh command instead of polling the dead process again. Exact non-fatal Codex model-catalog and stale-process diagnostics no longer appear as agent activity, while genuine tool and cycle failures remain visible.
201
+ - OpenCode BYO cycles now use the CLI's JSON event stream and must show completed repository and ticket actions before the watcher accepts a coding task as successful. Exit code zero and model prose alone are not completion evidence.
202
+ - An OpenCode acknowledgement without work triggers one focused recovery cycle. If evidence is still incomplete, the watcher reports the blocker, releases the de-duplication key, and keeps the ticket eligible for later task events and reconciliation retries.
203
+ - Ticket comments are first-class backend MCP actions again. The watcher adds one persisted, evidence-verified completion comment for every assigned coding handoff, while blockers continue to comment on the ticket immediately.
204
+ - Single-watcher locking now uses atomic file creation and fails closed. WebSocket mentions and reconciliation activity also share a short-lived content signature, preventing one logical message from creating two reply cycles.
205
+
206
+ ## [0.17.6] — 2026-08-30
207
+
208
+ - Agent-authored messages now use a first-person voice throughout. Completions say “I finished”, blockers say “I'm blocked”, and introductions rely on the sender identity already displayed by the app instead of restating the agent's name.
209
+ - The shared reply discipline explicitly forbids third-person self-reference in acknowledgements, progress, blockers, results, and routine conversation.
210
+
211
+ ## [0.17.5] — 2026-08-30
212
+
213
+ - Successful assigned coding work now produces exactly one runtime-owned project-channel result after the watcher verifies both a review/done ticket handoff and a real GitHub PR URL.
214
+ - Completion delivery mentions the ticket creator when available, survives reconnects through a persisted pending queue, and persists a revision key so duplicate task events cannot repost it.
215
+ - Ticket comments no longer count as channel completion, and the coding model is told not to race the watcher with its own backlog announcement.
216
+
217
+ ## [0.17.4] — 2026-08-30
218
+
219
+ - Tickets in review, testing, QA, verification, or approval columns are now settled handoffs for the coding watcher. Reconnect reconciliation clears stale policy pauses and does not spend another model cycle on a PR that is waiting for human review.
220
+ - Moving a ticket back to an actionable column still produces a fresh `task:updated` work cycle.
221
+
222
+ ## [0.17.3] — 2026-08-30
223
+
224
+ - Blocker ticket fallbacks no longer quote the channel's approval CTA, preventing the agent's own ticket update from being mistaken for human authorization and immediately releasing the pause.
225
+
226
+ ## [0.17.2] — 2026-08-30
227
+
228
+ - Blocker delivery now carries explicit project, ticket, and channel metadata instead of trying to recover ticket identity from model prompt prose. Backlog blockers therefore alert the project channel and update/comment on the correct ticket.
229
+ - Every BYO runtime blocker now has a visible delivery path: policy refusal, timeout, spawn/runner error, failed MCP action, and failed evidence recovery.
230
+ - Push-authorization CTAs include the rejected commit, remote alias, branch, and exact approval wording when available.
231
+
232
+ ## [0.17.1] — 2026-08-30
233
+
234
+ - Codex safety-policy rejections are now classified as blocked outcomes instead of successful cycles. The watcher stops recovery/retry churn, persists the paused ticket, and publishes an action-required notice with the rejected command.
235
+ - Policy-blocked tickets resume only after their ticket carries explicit authorization for the repository push, or after they are completed or unassigned.
236
+ - Assigned and reconciled coding tasks now resolve a project activity channel and emit `thinking` followed by a heartbeat-backed `working` state even when no channel mention started the task.
237
+ - Work and reply lanes now own independent activity targets, preventing reply typing from overwriting or clearing a concurrent coding status. Working heartbeats are reduced to one every 20 seconds, while stale thinking and typing indicators expire quickly in the app.
238
+
239
+ All notable changes to `openvisio-agent`. This project adheres to
240
+ [Semantic Versioning](https://semver.org/).
241
+
242
+ ## [0.17.0] — 2026-08-30
243
+
244
+ ### Changed
245
+
246
+ - Rebuilt the Codex BYO runtime around the documented agent WebSocket contract and a normative state machine in `docs/CODEX_BYO_AGENT_SPEC.md`.
247
+ - `task:assigned` is now the primary pickup signal. Assignment events must pass a fresh `get_ticket` ownership/open-state verification before a cycle starts; `task:updated` remains a compatibility signal.
248
+ - Startup recovery processes one authoritative open ticket per work cycle rather than handing a model an undifferentiated batch.
249
+ - Codex completion and blocker claims are evidence-gated. An incomplete recovery emits `WORK_CYCLE_FAILED`, leaves the ticket retryable, and cannot be treated as done based on model prose.
250
+
251
+ ### Fixed
252
+
253
+ - Agent activity now calls authenticated `POST /channels/:id/agent-state` and backs off on HTTP failures. The invalid `agent_status` WebSocket frame has been removed.
254
+ - Codex MCP `post_message` calls now drive the documented typing state.
255
+ - The frontend now consumes `channel:agent:thinking`, `channel:agent:working`, and `channel:agent:typing`, matching the backend protocol.
256
+
257
+ ### Added
258
+
259
+ - `npm run certify` is a mandatory pre-release gate covering shipped syntax, behavior tests, frontend typecheck, package contents, diff hygiene, task verification, lane isolation, activity protocol, and completion evidence enforcement.
260
+
261
+ ## [0.16.2] — 2026-08-29
262
+
263
+ ### Fixed
264
+
265
+ - Completed, closed, resolved, cancelled, and archived tickets are excluded across status fields, timestamps, and decorated board-column names.
266
+ - Processed WebSocket mentions and recovered activity IDs persist across restarts, preventing old mentions from generating fresh unsolicited replies.
267
+ - Backlog-only work updates its ticket with evidence but cannot announce progress or completion in an unrelated channel. Channel results require an explicit source thread.
268
+
269
+ ## [0.16.1] — 2026-08-29
270
+
271
+ ### Fixed
272
+
273
+ - Multi-mention messages are filtered before starting a model. An agent mentioned in an earlier thank-you now stays silent when a later `@agent` receives the actual request, while explicitly shared requests still reach both agents.
274
+
275
+ ## [0.16.0] — 2026-08-29
276
+
277
+ ### Added
278
+
279
+ - A single watcher now runs two independent Sol lanes: one serialized repository-work lane and one reply lane. Mentions can be answered immediately while an assigned coding task continues, without starting a second WebSocket watcher or duplicating event delivery.
280
+ - Coding mentions receive one immediate threaded acknowledgement from the reply lane and are queued for execution on the work lane, preventing concurrent edits to the same workspace.
281
+
282
+ ## [0.15.2] — 2026-08-29
283
+
284
+ ### Fixed
285
+
286
+ - Preserve WebSocket error-envelope details instead of logging every backend rejection as `{}`.
287
+ - Detect backend stages that reject `agent_status` and disable the live-status heartbeat after the first rejection, preventing repeated errors and unnecessary battery/network use during long Codex cycles.
288
+
289
+ ## [0.15.1] — 2026-08-29
290
+
291
+ ### Changed
292
+
293
+ - Codex now uses `gpt-5.6-sol` for every watcher cycle, including messaging, mentions, coordination, MCP work, backlog recovery, and coding. The Codex lightweight lane is disabled.
294
+
295
+ ## [0.15.0] — 2026-08-29
296
+
297
+ ### Fixed
298
+
299
+ - Codex coordination now defaults to `gpt-5.6-terra`; Luna is no longer used by default for MCP-dependent watcher cycles. Sol remains the coding model.
300
+ - Codex JSONL output now records the exact OpenVisio MCP tools invoked and reports failed calls without exposing credentials.
301
+ - Assigned-ticket cycles must prove both MCP task interaction (`get_ticket`/`list_tasks` and `update_ticket`) and a repository mutation before they count as complete. Read-only shell inspection no longer satisfies the completion gate.
302
+ - Incomplete Codex cycles receive one focused Sol recovery turn naming the missing MCP or repository actions instead of silently accepting a promise.
303
+
304
+ ## [0.14.0] — 2026-08-29
305
+
306
+ ### Fixed
307
+
308
+ - Backend/BYO reconciliation now uses the MCP tools that actually exist: `list_agents`, `list_projects`, `list_tasks`, `list_task_types`, and `list_activity`. The backend does not expose `get_marching_orders`, `poll_inbox`, or `comment_ticket`.
309
+ - Assigned non-completed tickets are filtered by the BYO agent's numeric id or identifier and handed directly to the heavy coding lane with task/project metadata.
310
+ - Recent activity mentioning the agent is recovered on start/reconnect and routed to the reply lane without calling nonexistent inbox tools.
311
+ - Removed the backend model-driven startup/daily coordination sweep that could find coding tickets and then publicly say it was unable to code. Zero-model reconciliation replaces it.
312
+ - Backend prompts no longer require nonexistent ticket-comment tools; agents update/move tickets with `update_ticket` and report results in the channel.
313
+
314
+ ## [0.13.1] — 2026-08-29
315
+
316
+ ### Fixed
317
+
318
+ - Codex completion recovery now catches silent exits and plain-text promises too, not only acknowledgements posted through an MCP message tool. A coding cycle with no repository action retries unless it verified that no task was assigned or reported a concrete blocker.
319
+
320
+ ## [0.13.0] — 2026-08-29
321
+
322
+ ### Fixed
323
+
324
+ - BYO watchers now recognize task assignments across `agent_id`, camelCase, nested `agent.id`, `assigned_agent`, and wrapped event payload variants.
325
+ - Every process start and WebSocket connection establishes a proper MCP session and reconciles both `poll_inbox` and `get_marching_orders`, recovering mentions, follow-ups, and tasks missed while offline.
326
+ - A zero-model five-minute backlog check discovers pending work without spending model tokens. Unchanged tasks retry after 30 minutes until completed instead of being forgotten after an acknowledgement.
327
+ - Assigned work moves directly into a coding cycle with explicit instructions to start, verify, open a PR, update the ticket, and report evidence rather than promise future work.
328
+
329
+ ## [0.12.0] — 2026-08-29
330
+
331
+ ### Added
332
+
333
+ - `openvisio-agent stop --name <agent>` unloads launchd/systemd first, terminates every remaining watcher matching that exact agent name, and clears the stale lock.
334
+
335
+ ### Fixed
336
+
337
+ - Background installation now removes orphaned manual watchers before loading the replacement service, preventing KeepAlive from repeatedly spawning new conflicting processes.
338
+ - Duplicate-watcher errors point to the new one-command cleanup instead of telling users to chase a PID.
339
+
340
+ ## [0.11.1] — 2026-08-29
341
+
342
+ ### Fixed
343
+
344
+ - Codex coding cycles no longer ask for a pre-work acknowledgement. The first update must contain verified work or a concrete blocker.
345
+ - Assigned tasks default to the coding lane unless they are explicitly board or messaging operations, preventing vaguely titled implementation tasks from being stranded in coordination.
346
+ - The watcher inspects Codex JSONL activity and runs one focused recovery cycle when Codex posts an acknowledgement but performs no repository action.
347
+
348
+ ## [0.11.0] — 2026-08-28
349
+
350
+ ### Changed
351
+
352
+ - Route messaging, triage, introductions, catch-up checks, and board movement to a lightweight coordination lane. Claude defaults to Haiku and Codex defaults to `gpt-5.6-luna` there.
353
+ - Reserve Sonnet for Claude coding cycles and `gpt-5.6-sol` for Codex coding cycles. Assigned tasks and mentions with clear repository-work signals route to the coding lane.
354
+ - Improve recall and workspace discipline: consult available history before asking users to repeat context, reuse existing clones, read repository `AGENTS.md`, preserve unrelated work, and close every direct concern with a verified result or explicit blocker.
355
+ - Prefer plain punctuation and avoid em dashes in agent replies.
356
+
357
+ ## [0.10.1] — 2026-08-28
358
+
359
+ ### Fixed
360
+
361
+ - Codex cycles no longer pass mutually exclusive `--sandbox` and
362
+ `--approve-for-me` flags. Chat-only cycles stay read-only; coding cycles use
363
+ Codex's reviewed workspace-write approval mode.
364
+ - Duplicate-watcher errors explain why launchd/systemd replaces killed PIDs and
365
+ print the exact service-stop and log-tail commands.
366
+ - Background installs no longer record an ephemeral `_npx` cache executable;
367
+ they install and use a stable global `openvisio-agent` binary.
368
+
369
+ ## [0.10.0] — 2026-08-28
370
+
371
+ ### Added
372
+
373
+ - Codex is now a first-class autonomy runtime via `--agent codex`, using official
374
+ non-interactive `codex exec`, an isolated OpenVisio MCP configuration, and safe
375
+ read-only/workspace-write sandbox modes.
376
+
377
+ ### Changed — battery and token efficiency
378
+
379
+ - Claude exits immediately after its one event cycle instead of remaining resident
380
+ until another event arrives. This releases the CLI process, file watchers, memory,
381
+ and idle CPU between tasks.
382
+ - Idle frontend watchers back off from one request every 6 seconds to one per minute
383
+ (with 5-second polling only during recent activity), cutting idle wakeups by ~90%.
384
+ - A frontend service restart no longer spends a model turn on an unconditional
385
+ catch-up sweep. The sweep runs only when the first inbox response contains an
386
+ outstanding task; the daily safety sweep remains.
387
+ - Backend startup catch-up sweeps are capped to once per six hours per agent, so
388
+ launchd/systemd restart loops cannot repeatedly spend a full model cycle.
389
+
390
+ ## [0.9.0] — 2026-08-28
391
+
392
+ ### Changed — big token-cost reduction
393
+
394
+ - **No more context accumulation across cycles.** The warm Claude session used to
395
+ keep up to 15 independent cycles (`MAX_TURNS=15`), so each new cycle re-billed the
396
+ ENTIRE history of the previous ones (every file read, git output, prior reply) —
397
+ cost grew quadratically. Autonomy cycles are self-contained, so the session now
398
+ recycles after EACH cycle (`MAX_TURNS=1`): a cycle only pays for its own work.
399
+ - **Charter + creds moved to a cached system prompt.** The large static charter
400
+ (toolbox, work ethic, reply discipline) and the AUTH note used to be re-sent inside
401
+ every cycle's user message — never cached. They now ride in the session system
402
+ prompt (`--append-system-prompt`), which Claude prompt-caches, so they're billed
403
+ once and read cheaply on subsequent cycles. Per-cycle messages are now just the
404
+ small event context + instruction. opencode (no system-prompt flag) folds them into
405
+ the message but still never accumulates.
406
+
407
+ Net effect: a routine mention→reply cycle costs a small fraction of what it did before.
408
+
409
+ ## [0.8.1] — 2026-08-27
410
+
411
+ ### Fixed — opencode agents couldn't call the team tools
412
+
413
+ - The prompts hard-coded Claude Code's tool namespace (`mcp__openvisio-team__post_message`),
414
+ but opencode exposes MCP tools as `openvisio-team_post_message` — so an opencode agent
415
+ fumbled every tool call. Prompt tool references are now runtime-agnostic (bare names +
416
+ a note that the runtime may prefix them; call whatever appears in the tool list).
417
+ Verified end-to-end: opencode loads the openvisio-team MCP and executes its tools
418
+ headlessly via `opencode run … --auto`.
419
+ - REMINDER: an agent only runs on opencode if it was connected with `--agent opencode`
420
+ (the "Runs on" dropdown in the connect modal, or the flag on the CLI). Without it the
421
+ agent runs on Claude Code — check `~/.openvisio/<name>.json` has `"agent": "opencode"`.
422
+
423
+ ## [0.8.0] — 2026-08-27
424
+
425
+ ### Added — live agent status (thinking / working / typing)
426
+
427
+ - The watcher now broadcasts what it's doing so humans can see an agent pick up and
428
+ act on their message in real time. It sends `{type:'agent_status', channel_id,
429
+ state}` over the WS as it works: **thinking** the instant a mention arrives →
430
+ **working** while the cycle runs (heartbeat every ~9s) → **typing** the moment it
431
+ calls `post_message` → **done** to clear. See `docs/AGENT_STATUS.md` for the wire
432
+ contract the backend fans out as `agent:status`, and the frontend's in-channel
433
+ status line + floating "acting elsewhere" notices.
434
+
435
+ ## [0.7.1] — 2026-08-27
436
+
437
+ ### Fixed — the REAL cause of duplicate/contradicting messages
438
+
439
+ - **Single-instance lock.** The duplicates were structural, not a prompt problem:
440
+ TWO watchers were running for the same agent (a manual `watch` alongside the
441
+ background launchd/systemd service), each connected to the WS as that agent, so
442
+ BOTH replied to every mention — and being different versions, the two replies
443
+ contradicted. `watch` now takes a pid lock (`~/.openvisio/watch-<slug>.lock`) and
444
+ a second watcher for the same agent refuses to start (stale locks from a dead pid
445
+ are taken over). One agent → one watcher → one reply. NOTE: kill any extra running
446
+ watcher and update the global install; a lock only prevents NEW double-starts.
447
+ - **No invented history (anti-hallucination).** The shared reply-discipline now
448
+ states the agent has NO memory beyond the visible thread + tool results, and must
449
+ never fabricate past events, competitions, results, links, PR numbers or deploy
450
+ URLs — if it has no record of something, say so instead of playing along.
451
+
452
+ ## [0.7.0] — 2026-08-27
453
+
454
+ ### Added — opencode runtime
455
+
456
+ - **Run agents on opencode, not just Claude Code.** New `--agent claude|opencode`
457
+ flag on `connect`/`watch` (persisted). The cycle runner is now abstracted: Claude
458
+ Code keeps its persistent stream-json warm session; **opencode** runs a headless
459
+ `opencode run <prompt> --auto [--model provider/model]` per cycle. Both honour the
460
+ same event loop, workspace/code flow, intro/sweep, reply-discipline and `/model`
461
+ control.
462
+ - **opencode MCP wiring.** Instead of `claude mcp add`, an opencode agent gets an
463
+ `opencode.json` written into its run cwd declaring the `openvisio-team` server as a
464
+ `{ type: "remote", url, headers }` MCP (Bearer for host agents, x-agent-api-key +
465
+ x-agent-identifier for backend agents). `connect --agent opencode` best-effort
466
+ installs the `opencode` CLI and reminds you to `opencode auth login`; the launchd/
467
+ systemd service PATH now includes opencode's bin dir.
468
+ - **Models are provider/model on opencode.** The default model is left unset (opencode
469
+ uses its own configured default) and the in-chat `/model` command accepts
470
+ `provider/model` ids (e.g. `anthropic/claude-sonnet-4`, `openai/gpt-4o`).
471
+ - Frontend: the "Connect your agent" modal has a **Runs on: Claude Code | opencode**
472
+ dropdown that adds `--agent opencode` to the generated setup command.
473
+
474
+ ## [0.6.2] — 2026-08-27
475
+
476
+ ### Fixed
477
+
478
+ - **Double / contradicting replies to one mention (real root cause).** The fast-cycle
479
+ prompt told the agent to reply to the injected mention AND *then* `poll_inbox` and
480
+ handle follow-ups — so in a single cycle it answered the mention, polled, re-found
481
+ the very same thread, and answered again with a different take (0.5.1's mention
482
+ de-dupe didn't cover this because it's ONE event → two posts). The fast prompt is
483
+ now strictly either/or: **if a specific mention is given, reply once and STOP — no
484
+ `poll_inbox`**; only cycles with no injected mention poll for follow-ups. The
485
+ mention prompt also says compose-then-post-once (no "post a reply then a better
486
+ version"). Mention de-dupe additionally falls back to a channel+text signature when
487
+ the payload has no message id.
488
+
489
+ ## [0.6.1] — 2026-08-27
490
+
491
+ ### Added
492
+
493
+ - **Target a specific model tier from chat.** `/model chat <m>` changes only the
494
+ chat/reply model; `/model code <m>` only the code-work model; `/model <m>` still
495
+ sets both. Natural language works too ("switch chat model to haiku"). `/model`
496
+ reports both tiers. Same as the CLI `--model` / `--chat-model`.
497
+
498
+ ## [0.6.0] — 2026-08-27
499
+
500
+ ### Added — model control (stop burning tokens)
501
+
502
+ - **Configurable model, default `sonnet`.** The agent now spawns Claude Code with an
503
+ explicit `--model` (default **sonnet** — cost-effective) instead of inheriting
504
+ whatever `claude` defaults to (often Opus). Set it with `--model <opus|sonnet|haiku|claude-…>`
505
+ at `connect`/`watch`; persisted to the agent config.
506
+ - **Cheaper chat, capable code (optional).** `--chat-model <m>` runs the lighter
507
+ chat/mention cycles on an even cheaper model while real code work (full/sweep
508
+ cycles) stays on `--model` — e.g. `--model sonnet --chat-model haiku`. The warm
509
+ session is respawned with the right `--model` when a cycle needs a different one.
510
+ - **Change the model live from chat.** An engineer can `@mention` the agent with
511
+ `/model` (reports the current model), `/model sonnet` / `/model opus` /
512
+ `/model claude-…`, or "switch model to haiku" — the watcher switches under the
513
+ hood, persists it, recycles the session, and the agent confirms in-thread. The
514
+ parser is strict (a valid model name after `/model` or the word "model") so
515
+ ordinary messages like "use the model file" don't trigger it.
516
+
517
+ ## [0.5.1] — 2026-08-27
518
+
519
+ ### Fixed (reply-discipline edge cases seen in the wild)
520
+
521
+ - **Double replies.** `agent:mention` events are now de-duped by message id, so a
522
+ re-delivered mention (reconnect replay / duplicate fan-out) no longer triggers a
523
+ second reply to the same message.
524
+ - **Repeated acknowledgements.** The 0.5.0 "acknowledge first" turned into agents
525
+ posting "On it…" several times for one task. Acknowledgement is now ONCE-only:
526
+ the agent checks the thread/ticket and skips it if it already acknowledged, and
527
+ only posts again when it has something genuinely new (a result/link/blocker).
528
+ - **Answering things meant for another agent.** A new shared REPLY DISCIPLINE block
529
+ (on every chat + code cycle) makes the agent act ONLY on messages addressed to it
530
+ (its @mention, a direct question, or a reply to its own message) and STAY OUT of
531
+ thread chatter or tasks aimed at someone else — fixes an agent jumping on work
532
+ another agent was called for. `.followUps` handling is now gated the same way.
533
+ - **Claiming then walking it back.** The discipline block adds "be sure before you
534
+ speak": verify (call the tool / read the code / check state) BEFORE asserting
535
+ something is possible/done/broken — one clear final answer instead of thinking
536
+ out loud across contradicting messages.
537
+ - **New agent slow to catch mentions.** The startup catch-up sweep now runs at ~12s
538
+ (was 30s) so a freshly-added agent whose WS subscription isn't live yet still
539
+ picks up pending mentions/tasks via the REST `poll_inbox` sweep right away.
540
+
541
+ ## [0.5.0] — 2026-08-26
542
+
543
+ ### Fixed
544
+
545
+ - **Task assignments are finally caught.** The watcher listened for a `task:assigned`
546
+ event that the backend NEVER sends — a task assigned to an agent actually arrives
547
+ as `task:created` (assigned on create) or `task:updated` (assignee changed), fanned
548
+ out org-wide (docs/WEBSOCKET.md). It now handles both, keeps only agent-assigned
549
+ tasks, filters to THIS agent when the payload carries the agent identifier (else the
550
+ cycle confirms via `get_marching_orders`), and de-dupes by task-id:agent so a noisy
551
+ stream of `task:updated` doesn't re-acknowledge the same assignment.
552
+
553
+ ### Added
554
+
555
+ - **Acknowledge before starting.** On an assigned task the agent posts a one-line
556
+ `comment_ticket` ("On it — picking this up now") BEFORE it begins, then does the work
557
+ and reports — so the team sees it's been picked up (workspace etiquette). Baked into
558
+ the task event prompt and `CODE_FULL`.
559
+ - **Introduction on join.** The first time an agent ever connects to a workspace it
560
+ posts one short, friendly intro to the general channel (who it is, that it picks up
561
+ assigned tasks + answers @mentions). One-time, tracked by a marker in `~/.openvisio`.
562
+ - **Daily catch-up sweep.** A sweep runs shortly after startup (covers time offline)
563
+ and once every 24h: it calls `get_marching_orders` + `poll_inbox` and picks up any
564
+ task assigned or mention received while the agent was disconnected — TASKS first.
565
+ Added to BOTH the backend-WS loop and the REST warm loop (whose startup poll
566
+ otherwise marks pre-existing tasks "seen" and would skip offline assignments).
567
+
568
+ ## [0.4.0] — 2026-08-26
569
+
570
+ ### Changed
571
+
572
+ - **Code mode is the zero-config DEFAULT — no `--workdir` per repo.** An agent lives
573
+ on your laptop and should just work across the whole org's code. It now operates
574
+ from a single WORKSPACE root (default `~/openvisio-workspace`, created on demand),
575
+ finds the repo a task refers to, and **clones it if you don't have it yet** — then
576
+ branches/tests/pushes/opens a PR inside it. Point it at an existing clones folder
577
+ with `--workspace <dir>` (`--workdir` is an alias), or disable code work with
578
+ `--chat-only`. The choice is saved to the agent config so the always-on listener
579
+ reuses it. (Previously code work required passing `--workdir` every time, and a
580
+ bare agent was chat-only — the source of "it said it couldn't check a codebase".)
581
+ - **Agents know their job now.** Every cycle prompt opens with a CHARTER that
582
+ spells out the toolbox and a hard rule: *before you ever say "I can't", check
583
+ the tools you actually hold.* Fixes the "asked if it could check a codebase, it
584
+ said no — then yes once reminded there are tools" failure. Code agents are told
585
+ in plain words they CAN inspect a codebase, clone a repo, branch, and raise a PR.
586
+ - **Work ethic / closing the loop.** The charter mandates finishing the work *in
587
+ this cycle* and reporting back as the final action — `comment_ticket` with the
588
+ branch + PR link + test result, plus a channel reply that `@mentions` the
589
+ requester by exact full name. No more "I'll do X" and stopping; the human should
590
+ never have to remind the agent to circle back.
591
+ - **Real PR workflow for code agents.** `CODE_FULL` now runs the whole flow:
592
+ clone the named repo locally if absent → `git checkout -B agent/<slug>` → edit →
593
+ test → commit → **push the agent's own branch** → **`gh pr create`** → comment
594
+ the ticket + reply tagging the requester. Pushing a branch and opening PRs are
595
+ now allowed; `main`/`master`, force-pushes, merges, `gh repo delete`, and the
596
+ previously-blocked destructive/publish commands stay denied.
597
+ - **Longer code cycles.** A code cycle's watchdog budget is raised from 4 → 15 min
598
+ so a genuine clone → test → push → PR flow finishes instead of being killed
599
+ mid-job (an aborted cycle is itself a "never circled back" failure). Chat-only
600
+ cycles keep the 4-min budget.
601
+ - **Clear mode banner.** The watcher logs whether it's in CODE mode (printing the
602
+ workspace it clones/branches/PRs from) or CHAT-ONLY mode (`--chat-only`), so an
603
+ agent's capability is never a mystery.
604
+ - The backend `AUTH` note is scoped to *not hunting for credentials* only, so it
605
+ no longer reads as "don't use Bash/grep" to a code agent that needs them.
606
+
607
+ ## [0.3.7] — 2026-08-26
608
+
609
+ ### Changed
610
+
611
+ - **No more polling.** Removed the inbox sweep added in 0.3.5 — the WebSocket
612
+ (`task:assigned` / `agent:mention`) is the only trigger now. (It was also
613
+ posting a spurious threaded "follow-up" on the agent's own message.)
614
+ - **Replies stay in the thread.** On a mention the watcher passes the thread root
615
+ as `parent_id` so the agent replies *inside* that thread instead of starting a
616
+ new top-level message.
617
+ - **Accurate @mentions.** OpenVisio links a mention only when it's the member's
618
+ EXACT full name (`@First Last`). The mention prompt now hands the agent the
619
+ sender's exact display name and tells it to use `@<full name>` so the reply
620
+ actually notifies/links the user (previously `@First` alone rendered as plain
621
+ text).
622
+ - Unrecognized `error` WS frames now log the backend's detail instead of a bare
623
+ "event error".
624
+
625
+ ### Note
626
+
627
+ - A thread reply that does NOT @mention the agent fires no WS event, so it isn't
628
+ answered — that requires the backend to dispatch a thread-activity event to
629
+ participant agents (we won't poll for it).
630
+
631
+ ## [0.3.6] — 2026-08-26
632
+
633
+ ### Fixed
634
+
635
+ - **The real credential fix.** A debug trace revealed the openvisio-team MCP bridge
636
+ authenticates **per tool call**, not per connection: every call needs
637
+ `agent_identifier` + `agent_api_key` as arguments (`post_message` 400s with
638
+ "Missing agent credentials" otherwise). 0.3.5's "tools are already authenticated,
639
+ never provide credentials" was exactly wrong. The watcher now **injects the
640
+ agent's identifier + api_key into every cycle prompt** and instructs the model to
641
+ pass both on every openvisio-team call — so it posts on the first try with no
642
+ shelling around to "find credentials".
643
+ - **Removed the typing pulse.** The backend rejects `{type:'typing'}` from an agent
644
+ connection (it answered every pulse with an `event error`), so it's gone. The
645
+ `sendTyping` capability remains in the WS client for if/when the backend supports
646
+ agent typing.
647
+
648
+ ## [0.3.5] — 2026-08-26
649
+
650
+ ### Changed
651
+
652
+ - **Replies are now near-immediate.** Debug traces showed the agent burning ~40s
653
+ shelling around (`Bash`/`grep` over `~/.claude`) to "find credentials" before
654
+ posting — even though the openvisio-team MCP tools are authenticated by the
655
+ connection. Every prompt now carries a hard rule: the tools are ALREADY
656
+ authenticated; NEVER look for API keys/tokens/config or run shell to find
657
+ credentials or tools — call the tools directly, act with the fewest calls, and
658
+ post the reply FIRST.
659
+ - **Typing indicator.** On an `agent:mention`, the watcher immediately pulses
660
+ `channel:typing` for that channel over its WS (every 3s until the cycle
661
+ finishes), so the agent shows as typing right away instead of going silent.
662
+
663
+ ### Added
664
+
665
+ - **Follows up threads without a mention.** A bounded inbox sweep (every 60s, only
666
+ within 5 min of real activity, skipped while busy) polls for `.followUps` — so
667
+ thread replies the agent is part of get answered even when no `@mention` fires.
668
+ Idle agents spend nothing.
669
+
670
+ ## [0.3.4] — 2026-08-26
671
+
672
+ ### Changed
673
+
674
+ - **Events now feed their own context into the cycle** instead of relying on
675
+ `poll_inbox` to re-surface them. The `agent:mention` WS payload already carries
676
+ `{ channel_id, message }`, so the cycle prompt now tells the agent exactly which
677
+ channel + message to reply to ("You were @mentioned in channel N: '…' — reply
678
+ there with post_message"). `task:assigned` similarly injects the task title +
679
+ description. This fixes the case where a mention was received over the WS but
680
+ `poll_inbox` returned it empty, so the cycle completed successfully **without
681
+ replying**. Coalesced events accumulate their context into the next cycle.
682
+
683
+ ## [0.3.3] — 2026-08-26
684
+
685
+ ### Fixed
686
+
687
+ - **A hung cycle no longer silently swallows every later event.** Cycles now have
688
+ a 4-minute backstop timeout: if one never returns a result (e.g. an MCP tool
689
+ stalling on an unreachable bridge), the session is killed, `busy` is released,
690
+ and queued mentions proceed. Before, one stuck cycle left the watcher accepting
691
+ `agent:mention` events but never acting on them.
692
+
693
+ ### Added
694
+
695
+ - **`watch --debug`** logs what each cycle actually does — session init + which
696
+ MCP servers loaded, every `→ tool` call, tool errors (`✗`), and assistant text —
697
+ so a silent/non-replying cycle is diagnosable in one run.
698
+ - The WS loop now logs `running <fast|full> cycle…` and `busy — queued …` so it's
699
+ clear whether an event triggered a cycle or was coalesced.
700
+
701
+ ## [0.3.2] — 2026-08-25
702
+
703
+ ### Changed
704
+
705
+ - **`connect --backend --ws …` now makes the agent always-on by default.** Setup
706
+ installs `openvisio-agent` globally and registers the background listener
707
+ (launchd on macOS, systemd `--user` on Linux) that auto-starts on login and
708
+ survives reboot — so tagging the agent in a channel is caught with no terminal
709
+ open. Previously `connect` left nothing installed (an `npx` run vanished) and the
710
+ WebSocket listener only ran if you manually kept `watch` open. Opt out with
711
+ `--no-service`; pass `--workdir <repo>` to let the always-on listener code on a
712
+ branch. `installService` is now exported for this.
713
+
714
+ ## [0.3.1] — 2026-08-24
715
+
716
+ ### Fixed
717
+
718
+ - **MCP now registers at USER (global) scope.** `claude mcp add` defaults to
719
+ local (project) scope, so the `openvisio-team` tools were only present in the
720
+ directory `connect` ran in — and re-prompted elsewhere. Both `connect` and
721
+ `connect --backend` now pass `--scope user`, so the tools (with credentials
722
+ baked into the request headers) are available in every project without asking.
723
+ - **`connect` removes any stale `openvisio-team` MCP registration before adding.**
724
+ `claude mcp add` does not overwrite an existing same-named server, so a changed
725
+ `--mcp-url` was silently shadowed by the old entry ("I changed the URL but it's
726
+ stuck on the old one"). Both connect paths now `mcp remove` (user + local scopes)
727
+ first, then add global.
728
+
729
+ ## [0.3.0] — 2026-08-24
730
+
731
+ ### Added
732
+
733
+ - **Real-time backend autonomy over WebSocket.** A backend agent can now react to
734
+ `task:assigned` and `agent:mention` dispatches the instant the backend pushes
735
+ them, instead of polling.
736
+ - `connect --backend … --ws <wss-url> --mcp-url <url>` — `--ws` is the org's
737
+ API-Gateway WebSocket base (same value as the frontend's
738
+ `NEXT_PUBLIC_BACKEND_WS_URL`); `--mcp-url` registers the `openvisio-team` MCP so
739
+ the agent has tools to ACT on those events. Both are persisted (config +
740
+ `OPENVISIO_AGENT_WS_URL` in the env file).
741
+ - `watch --name <agent>` auto-detects a backend agent and runs the WS loop:
742
+ connects with `?api_key=&identifier=`, sends periodic keepalives, reconnects
743
+ with exponential backoff, and drives ONE Claude cycle per event (a burst of
744
+ mentions coalesces into a single follow-up cycle). `--install` / `--workdir`
745
+ work the same as the REST loop.
746
+ - Requires **Node ≥ 21** (built-in global `WebSocket`); on Node 20 run with
747
+ `--experimental-websocket`. Fails fast with a clear message otherwise.
748
+
749
+ ### Changed
750
+
751
+ - The Claude warm-session machinery is now shared by both the REST (`--host`) and
752
+ WebSocket (backend) loops — identical session recycling, guardrails, and prompts.
753
+
754
+ ## [0.2.0] — 2026-08-21
755
+
756
+ ### Added
757
+
758
+ - **Backend mode** — `connect --backend <url> --key <api-key> --id <identifier>`
759
+ registers an agent created against the OpenVisio org backend ("Connect your
760
+ agent"): verifies the credentials live (`x-agent-api-key` +
761
+ `x-agent-identifier` headers), then saves `~/.openvisio/<agent>.json` and a
762
+ sourceable `~/.openvisio/<agent>.env` (0600). No setup-token exchange — the
763
+ one-time api-key from the create screen IS the credential.
764
+
765
+ ## [0.1.0] — 2026-08-12
766
+
767
+ ### Added
768
+
769
+ - `connect <ovs_code> --host <url>` — redeems the single-use setup code for the
770
+ agent key, registers the `openvisio-team` MCP server with Claude Code (installing
771
+ Claude Code if missing), and saves a `600`-perm scoped config under `~/.openvisio/`.
772
+ Options: `--name "<agent>"`, `--mcp-url <url>`.
773
+ - `watch --name <agent>` — the event-driven "warm" autonomy loop: cheaply polls the
774
+ inbox (no model spend when idle) and pokes a single persistent Claude Code session
775
+ per new @mention / follow-up / ticket.
776
+ - `--install` — background service (launchd on macOS, systemd `--user` on Linux),
777
+ auto-starts at login.
778
+ - `--workdir <repo>` — opt-in coding mode: file + Bash tools scoped to that git
779
+ repo, branch-only, with a destructive-shell denylist (never pushes or merges).
780
+ - `--help` / `--version`.
781
+
782
+ ### Notes
783
+
784
+ - Zero runtime dependencies (Node ≥ 18, uses built-in `fetch`).
785
+ - Replaces the previous `curl … | bash` one-paste installer with a published,
786
+ inspectable package.