@engineeros/connector 1.25.2 → 1.28.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/README.md CHANGED
@@ -1,384 +1,386 @@
1
- # EngineerOS Connector
2
-
3
- The connector uses an authenticated EngineerOS WebSocket for pairing, workspace identity, run lifecycle, and evidence. Coding work can run through any agent in the official ACP registry, a custom ACP v1-compatible command over stdio, or the Forge command line. Direct Codex CLI remains available as the compatibility path.
4
-
5
- ## Independent Goal runner
6
-
7
- Connector 1.2.0 hands Goal jobs to a separate local runner. Closing the connector terminal or losing its WebSocket does not stop an executing Goal. Progress and final results use HTTP; undelivered results remain on disk for retry. Windows supervisors and workers use a windowless launcher; Goal runs and agent commands do not open new terminals.
8
-
9
- Install from a permanent global installation or repository checkout, then run:
10
-
11
- ```text
12
- engineeros-connector runner install --workspace D:\Puli\work\workspaces\caresched
13
- engineeros-connector runner status --workspace D:\Puli\work\workspaces\caresched
14
- ```
15
-
16
- The first Goal dispatch also installs/starts the runner when using a permanent executable path. Temporary `npx` cache paths cannot host a persistent service: install the connector globally first. Update the backend for the HTTP claim endpoint before dispatching Goals.
17
-
18
- Windows uses Task Scheduler under your current user, restarts after failure, and resumes saved jobs at sign-in following reboot. Linux uses a systemd user service; enable user lingering separately if recovery must start before login. Existing running jobs stay with their current process; resume an interrupted run to hand it to the new service.
19
-
20
- Files under your project's `.engineeros` directory:
21
-
22
- - `runner/inbox/`: durable job dispatch requests.
23
- - `runner/service.json`: supervisor PID and heartbeat.
24
- - `runner/service.log`: supervisor startup and cleanup diagnostics.
25
- - `runs/<run-id>/job.json`: execution/delivery status, saved assignment, pending result or failure.
26
- - `runs/<run-id>/state.json`: coding session and implementation/verification checkpoints.
27
- - `runs/<run-id>/activity.log`: timestamped activity and periodic inactivity status.
28
- - `runs/<run-id>/worker.log`: worker console diagnostics.
29
-
30
- The runner stops and records a resumable failure after ten minutes without agent events, except when explicitly waiting for user input. Restore missing prerequisites or agent usage before using **Resume run**. Acceptance and integration remain controlled by EngineerOS.
31
-
32
- There is no wall-clock execution cutoff. Runs stop after at most two repair-and-review cycles following the initial review. The inactivity safeguard above still stops a silent agent; waiting for your answer does not consume a repair cycle. Successful results awaiting upload are not executed again.
33
-
34
- ### Delete a Goal and its sandboxes
35
-
36
- Choose **Delete Goal** in the Goal detail header and confirm. This deletes all revisions, runs, receipts, proof results, attachments and run questions for that Goal. Connected runners first stop every run in the revision family, then remove owned isolated Git worktrees (including uncommitted sandbox files), checkpoints, queued dispatches and logs. The source repository, its local changes, Git branches and unrelated worktrees are preserved. External registered worktrees require their matching saved checkpoints to establish ownership. Manually managed external environments remain the external runner's responsibility.
37
-
38
- Deletion remains visible as **Deleting** until every assigned connector acknowledges cleanup. The supervisor polls authenticated cleanup requests every 15 seconds, including while the connector terminal is closed. Offline machines and lost acknowledgements retry safely. Cleanup errors are displayed on the Goal with **Retry cleanup**; a live worker lock or ambiguous sandbox ownership prevents removal. Active backend verification must finish before deletion starts. Small markers in `runner/deleted-runs/` prevent delayed dispatches from restarting deleted work.
39
-
40
- After updating an existing installation, reinstall the runner task with `runner install` and restart the existing supervisor to load the new code. The Windows scheduled action must use `wscript.exe` and `runner/launch.vbs`. Logs remain in the project's `.engineeros` directory; no terminal is needed for a run.
41
-
42
- If the Windows runner task was disabled, `engineeros-connector runner start --workspace PATH` explicitly enables it and starts processing queued jobs. Incoming dispatches remain queued while the task is disabled and print this recovery command; they do not enable it automatically. Do not resend the Goal just to start its queued job.
43
-
44
-
45
- ## Connect an official ACP agent
46
-
47
- Connector 0.33.0 supports **Deliver capability**. EngineerOS immediately queues the capability as a Goal request;
48
- it does not generate or require approval of a separate implementation slice first. The coding agent reads the
49
- frozen local design, writes its implementation plan inside the run worktree, then implements, tests and repairs
50
- the work. Independent testing and review agents verify the delivered commit. Required user choices use the
51
- existing run questions and resume the same work. The final handover includes the committed plan, source changes,
52
- test evidence and review results. Integration still requires the user's review.
53
-
54
- Planning and verification read the assigned design from its local Git commit, so later design synchronization
55
- does not silently change a running delivery. The implementation plan is stored at
56
- `docs/delivery/<goal-id>/implementation-plan.md` and remains part of the delivered repository history.
57
-
58
- EngineerOS reads the curated [ACP agent registry](https://agentclientprotocol.com/registry), caches it for 24 hours, and uses the registry's pinned distribution for the current platform. The catalog includes Codex, Claude, Gemini, GitHub Copilot, Goose, OpenCode, Qwen Code, Cursor, and other compatible agents as they are published. List the current catalog, prepare the selected agent, then pair the workspace:
59
-
60
- ```sh
61
- npx --yes @engineeros/connector@latest agents
62
- npx --yes @engineeros/connector@latest agent gemini install
63
- npx --yes @engineeros/connector@latest pair PAIRING-CODE --url https://your-engineeros.example --workspace . --onboard --agent gemini
64
- ```
65
-
66
- Registry `npx` and `uvx` packages are prepared with their native package runner. Registry binaries are downloaded into `~/.engineeros/agents`, checked against the published SHA-256 digest when present, and launched from that managed location. The connector checks the selected distribution before pairing. Agent processes stay alive while the connector is active, project conversations reuse their ACP sessions, and response chunks reach Copilot as the agent produces them.
67
-
68
- ## Pair an ACP coding agent
69
-
70
- Run the command from the repository the agent should work in:
71
-
72
- ```powershell
73
- npx --yes @engineeros/connector@latest pair PAIRING-CODE --url http://localhost:8000 --workspace . --onboard --agent-name "My ACP agent" --agent-command my-agent --agent-args '["--acp"]'
74
- ```
75
-
76
- `--agent-command` must start an ACP v1 agent over NDJSON stdio. `--agent-args` is a JSON array so arguments are passed without invoking a shell. Omit `--agent` and the custom command options to use the installed Codex CLI directly.
77
-
78
- Connect a local Codex CLI workspace to EngineerOS through an outbound WebSocket.
79
-
80
- ## Pair Forge
81
-
82
- [Forge](https://forgecode.dev) is driven through its own command line rather than ACP. Install it, sign in to a provider, then pair the workspace:
83
-
84
- ```sh
85
- forge provider login
86
- npx --yes @engineeros/connector@latest pair PAIRING-CODE --url https://your-engineeros.example --workspace . --onboard --agent-protocol forge
87
- ```
88
-
89
- Forge runs its own agents, so `--agent` and `--agent-command` are rejected for this protocol. The connector selects the Forge agent that carries the access an assignment is entitled to: `sage` for read-only research, planning, assessment, and verification work, and `forge` for the writable implementation phase of a registered Goal. Pairing stops with the corrective command when Forge is missing, unauthenticated, or no longer provides both agents.
90
-
91
- Each EngineerOS session maps onto a Forge conversation, so project prompts and multi-stage assessments resume with their history intact. Token usage is reported per turn, measured as the growth of the conversation while the turn ran.
92
-
93
- Every model Forge offers through the providers you are signed in to is published to EngineerOS, named with its provider because the same model is offered by more than one, along with every reasoning effort Forge accepts. Forge takes the provider, model and reasoning effort of a run from the environment of its process, so the choice made in EngineerOS applies to that run alone: it does not change the model set with `forge config set model`, and it does not disturb a run beside it. The model and effort configured in Forge are marked as the default. Pairing stops when Forge offers no models, which means no provider is signed in: run `forge provider login`, then restart the connector.
94
-
95
- The connector registers the EngineerOS project artifact tools with Forge for the current user, which is the only scope Forge trusts without a person approving a file in the workspace, so nothing is written into the repository being worked on. Forge shares that one registration across every workspace and discovers the tools once, so the run each tool acts on is carried in the environment of the Forge process rather than in the registration. Concurrent runs stay separate, and a tool called outside an EngineerOS run is refused with the reason.
96
-
97
- ## Agent roles and skills
98
-
99
- The selected ACP, Forge, or Codex agent is the execution engine. EngineerOS chooses a provider-neutral role for each activity and the connector injects exactly one bundled skill:
100
-
101
- - `research` uses `project-research` to answer questions from observed project evidence.
102
- - `assessment` uses the internal `assessment-maintenance` skill to inspect source without changing it and edit only the assigned assessment Markdown document.
103
- - `planning` remains read-only and uses one server-selected skill: `product-discovery`, `experience-design`, `solution-design`, `requirements-and-acceptance`, or `delivery-planning`. Product discovery covers both intent discovery and capability shaping; delivery planning covers accepted greenfield slices and brownfield changes.
104
- - `implementation` uses `implementation` with workspace-write access only for a registered Goal.
105
- - `verification` uses `independent-verification` with read-only access for artifact review and independent Goal proof.
106
-
107
- This is intentionally a small executable catalog. Skills for hypothetical release, quality, or agent-workflow phases are not advertised until EngineerOS has a workflow that can invoke them. Harness-wide access, evidence, clarification, and output rules remain outside skill bodies, so an assignment pays only for the specialized judgment it needs. Direct Codex runs also disable ambient skill instructions; ACP providers receive the selected EngineerOS skill in the assignment prompt rather than the rest of the catalog.
108
-
109
- The connector rejects a role whose access does not match the assignment before starting the agent. Role-specific sessions preserve useful context without mixing planning, research, implementation, or verification responsibilities. A shared interaction contract makes the Agent infer the current project situation, lead with the useful outcome, and suggest one concrete next activity only when it genuinely helps. User-visible responses refer neutrally to the Agent; provider and harness details remain operational metadata.
110
-
111
- ## Onboard a workspace
112
-
113
- Create a connection command from **Project steering -> Connect workspace**, then run it inside the local folder:
114
-
115
- ```sh
116
- npx --yes @engineeros/connector@latest pair PAIRING-CODE --url https://your-engineeros.example --workspace . --onboard
117
- ```
118
-
119
- The connector uploads a bounded ZIP snapshot for a safe file inventory, then stays online for deep assessments, rescans, and Goal Runs. Inventory never executes repository code. It excludes known secrets, dependency directories, build output, compiled binaries, files larger than 5 MB, agent-tool caches, Git metadata, and connector state before upload.
120
-
121
- From **Project steering -> Workspace**, run the workspace assessment to use the connected agent subscription already authenticated on that computer. Select any combination of fifteen brownfield assessment domains, collectively covering 133 internal checks from product and architecture through security, privacy, project-specific compliance, delivery, reliability, governance, and modernization planning. Reports include only material conclusions and actions; routine healthy checklist rows are not published. Capability entries state what they own, what they link to, and what they depend on. Connector `0.17.0` starts assessments with three parallel workers and accepts the run's UI-selected limit from three through eight for every coding-agent provider. It keeps one local assessment area at `.engineeros/assessment`: `assessment.md` is the canonical document, `sections/` holds the independently editable stage documents, `.work/` is the resumable transaction area, and an accepted update adds only a concise derived entry under `changes/`. A new run seeds each stage from its durable document, and a reconnect preserves any partially edited `.work` copy, so the coding agent updates affected content instead of regenerating the assessment. ACP agents such as OpenCode use isolated stage sessions within one persistent coding-agent process. The connector owns the worker pool and sends one aggregate heartbeat containing every active worker's phase, progress, last activity, and event count; report content is no longer streamed over the WebSocket or written into backend assessment JSON. The backend validates stage checkpoints so dependency fan-out remains authoritative, while the connector retains completed reports and reloads interrupted ACP or Codex sessions after reconnect when the coding agent supports session restoration. Transient ACP, app-server, provider-availability, and rate-limit failures receive two bounded attempts to continue the saved session without repeating completed inspection. A changed Git commit edits the same durable assessment, retains the prior commit in assessment history, and updates published artifacts in place. Connector reports and session checkpoints are tagged with their target commit so an earlier revision cannot leak into the update. If no assessment exists, EngineerOS creates the initial assessment identity and documents. Capability detail and project-specific compliance controls fan out after their catalogs. Final synthesis reads the connector-local Markdown files, then one completed bundle is revalidated, persisted, published as canonical artifacts, and archived locally. Compliance findings describe repository-verifiable engineering readiness and missing external context, never legal compliance or certification. The connector prints each worker's safe activity and elapsed time every 30 seconds, stops a worker that produces no agent activity for ten minutes instead of waiting indefinitely, and asks the same agent session to repair the same document when structure or backend validation fails. Assessment cannot modify tracked workspace source outside its assigned document.
122
-
123
- Every backend `422` content-validation response is returned to the stage agent with the exact failed item. Distinct validation failures continue through correction and resubmission until the complete stage is accepted. Three repetitions of the same unresolved validation error stop the automatic loop while preserving the latest local report for retry. Authentication, cancellation, source drift, and transport failures remain operational errors rather than agent-correction prompts.
124
-
125
- If Codex reports that its refresh token was already used, stop every connector process using Codex before reauthenticating. Run `codex logout`, then `codex login` in a normal terminal, and restart one connector with `start --workspace ...`. The existing EngineerOS workspace pairing remains valid. The connector stops the failed ACP runtime and reports these recovery steps without exposing its internal stack trace.
126
-
127
- Assessment runs start by reporting whether an accepted assessment exists and how stale it is. Every assigned stage still runs against the current repository revision; durable reports do not contain a trustworthy dependency manifest, so the connector never presents an old section as newly inspected. Connector-owned files under `.engineeros` are ignored before drafts or context packs are created and therefore do not pollute repository change scans.
128
-
129
- After onboarding, every project prompt is routed to this connection. Copilot, shaping, planning, architecture, and experience generation use the connected agent subscription and workspace context. Interactive prompts run independently from assessments and Goal scheduling. Prompt runs are read-only; only an explicitly registered Goal Run receives workspace-write access. If the connector is offline, EngineerOS asks the user to reconnect instead of silently switching models.
130
-
131
- Capability implementation planning uses committed local context in connector `0.32.0`. The synchronized
132
- `INDEX.md` links to the design, product intent, preparation context, decision revisions, implementation plans,
133
- current Facts and normalized Sources. A planning assignment carries the task, new guidance, record references
134
- and the expected snapshot revision; it does not resend those artifact bodies or an assignment-specific evidence
135
- copy. Before starting the agent, the connector checks the revision, saves the snapshot in local Git and supplies
136
- a `git show` pointer to that commit. All linked records are read from the same commit, so background sync does
137
- not change a running plan's input. The backend rechecks the context before saving a generated plan; stale input
138
- or invalid output leaves the accepted plan intact. No remote push is performed.
139
-
140
- Other greenfield generation prompts receive a bounded project-evidence manifest. EngineerOS normalizes uploaded text,
141
- PDF, DOCX, CSV, workbook, presentation, and image Sources, and the connector materializes normalized Markdown
142
- and available original attachments under an assignment-specific directory in `.engineeros/context/inputs/`.
143
- These files are connector-owned, ignored project
144
- context; the active coding agent reads them as untrusted evidence through ordinary file access. Only the most
145
- relevant Sources are included in each assignment. Normalized text is capped at one million characters and
146
- original attachments at 10 MB across the assignment so the WebSocket payload stays bounded; image, workbook,
147
- and presentation originals receive priority because their normalized text is only a descriptor. The connector
148
- removes the assignment directory after the Agent finishes.
149
-
150
- When material evidence or a user decision is missing, a generation Agent can return structured clarification
151
- questions instead of an artifact. EngineerOS stores and presents those questions, accepts free-text or newly
152
- uploaded evidence, and supplies answered clarifications when the same phase is retried. The connector does not
153
- hold a process or WebSocket request open while waiting for a user.
154
-
155
- The complete-product greenfield path performs that question review before each generation stage. After the user
156
- confirms the answers, connector `0.25.0` validates the Agent's complete structured Markdown bundle and atomically
157
- stores its files under `.engineeros/design/01-discovery` through `.engineeros/design/06-delivery`. Every stage has
158
- a manifest and remains directly editable by a human. Later stages read the approved earlier directories as their
159
- authoritative inputs. The planning Agent remains read-only: the connector, not the Agent process, owns the bounded
160
- local write, and an existing stage directory must be deleted explicitly before regeneration.
161
-
162
- Project prompts use resumable, role- and purpose-specific agent sessions. The connector keeps the external session identifiers in its local configuration, so Copilot and artifact conversations survive connector restarts. Changing the role, purpose, model, or reasoning effort starts a separate session. Goal implementation and verification remain isolated runs.
163
-
164
- An empty or document-only folder establishes a greenfield baseline. A code-bearing folder is assessed as brownfield. Use **Rescan** in Steering after the local workspace changes.
165
-
166
- ## Reconnect
167
-
168
- Connector 1.0.0 requires the updated EngineerOS backend. Upgrade both together, then restart the existing
169
- connector with `start`; its saved pairing remains valid. The WebSocket carries dispatch and control messages.
170
- Goal progress, assessment worker status, prompt output, failure reports and results use authenticated HTTP.
171
- There is no application JSON ping/pong. WebSocket protocol keepalive detects connection loss; quiet Goal work
172
- sends an HTTP heartbeat after 15 seconds without a progress update. Idle connectors need no application heartbeat.
173
-
174
- HTTP progress keeps one request in flight and retains the latest unsent state. Prompt deltas are ordered and
175
- bounded; a failed progress stream does not discard the final completed response. Requests have timeouts and
176
- bounded retries. Goal execution attempts and sequence numbers protect against delayed updates.
177
-
178
- Run the backend as **one worker and one replica**: dispatch sockets and pending prompt waiters currently live
179
- in process memory. The production image now uses one worker. Multiple backend workers require a shared dispatch
180
- broker before enabling them. An incompatible backend or connector fails with an upgrade instruction.
181
-
182
- ```sh
183
- npx --yes @engineeros/connector@latest start --workspace .
184
- ```
185
-
186
- Credentials are stored per workspace under `~/.engineeros/connectors` with owner-only permissions where supported.
187
- If a new pairing command is accidentally run from the same folder against the same EngineerOS server, the connector reuses this saved identity instead of creating another baseline assessment.
188
-
189
- ## Self-check
190
-
191
- Connector 1.12.0 checks itself and reports the result to EngineerOS, so a local problem is visible in **Project steering -> Connect workspace** instead of only in this terminal. The checks cover the Node runtime, the saved pairing, whether the EngineerOS backend answers from this machine, whether the coding agent starts, the tool registry, and stuck local Goal jobs.
192
-
193
- The report is sent when the connector connects, every five minutes while it is idle, and once more when a startup problem is about to stop it, which is the case EngineerOS could not see before: the workspace simply appeared offline. Run the same checks locally at any time, paired or not:
194
-
195
- ```sh
196
- npx --yes @engineeros/connector@latest doctor --workspace .
197
- ```
198
-
199
- The command prints every check with its reason and remedy, sends the report when the workspace is paired, and exits non-zero when a check failed.
200
-
201
- ## Local Git history
202
-
203
- Pairing or starting connector 0.31.0 initializes a local Git repository when the project has none and creates its initial commit from source files and durable design/assessment artifacts. An empty project also gets a usable baseline. Existing repositories and their pending source changes are preserved. Git must be installed; no remote is created and nothing is pushed.
204
-
205
- As design context syncs, the connector commits new, changed and deleted durable artifact files locally. These explicit artifact paths are included even though connector runtime state is ignored. Source generated by a capability is committed by the existing implementation and verification workflow on its capability branch. Environment secrets, credentials, dependency/build directories, context indexes and temporary handover files remain excluded. Identical snapshots produce no extra commits, and artifact sync waits while an implementation run is active.
206
-
207
- ## Run Goals
208
-
209
- From capability delivery, choose **Implement capability** and an online coding connector. EngineerOS prepares any missing implementation plan from the saved design, validates its prerequisites, and starts the run. **Preview plan** is optional; the detailed plan remains available without becoming a separate mandatory document review.
210
-
211
- The connector coordinates implementation, independent testing and independent code review. Native implementation subagents may work on independent tasks when the selected coding harness supports them. Testing and review run as separate read-only processes after the implementation is committed. At most two repair-and-review cycles follow the initial review; completed allowances survive resume. Repository finalization has its own single recovery attempt. Unresolved findings are then handed back with failed evidence instead of starting another repair. The handover includes the implementation report, exact revision, changed files and final check reports; persistent failures remain failed.
212
-
213
- Reuse existing shared foundations. A necessary out-of-scope prerequisite requires a recorded approval through `engineeros_request_input` with `decision_area: scope_expansion`, a stable question key, the precise addition and its reason and impact. Each run permits at most two expansion requests, including rejected or dismissed requests. Select **Approve scope expansion** in EngineerOS to authorize that specific addition; other answers do not authorize work. These approvals reach the implementer, independent reviewers and final handover. They do not reset the repair allowance or rewrite the original frozen Goal. Further expansion requires a separate Goal.
214
-
215
- When a consequential choice is missing, the implementation agent calls `engineeros_request_input` and finishes its turn. Answer the question in the active run using a suggestion or your own words. The connector keeps heartbeats active, preserves the workspace and resumes with the saved answer. Dismissal and cancellation never count as answers. Cancellation stops all workers in the run. This feature requires the updated backend and connector; it does not deploy the product or automatically approve its handover.
216
-
217
- Keep the connector online to receive Goals assigned from EngineerOS. Each run explicitly selects one workspace
218
- mode. `local_branch` creates or reuses the capability branch in the connected repository, runs with its exact
219
- local dependencies and properties, and returns to the original branch after a clean committed run. It is the
220
- default for a dedicated agent machine. Work left uncommitted on the current branch, staged or untracked, is
221
- stashed before the Goal branch is created and reapplied when the repository is handed back, so it never blocks
222
- a Goal and never becomes part of it. Ignored files are left in place. Work that no longer applies cleanly stays
223
- in `git stash list` with its recovery command reported on the run.
224
- `isolated_worktree` creates one durable worktree at `<project>/.engineeros/goals/<goal-id>` and reuses it
225
- across retries. The worktree shares Git configuration and hooks and copies individual ignored local configuration
226
- files; ignored dependency and build directories are not duplicated. The coding-agent process inherits the
227
- connector environment in both modes. Cancellation stops the agent. The connector returns changed paths, a bounded
228
- diff, and the exact repository ZIP; a human still performs independent attestation. Accepted work fast-forwards
229
- into an unchanged clean connected branch, or cherry-picks the complete Goal commit range onto a clean branch that
230
- advanced, then refreshes the workspace snapshot. Dirty or conflicting workspaces are never overwritten: the Goal
231
- branch remains available for explicit review and merge.
232
-
233
- During the writable implementation phase, Codex receives an authenticated EngineerOS MCP server automatically. It can list, read, create, update, reclassify, soft-delete, and materialize project artifacts into canonical Product records through the same repository boundary used by Copilot. The backend accepts those calls only while the assigned Goal is running. Read-only project prompts and the independent verification phase do not receive mutation tools.
234
-
235
- ### Resume a failed or interrupted Goal run
236
-
237
- Connector 0.34.0 keeps new isolated Goal worktrees inside the project at `.engineeros/goals/<goal-id>`.
238
- Execution checkpoints live at `.engineeros/runs/<run-id>`. Start the connector with its existing pairing,
239
- open the Goal's run panel and select **Resume run**. A disconnected running run becomes resumable after
240
- 90 seconds without a heartbeat. Offline resume requests wait for the assigned connector to reconnect.
241
-
242
- Resume preserves the run ID, frozen assignment, branch, files and completed implementation. It restores the
243
- agent session when supported and reruns interrupted verification. A completed result is retained for another
244
- upload attempt; changing the code causes it to be verified again. Existing worktrees are reused through Git's
245
- registry, so an upgrade does not move your current work. A missing workspace or corrupt checkpoint must be
246
- restored before resuming. Submitted results and final acceptance receipts retain their existing review flow.
247
-
248
- ## Local context engine
249
-
250
- The connector keeps a local index for each workspace under `~/.engineeros/context/<connector id>/workspaces/`: file classifications, symbols, document headings, and import relationships for every safe file. Separating indexes by resolved workspace keeps the source checkout and concurrent Goal worktrees from replacing one another. An index is built at onboarding, refreshed incrementally from file digests when EngineerOS triggers a workspace refresh, and re-checked before every assignment.
251
-
252
- Every assignment prompt arrives with a bounded, task-ranked Markdown working set. It names the most relevant paths, symbol and heading locations, local dependencies, direct consumers, and candidate tests, followed by a pointer to the durable source map at `.engineeros/context/source-map.md`. The connector ranks from the assignment's focused context query, frozen Goal packet, assessment stage identity, or current project request as appropriate. It never pastes source-file contents into the prompt; the Agent reads deeper through the source map, the listed files, assessment sections, ordinary file tools, or the attached `engineeros_*` MCP tools. Ranking is structural and lexical, using indexed paths, symbols, summaries, and imports; it does not generate or store embeddings.
253
-
254
- Context preparation is a launch prerequisite for every role. The connector refreshes the correct workspace index, verifies that the source map exists, and stops before starting an agent with an actionable error when pairing identity, indexing, or map generation is unavailable. Resumed project sessions also receive a bounded `Session Memory` digest of relevant earlier turns in the same session, kept under `~/.engineeros/context/<connector id>/sessions/`, so follow-up prompts build on prior conclusions instead of re-deriving them. Entries carry a derived kind (fix, decision, change, or conclusion), and cross-session recall is stamped with its source session and last-active time.
255
-
256
- Every direct Codex assignment — project prompt, assessment, Goal implementation, and independent verification — receives the local read-only context MCP server with `engineeros_search`, `engineeros_outline`, `engineeros_read_symbol`, `engineeros_similar`, `engineeros_blast_radius`, and `engineeros_recall`. Registry-backed ACP adapters receive the same runtime-workspace server through `session/new` and `session/load`. Only a writable Goal implementation receives the authenticated EngineerOS artifact MCP server; project prompts, assessments, and verification never receive mutation tools. Custom ACP commands receive no injected servers because they have no registry MCP contract.
257
-
258
- After Goal implementation commits its isolated worktree change, the connector rebuilds context from that exact post-commit workspace before starting the independent verifier. Verification therefore receives the current task-ranked working set plus a bounded `Change Impact` section naming changed files, direct importers, and candidate tests rather than relying on the pre-change index. `engineeros_similar` helps the Agent extend existing functions, classes, and types instead of duplicating them. Stored symbol outlines omit literal constant values, MCP search responses are capped at one hundred files, and the index, source map, prompt context, and session memory remain on the local computer.
259
-
260
- ## Local design artifacts
261
-
262
- Connector 0.28.0 synchronizes persisted design records into
263
- `.engineeros/design/projects/<project-id>/`, with `INDEX.md` linking the named
264
- Markdown artifacts and their current review status. Sync runs on connection,
265
- every ten seconds, and before project prompts and Goal execution. Goal worktrees
266
- receive their own copy. Assignments point the agent to the index explicitly.
267
-
268
- The database remains authoritative. Confirm edits through EngineerOS Copilot;
269
- local changes are overwritten by the next successful sync. Renames and deletions
270
- remove outdated Markdown files from this managed directory. An offline connector
271
- refreshes when it reconnects. The backend must provide the matching design-context
272
- endpoint; sync failures are reported and block new agent tasks from using stale context.
273
-
274
- ## Autonomous work scan
275
-
276
- Connector 1.23.0 can tell EngineerOS what this workspace should deliver next. It scans only when the
277
- autonomy policy for the project asks it to: EngineerOS answers each five-minute self-check with whether
278
- it wants a scan, and an autonomy policy that is off, out of budget or already running a Goal never
279
- causes one. Turn it on, and off again, in **Project steering -> Autonomy**.
280
-
281
- When a scan is requested, the connector waits until nothing else is running here — no assessment stage,
282
- no prompt, no local Goal job — and then reads evidence that is already on disk: the synced design index,
283
- the local assessment, and Goal runs that stopped. One read-only agent turn ranks that evidence and names
284
- at most five capabilities worth starting, each with its reason. The turn has no write, command or tool
285
- access, and the scan repeats at most every thirty minutes.
286
-
287
- The connector never starts work of its own. Candidates are reported as evidence; EngineerOS re-validates
288
- every one against its own records, applies the policy, budget and concurrency limits, and decides whether
289
- to dispatch a Goal. A candidate naming a capability EngineerOS never published to this workspace is
290
- discarded before it is sent. A failing scan backs off like other maintenance and names itself in the
291
- self-check.
292
-
293
- Each report comes back with what EngineerOS turned down. The next scan asks for different work and drops
294
- a refused candidate even if the agent repeats it. When neither the workspace nor those refusals have
295
- changed, the shortlist is repeated from memory and no agent turn is spent at all, so an idle workspace
296
- costs nothing to keep watching.
297
-
298
- ## Run spend ceiling
299
-
300
- Repair cycles bound how often work is retried, and a run that goes quiet is stopped after ten minutes.
301
- Neither bounds a run that keeps producing output while spending, which matters once EngineerOS starts
302
- Goals without anyone watching. Every delivery run therefore stops at **5,000,000 tokens**, counted across
303
- resumes from the saved run checkpoint and stated to the agent in its execution rules.
304
-
305
- Reaching the ceiling is a stopping point, not a crash: the committed changes and unresolved findings are
306
- handed over for review exactly as they are when the repair budget runs out, and the spend already made is
307
- reported to EngineerOS. Set `ENGINEEROS_RUN_TOKEN_CEILING` to a different whole number of tokens to raise
308
- or lower it for this machine.
309
-
310
- ## Requirements
311
-
312
- Node.js 22 or newer, Git, and an authenticated agent. `npx` distributions use npm, `uvx` distributions require uv, and binary archives require `tar` (`unzip` for ZIP files on Linux). Registry agents report their own authentication prerequisites when they start.
313
-
314
- ## Execution profiles
315
-
316
- EngineerOS can set a workspace default model and reasoning effort, then override either value for an individual Goal. The same workspace default is used for assessments, Copilot, and generated artifacts. The connector passes the resolved values to Codex CLI and reports unsupported profiles instead of silently ignoring them.
317
-
318
- Codex connectors advertise `gpt-5.6-sol` and `gpt-5.6-terra` by default. Override the choices shown in EngineerOS before starting the connector:
319
-
320
- ```sh
321
- ENGINEEROS_AGENT_MODELS="model-a,model-b" npx @engineeros/connector start --workspace .
322
- ```
323
-
324
- ## Codex CLI compatibility
325
-
326
- The connector prints the exact Codex CLI version it will use before connecting. If the
327
- configured model requires a newer CLI, update Codex and restart the connector:
328
-
329
- ```sh
330
- npm install -g @openai/codex@latest
331
- codex --version
332
- npx @engineeros/connector start --workspace .
333
- ```
334
-
335
- ## Supervisor recovery
336
-
337
- The workspace runner monitors worker health separately from progress reporting. Continuous reporting failures pause coding after one minute; missing worker health is detected after ninety seconds. Recovery preserves the sandbox and checkpoint. It allows one restart per failure category and at most two per run, with a cooldown and storage check before restarting.
338
-
339
- Unknown runtime failures may use one read-only LLM diagnosis per run through the configured agent, with a two-minute deadline. Known filesystem and network faults do not call an LLM. Diagnosis recommends retrying the checkpoint or a manual fix; it does not execute generated commands or modify the connector. Repeated failures stop automatic recovery. Inspect `runner status` and `.engineeros/runner/recovery/<run-id>.json`, fix the reported cause, then explicitly resume the existing run. Recovery budgets are retained.
340
-
341
- Verification results are cached per commit and role. Completed checks are reused. An interrupted check requires inspection before a new revision; it is not automatically billed again. Existing workers must load the new connector code before these protections apply.
342
-
343
- ## Optional tool and plugin inventory
344
-
345
- Connector 1.7 advertises a curated candidate catalog alongside the operator-managed inventory. The catalog covers code intelligence, design, work management, source control, documentation, research, API development, browser testing, quality and security, data, infrastructure, observability and development environments. Candidate entries are metadata only: they are not installed, authenticated, admitted, started or exposed to coding agents.
346
-
347
- The catalog includes CodeGraph, Serena, JetBrains IDE MCP, ast-grep, Figma, Storybook, Miro, Lucid, Linear, monday.com, Atlassian Rovo, YouTrack, Notion, Slack, GitHub, GitLab, Context7, Postman, Exa, Tavily, Firecrawl, Perplexity, Playwright, Chrome DevTools, BrowserStack, Semgrep, SonarQube, Snyk, Gitleaks, Trivy, PostgreSQL MCP, Supabase, Terraform, AWS, Azure, Cloudflare, Vercel, Sentry, Grafana, Datadog, PagerDuty, Renovate, Dev Container CLI and Docker MCP Gateway. Each entry records its category, selection group, activation condition, eligible workflow profiles, provenance and default policy. Overlapping selection groups are alternatives, not permission to load every provider.
348
-
349
- Inspect the catalog and locally registered providers without starting software:
350
-
351
- ```sh
352
- engineeros-connector tools list --workspace PATH
353
- engineeros-connector tools register /absolute/path/manifest.json --workspace PATH
354
- engineeros-connector tools disable PROVIDER_ID --workspace PATH
355
- engineeros-connector tools disable all --workspace PATH
356
- engineeros-connector tools enable PROVIDER_ID --workspace PATH
357
- engineeros-connector tools remove PROVIDER_ID --workspace PATH
358
- engineeros-connector tools sign-in PROVIDER_ID --workspace PATH
359
- engineeros-connector tools auth-status PROVIDER_ID --workspace PATH
360
- engineeros-connector tools sign-out PROVIDER_ID --workspace PATH
361
- ```
362
-
363
- After pairing connector 1.8 or newer, open **Project → Steering → Local workspace → Tools and plugins** to search the catalog and control registered providers. The web UI can enable, disable and remove registrations through the authenticated connector session. Enabling and removal require confirmation. Registration remains local because its evaluated manifest contains machine paths and integrity metadata that are never advertised to EngineerOS.
364
-
365
- Use `enable all` to clear the global disable. Registration never installs packages or executes a provider. Replacing a pin requires explicit removal and registration. Registry files live beside the user-owned connector configuration as `<workspace-key>.tools.json`, outside the repository. The connected workspace displays their inventory, refreshed through authenticated heartbeats. Stop any abandoned operator update before removing its `.tools.json.lock` file.
366
-
367
- Manifests are strict internal JSON configuration with these required fields:
368
-
369
- | Field | Required value |
370
- | --- | --- |
371
- | `id`, `name`, `provider`, `capability_class` | Stable lowercase ID, display labels and `tool`, `skill` or `agent`. |
372
- | `source`, `version`, `license` | Credential-free HTTPS source, exact semantic version and license. No `latest` or version range. |
373
- | `launch` | For `stdio` or skill `file`: `transport`, absolute `entrypoint`, absolute `package_json` and lowercase `sha256` of the entrypoint. For `https`: `transport` and credential-free `endpoint`. No commands, arguments or environment values are accepted. |
374
- | `platforms` | Array containing supported `win32`, `linux` and/or `darwin`. |
375
- | `permissions` | `workspace` (`none`, `read`, `write`), `process` boolean, `network` HTTPS URL array, `browser` (`none`, `isolated`), `secrets` reference-name array and `external_mutations` boolean. These record requests, not runtime grants. |
376
- | `authentication` | `none`, operator-owned `external` instructions, or `oauth` with exact scopes and either dynamic client registration or a provider-issued public client ID. Secret values are never accepted in a manifest. Older manifests without this field remain loadable but report setup required for HTTPS or secret-bearing providers. |
377
- | `profiles` | Array of `discovery`, `research`, `implementation`, `verification`, `handover`. |
378
- | `tasks`, `exclusions` | Arrays of lowercase task IDs; at least one eligible task. |
379
- | `tools` | Array of objects with `name` (`provider-id:operation_name`), concise `description`, and `response_mode` (`summary` or `reference`). |
380
- | `policy` | `approval_required: true`, `timeout_ms` from 100 to 30000, `retry_limit` 0 or 1. Reserved for bounded provider adapters; inspection executes nothing. |
381
- | `evidence` | `metadata-only`. |
382
- | `evaluation` | `status` (`experimental` or `standard`) and a real evidence `reference`. Standard status requires completed comparative evaluation. |
383
-
1
+ # EngineerOS Connector
2
+
3
+ The connector uses an authenticated EngineerOS WebSocket for pairing, workspace identity, run lifecycle, and evidence. Coding work can run through any agent in the official ACP registry, a custom ACP v1-compatible command over stdio, or the Forge command line. Direct Codex CLI remains available as the compatibility path.
4
+
5
+ ## Independent Goal runner
6
+
7
+ Connector 1.2.0 hands Goal jobs to a separate local runner. Closing the connector terminal or losing its WebSocket does not stop an executing Goal. Progress and final results use HTTP; undelivered results remain on disk for retry. Windows supervisors and workers use a windowless launcher; Goal runs and agent commands do not open new terminals.
8
+
9
+ Install from a permanent global installation or repository checkout, then run:
10
+
11
+ ```text
12
+ engineeros-connector runner install --workspace D:\Puli\work\workspaces\caresched
13
+ engineeros-connector runner status --workspace D:\Puli\work\workspaces\caresched
14
+ ```
15
+
16
+ The first Goal dispatch also installs/starts the runner when using a permanent executable path. Temporary `npx` cache paths cannot host a persistent service: install the connector globally first. Update the backend for the HTTP claim endpoint before dispatching Goals.
17
+
18
+ Windows uses Task Scheduler under your current user, restarts after failure, and resumes saved jobs at sign-in following reboot. Linux uses a systemd user service; enable user lingering separately if recovery must start before login. Existing running jobs stay with their current process; resume an interrupted run to hand it to the new service.
19
+
20
+ Files under your project's `.engineeros` directory:
21
+
22
+ - `runner/inbox/`: durable job dispatch requests.
23
+ - `runner/service.json`: supervisor PID and heartbeat.
24
+ - `runner/service.log`: supervisor startup and cleanup diagnostics.
25
+ - `runs/<run-id>/job.json`: execution/delivery status, saved assignment, pending result or failure.
26
+ - `runs/<run-id>/state.json`: coding session and implementation/verification checkpoints.
27
+ - `runs/<run-id>/activity.log`: timestamped activity and periodic inactivity status.
28
+ - `runs/<run-id>/worker.log`: worker console diagnostics.
29
+
30
+ The runner stops and records a resumable failure after ten minutes without agent events, except when explicitly waiting for user input. Restore missing prerequisites or agent usage before using **Resume run**. Acceptance and integration remain controlled by EngineerOS.
31
+
32
+ There is no wall-clock execution cutoff. Runs stop after at most two repair-and-review cycles following the initial review. The inactivity safeguard above still stops a silent agent; waiting for your answer does not consume a repair cycle. Successful results awaiting upload are not executed again.
33
+
34
+ ### Delete a Goal and its sandboxes
35
+
36
+ Choose **Delete Goal** in the Goal detail header and confirm. This deletes all revisions, runs, receipts, proof results, attachments and run questions for that Goal. Connected runners first stop every run in the revision family, then remove owned isolated Git worktrees (including uncommitted sandbox files), checkpoints, queued dispatches and logs. The source repository, its local changes, Git branches and unrelated worktrees are preserved. External registered worktrees require their matching saved checkpoints to establish ownership. Manually managed external environments remain the external runner's responsibility.
37
+
38
+ Deletion remains visible as **Deleting** until every assigned connector acknowledges cleanup. The supervisor polls authenticated cleanup requests every 15 seconds, including while the connector terminal is closed. Offline machines and lost acknowledgements retry safely. Cleanup errors are displayed on the Goal with **Retry cleanup**; a live worker lock or ambiguous sandbox ownership prevents removal. Active backend verification must finish before deletion starts. Small markers in `runner/deleted-runs/` prevent delayed dispatches from restarting deleted work.
39
+
40
+ After updating an existing installation, reinstall the runner task with `runner install` and restart the existing supervisor to load the new code. The Windows scheduled action must use `wscript.exe` and `runner/launch.vbs`. Logs remain in the project's `.engineeros` directory; no terminal is needed for a run.
41
+
42
+ If the Windows runner task was disabled, `engineeros-connector runner start --workspace PATH` explicitly enables it and starts processing queued jobs. Incoming dispatches remain queued while the task is disabled and print this recovery command; they do not enable it automatically. Do not resend the Goal just to start its queued job.
43
+
44
+
45
+ ## Connect an official ACP agent
46
+
47
+ Connector 0.33.0 supports **Deliver capability**. EngineerOS immediately queues the capability as a Goal request;
48
+ it does not generate or require approval of a separate implementation slice first. The coding agent reads the
49
+ frozen local design, writes its implementation plan inside the run worktree, then implements, tests and repairs
50
+ the work. Independent testing and review agents verify the delivered commit. Required user choices use the
51
+ existing run questions and resume the same work. The final handover includes the committed plan, source changes,
52
+ test evidence and review results. Integration still requires the user's review.
53
+
54
+ Planning and verification read the assigned design from its local Git commit, so later design synchronization
55
+ does not silently change a running delivery. The implementation plan is stored at
56
+ `docs/delivery/<goal-id>/implementation-plan.md` and remains part of the delivered repository history.
57
+
58
+ EngineerOS reads the curated [ACP agent registry](https://agentclientprotocol.com/registry), caches it for 24 hours, and uses the registry's pinned distribution for the current platform. The catalog includes Codex, Claude, Gemini, GitHub Copilot, Goose, OpenCode, Qwen Code, Cursor, and other compatible agents as they are published. List the current catalog, prepare the selected agent, then pair the workspace:
59
+
60
+ ```sh
61
+ npx --yes @engineeros/connector@latest agents
62
+ npx --yes @engineeros/connector@latest agent gemini install
63
+ npx --yes @engineeros/connector@latest pair PAIRING-CODE --url https://your-engineeros.example --workspace . --onboard --agent gemini
64
+ ```
65
+
66
+ Registry `npx` and `uvx` packages are prepared with their native package runner. Registry binaries are downloaded into `~/.engineeros/agents`, checked against the published SHA-256 digest when present, and launched from that managed location. The connector checks the selected distribution before pairing. Agent processes stay alive while the connector is active, project conversations reuse their ACP sessions, and response chunks reach Copilot as the agent produces them.
67
+
68
+ ## Pair an ACP coding agent
69
+
70
+ Run the command from the repository the agent should work in:
71
+
72
+ ```powershell
73
+ npx --yes @engineeros/connector@latest pair PAIRING-CODE --url http://localhost:8000 --workspace . --onboard --agent-name "My ACP agent" --agent-command my-agent --agent-args '["--acp"]'
74
+ ```
75
+
76
+ `--agent-command` must start an ACP v1 agent over NDJSON stdio. `--agent-args` is a JSON array so arguments are passed without invoking a shell. Omit `--agent` and the custom command options to use the installed Codex CLI directly.
77
+
78
+ Connect a local Codex CLI workspace to EngineerOS through an outbound WebSocket.
79
+
80
+ ## Pair Forge
81
+
82
+ [Forge](https://forgecode.dev) is driven through its own command line rather than ACP. Install it, sign in to a provider, then pair the workspace:
83
+
84
+ ```sh
85
+ forge provider login
86
+ npx --yes @engineeros/connector@latest pair PAIRING-CODE --url https://your-engineeros.example --workspace . --onboard --agent-protocol forge
87
+ ```
88
+
89
+ Forge runs its own agents, so `--agent` and `--agent-command` are rejected for this protocol. The connector selects the Forge agent that carries the access an assignment is entitled to: `sage` for read-only research, planning, assessment, and verification work, and `forge` for the writable implementation phase of a registered Goal. Pairing stops with the corrective command when Forge is missing, unauthenticated, or no longer provides both agents.
90
+
91
+ Each EngineerOS session maps onto a Forge conversation, so project prompts and multi-stage assessments resume with their history intact. Token usage is reported per turn, measured as the growth of the conversation while the turn ran.
92
+
93
+ Every model Forge offers through the providers you are signed in to is published to EngineerOS, named with its provider because the same model is offered by more than one, along with every reasoning effort Forge accepts. Forge takes the provider, model and reasoning effort of a run from the environment of its process, so the choice made in EngineerOS applies to that run alone: it does not change the model set with `forge config set model`, and it does not disturb a run beside it. The model and effort configured in Forge are marked as the default. Pairing stops when Forge offers no models, which means no provider is signed in: run `forge provider login`, then restart the connector.
94
+
95
+ The connector registers the EngineerOS project artifact tools with Forge for the current user, which is the only scope Forge trusts without a person approving a file in the workspace, so nothing is written into the repository being worked on. Forge shares that one registration across every workspace and discovers the tools once, so the run each tool acts on is carried in the environment of the Forge process rather than in the registration. Concurrent runs stay separate, and a tool called outside an EngineerOS run is refused with the reason.
96
+
97
+ ## Agent roles and skills
98
+
99
+ The selected ACP, Forge, or Codex agent is the execution engine. EngineerOS chooses a provider-neutral role for each activity and the connector injects exactly one bundled skill:
100
+
101
+ - `research` uses `project-research` to answer questions from observed project evidence.
102
+ - `assessment` uses the internal `assessment-maintenance` skill to inspect source without changing it and edit only the assigned assessment Markdown document.
103
+ - `planning` remains read-only and uses one server-selected skill: `product-discovery`, `experience-design`, `solution-design`, `requirements-and-acceptance`, or `delivery-planning`. Product discovery covers both intent discovery and capability shaping; delivery planning covers accepted greenfield slices and brownfield changes.
104
+ - `implementation` uses `implementation` with workspace-write access only for a registered Goal.
105
+ - `verification` uses `independent-verification` with read-only access for artifact review and independent Goal proof.
106
+
107
+ This is intentionally a small executable catalog. Skills for hypothetical release, quality, or agent-workflow phases are not advertised until EngineerOS has a workflow that can invoke them. Harness-wide access, evidence, clarification, and output rules remain outside skill bodies, so an assignment pays only for the specialized judgment it needs. Direct Codex runs also disable ambient skill instructions; ACP providers receive the selected EngineerOS skill in the assignment prompt rather than the rest of the catalog.
108
+
109
+ The connector rejects a role whose access does not match the assignment before starting the agent. Role-specific sessions preserve useful context without mixing planning, research, implementation, or verification responsibilities. A shared interaction contract makes the Agent infer the current project situation, lead with the useful outcome, and suggest one concrete next activity only when it genuinely helps. User-visible responses refer neutrally to the Agent; provider and harness details remain operational metadata.
110
+
111
+ ## Onboard a workspace
112
+
113
+ Create a connection command from **Project steering -> Connect workspace**, then run it inside the local folder:
114
+
115
+ ```sh
116
+ npx --yes @engineeros/connector@latest pair PAIRING-CODE --url https://your-engineeros.example --workspace . --onboard
117
+ ```
118
+
119
+ The connector uploads a bounded ZIP snapshot for a safe file inventory, then stays online for deep assessments, rescans, and Goal Runs. Inventory never executes repository code. It excludes known secrets, dependency directories, build output, compiled binaries, files larger than 5 MB, agent-tool caches, Git metadata, and connector state before upload.
120
+
121
+ From **Project steering -> Workspace**, run the workspace assessment to use the connected agent subscription already authenticated on that computer. Select any combination of fifteen brownfield assessment domains, collectively covering 133 internal checks from product and architecture through security, privacy, project-specific compliance, delivery, reliability, governance, and modernization planning. Reports include only material conclusions and actions; routine healthy checklist rows are not published. Capability entries state what they own, what they link to, and what they depend on. Connector `0.17.0` starts assessments with three parallel workers and accepts the run's UI-selected limit from three through eight for every coding-agent provider. It keeps one local assessment area at `.engineeros/assessment`: `assessment.md` is the canonical document, `sections/` holds the independently editable stage documents, `.work/` is the resumable transaction area, and an accepted update adds only a concise derived entry under `changes/`. A new run seeds each stage from its durable document, and a reconnect preserves any partially edited `.work` copy, so the coding agent updates affected content instead of regenerating the assessment. ACP agents such as OpenCode use isolated stage sessions within one persistent coding-agent process. The connector owns the worker pool and sends one aggregate heartbeat containing every active worker's phase, progress, last activity, and event count; report content is no longer streamed over the WebSocket or written into backend assessment JSON. The backend validates stage checkpoints so dependency fan-out remains authoritative, while the connector retains completed reports and reloads interrupted ACP or Codex sessions after reconnect when the coding agent supports session restoration. Transient ACP, app-server, provider-availability, and rate-limit failures receive two bounded attempts to continue the saved session without repeating completed inspection. A changed Git commit edits the same durable assessment, retains the prior commit in assessment history, and updates published artifacts in place. Connector reports and session checkpoints are tagged with their target commit so an earlier revision cannot leak into the update. If no assessment exists, EngineerOS creates the initial assessment identity and documents. Capability detail and project-specific compliance controls fan out after their catalogs. Final synthesis reads the connector-local Markdown files, then one completed bundle is revalidated, persisted, published as canonical artifacts, and archived locally. Compliance findings describe repository-verifiable engineering readiness and missing external context, never legal compliance or certification. The connector prints each worker's safe activity and elapsed time every 30 seconds, stops a worker that produces no agent activity for ten minutes instead of waiting indefinitely, and asks the same agent session to repair the same document when structure or backend validation fails. Assessment cannot modify tracked workspace source outside its assigned document.
122
+
123
+ Every backend `422` content-validation response is returned to the stage agent with the exact failed item. Distinct validation failures continue through correction and resubmission until the complete stage is accepted. Three repetitions of the same unresolved validation error stop the automatic loop while preserving the latest local report for retry. Authentication, cancellation, source drift, and transport failures remain operational errors rather than agent-correction prompts.
124
+
125
+ If Codex reports that its refresh token was already used, stop every connector process using Codex before reauthenticating. Run `codex logout`, then `codex login` in a normal terminal, and restart one connector with `start --workspace ...`. The existing EngineerOS workspace pairing remains valid. The connector stops the failed ACP runtime and reports these recovery steps without exposing its internal stack trace.
126
+
127
+ Assessment runs start by reporting whether an accepted assessment exists and how stale it is. Every assigned stage still runs against the current repository revision; durable reports do not contain a trustworthy dependency manifest, so the connector never presents an old section as newly inspected. Connector-owned files under `.engineeros` are ignored before drafts or context packs are created and therefore do not pollute repository change scans.
128
+
129
+ After onboarding, every project prompt is routed to this connection. Copilot, shaping, planning, architecture, and experience generation use the connected agent subscription and workspace context. Interactive prompts run independently from assessments and Goal scheduling. Prompt runs are read-only; only an explicitly registered Goal Run receives workspace-write access. If the connector is offline, EngineerOS asks the user to reconnect instead of silently switching models.
130
+
131
+ Capability implementation planning uses committed local context in connector `0.32.0`. The synchronized
132
+ `INDEX.md` links to the design, product intent, preparation context, decision revisions, implementation plans,
133
+ current Facts and normalized Sources. A planning assignment carries the task, new guidance, record references
134
+ and the expected snapshot revision; it does not resend those artifact bodies or an assignment-specific evidence
135
+ copy. Before starting the agent, the connector checks the revision, saves the snapshot in local Git and supplies
136
+ a `git show` pointer to that commit. All linked records are read from the same commit, so background sync does
137
+ not change a running plan's input. The backend rechecks the context before saving a generated plan; stale input
138
+ or invalid output leaves the accepted plan intact. No remote push is performed.
139
+
140
+ Other greenfield generation prompts receive a bounded project-evidence manifest. EngineerOS normalizes uploaded text,
141
+ PDF, DOCX, CSV, workbook, presentation, and image Sources, and the connector materializes normalized Markdown
142
+ and available original attachments under an assignment-specific directory in `.engineeros/context/inputs/`.
143
+ These files are connector-owned, ignored project
144
+ context; the active coding agent reads them as untrusted evidence through ordinary file access. Only the most
145
+ relevant Sources are included in each assignment. Normalized text is capped at one million characters and
146
+ original attachments at 10 MB across the assignment so the WebSocket payload stays bounded; image, workbook,
147
+ and presentation originals receive priority because their normalized text is only a descriptor. The connector
148
+ removes the assignment directory after the Agent finishes.
149
+
150
+ When material evidence or a user decision is missing, a generation Agent can return structured clarification
151
+ questions instead of an artifact. EngineerOS stores and presents those questions, accepts free-text or newly
152
+ uploaded evidence, and supplies answered clarifications when the same phase is retried. The connector does not
153
+ hold a process or WebSocket request open while waiting for a user.
154
+
155
+ The complete-product greenfield path performs that question review before each generation stage. After the user
156
+ confirms the answers, connector `0.25.0` validates the Agent's complete structured Markdown bundle and atomically
157
+ stores its files under `.engineeros/design/01-discovery` through `.engineeros/design/06-delivery`. Every stage has
158
+ a manifest and remains directly editable by a human. Later stages read the approved earlier directories as their
159
+ authoritative inputs. The planning Agent remains read-only: the connector, not the Agent process, owns the bounded
160
+ local write, and an existing stage directory must be deleted explicitly before regeneration.
161
+
162
+ Project prompts use resumable, role- and purpose-specific agent sessions. The connector keeps the external session identifiers in its local configuration, so Copilot and artifact conversations survive connector restarts. Changing the role, purpose, model, or reasoning effort starts a separate session. Goal implementation and verification remain isolated runs.
163
+
164
+ An empty or document-only folder establishes a greenfield baseline. A code-bearing folder is assessed as brownfield. Use **Rescan** in Steering after the local workspace changes.
165
+
166
+ ## Reconnect
167
+
168
+ Connector 1.0.0 requires the updated EngineerOS backend. Upgrade both together, then restart the existing
169
+ connector with `start`; its saved pairing remains valid. The WebSocket carries dispatch and control messages.
170
+ Goal progress, assessment worker status, prompt output, failure reports and results use authenticated HTTP.
171
+ There is no application JSON ping/pong. WebSocket protocol keepalive detects connection loss; quiet Goal work
172
+ sends an HTTP heartbeat after 15 seconds without a progress update. Idle connectors need no application heartbeat.
173
+
174
+ HTTP progress keeps one request in flight and retains the latest unsent state. Prompt deltas are ordered and
175
+ bounded; a failed progress stream does not discard the final completed response. Requests have timeouts and
176
+ bounded retries. Goal execution attempts and sequence numbers protect against delayed updates.
177
+
178
+ Run the backend as **one worker and one replica**: dispatch sockets and pending prompt waiters currently live
179
+ in process memory. The production image now uses one worker. Multiple backend workers require a shared dispatch
180
+ broker before enabling them. An incompatible backend or connector fails with an upgrade instruction.
181
+
182
+ ```sh
183
+ npx --yes @engineeros/connector@latest start --workspace .
184
+ ```
185
+
186
+ Credentials are stored per workspace under `~/.engineeros/connectors` with owner-only permissions where supported.
187
+ If a new pairing command is accidentally run from the same folder against the same EngineerOS server, the connector reuses this saved identity instead of creating another baseline assessment.
188
+
189
+ ## Self-check
190
+
191
+ Connector 1.12.0 checks itself and reports the result to EngineerOS, so a local problem is visible in **Project steering -> Connect workspace** instead of only in this terminal. The checks cover the Node runtime, the saved pairing, whether the EngineerOS backend answers from this machine, whether the coding agent starts, the tool registry, and stuck local Goal jobs.
192
+
193
+ The report is sent when the connector connects, every five minutes while it is idle, and once more when a startup problem is about to stop it, which is the case EngineerOS could not see before: the workspace simply appeared offline. Run the same checks locally at any time, paired or not:
194
+
195
+ ```sh
196
+ npx --yes @engineeros/connector@latest doctor --workspace .
197
+ ```
198
+
199
+ The command prints every check with its reason and remedy, sends the report when the workspace is paired, and exits non-zero when a check failed.
200
+
201
+ ## Local Git history
202
+
203
+ Pairing or starting connector 0.31.0 initializes a local Git repository when the project has none and creates its initial commit from source files and durable design/assessment artifacts. An empty project also gets a usable baseline. Existing repositories and their pending source changes are preserved. Git must be installed; no remote is created and nothing is pushed.
204
+
205
+ As design context syncs, the connector commits new, changed and deleted durable artifact files locally. These explicit artifact paths are included even though connector runtime state is ignored. Source generated by a capability is committed by the existing implementation and verification workflow on its capability branch. Environment secrets, credentials, dependency/build directories, context indexes and temporary handover files remain excluded. Identical snapshots produce no extra commits, and artifact sync waits while an implementation run is active.
206
+
207
+ ## Run Goals
208
+
209
+ From capability delivery, choose **Implement capability** and an online coding connector. EngineerOS prepares any missing implementation plan from the saved design, validates its prerequisites, and starts the run. **Preview plan** is optional; the detailed plan remains available without becoming a separate mandatory document review.
210
+
211
+ The connector coordinates implementation, independent testing and independent code review. Native implementation subagents may work on independent tasks when the selected coding harness supports them. Testing and review run as separate read-only processes after the implementation is committed. At most two repair-and-review cycles follow the initial review; completed allowances survive resume. Repository finalization has its own single recovery attempt. Unresolved findings are then handed back with failed evidence instead of starting another repair. The handover includes the implementation report, exact revision, changed files and final check reports; persistent failures remain failed.
212
+
213
+ Reuse existing shared foundations. A necessary out-of-scope prerequisite requires a recorded approval through `engineeros_request_input` with `decision_area: scope_expansion`, a stable question key, the precise addition and its reason and impact. Each run permits at most two expansion requests, including rejected or dismissed requests. Select **Approve scope expansion** in EngineerOS to authorize that specific addition; other answers do not authorize work. These approvals reach the implementer, independent reviewers and final handover. They do not reset the repair allowance or rewrite the original frozen Goal. Further expansion requires a separate Goal.
214
+
215
+ When a consequential choice is missing, the implementation agent calls `engineeros_request_input` and finishes its turn. Answer the question in the active run using a suggestion or your own words. The connector keeps heartbeats active, preserves the workspace and resumes with the saved answer. Dismissal and cancellation never count as answers. Cancellation stops all workers in the run. This feature requires the updated backend and connector; it does not deploy the product or automatically approve its handover.
216
+
217
+ Keep the connector online to receive Goals assigned from EngineerOS. Each run explicitly selects one workspace
218
+ mode. `local_branch` creates or reuses the capability branch in the connected repository, runs with its exact
219
+ local dependencies and properties, and returns to the original branch after a clean committed run. It is the
220
+ default for a dedicated agent machine. Work left uncommitted on the current branch, staged or untracked, is
221
+ stashed before the Goal branch is created and reapplied when the repository is handed back, so it never blocks
222
+ a Goal and never becomes part of it. Ignored files are left in place. Work that no longer applies cleanly stays
223
+ in `git stash list` with its recovery command reported on the run.
224
+ `isolated_worktree` creates one durable worktree at `<project>/.engineeros/goals/<goal-id>` and reuses it
225
+ across retries. The worktree shares Git configuration and hooks and copies individual ignored local configuration
226
+ files; ignored dependency and build directories are not duplicated. The coding-agent process inherits the
227
+ connector environment in both modes. Cancellation stops the agent. The connector returns changed paths, a bounded
228
+ diff, and the exact repository ZIP; a human still performs independent attestation. Accepted work fast-forwards
229
+ into an unchanged clean connected branch, or cherry-picks the complete Goal commit range onto a clean branch that
230
+ advanced, then refreshes the workspace snapshot. Dirty or conflicting workspaces are never overwritten: the Goal
231
+ branch remains available for explicit review and merge.
232
+
233
+ During the writable implementation phase, Codex receives an authenticated EngineerOS MCP server automatically. It can list, read, create, update, reclassify, soft-delete, and materialize project artifacts into canonical Product records through the same repository boundary used by Copilot. The backend accepts those calls only while the assigned Goal is running. Read-only project prompts and the independent verification phase do not receive mutation tools.
234
+
235
+ ### Resume a failed or interrupted Goal run
236
+
237
+ Connector 0.34.0 keeps new isolated Goal worktrees inside the project at `.engineeros/goals/<goal-id>`.
238
+ Execution checkpoints live at `.engineeros/runs/<run-id>`. Start the connector with its existing pairing,
239
+ open the Goal's run panel and select **Resume run**. A disconnected running run becomes resumable after
240
+ 90 seconds without a heartbeat. Offline resume requests wait for the assigned connector to reconnect.
241
+
242
+ Resume preserves the run ID, frozen assignment, branch, files and completed implementation. It restores the
243
+ agent session when supported and reruns interrupted verification. A completed result is retained for another
244
+ upload attempt; changing the code causes it to be verified again. Existing worktrees are reused through Git's
245
+ registry, so an upgrade does not move your current work. A missing workspace or corrupt checkpoint must be
246
+ restored before resuming. Submitted results and final acceptance receipts retain their existing review flow.
247
+
248
+ ## Local context engine
249
+
250
+ The connector keeps a local index for each workspace under `~/.engineeros/context/<connector id>/workspaces/`: file classifications, symbols, document headings, and import relationships for every safe file. Separating indexes by resolved workspace keeps the source checkout and concurrent Goal worktrees from replacing one another. An index is built at onboarding, refreshed incrementally from file digests when EngineerOS triggers a workspace refresh, and re-checked before every assignment. Symbols in Python, JavaScript, TypeScript, Go, Java, Rust, Ruby and PHP come from tree-sitter syntax trees, using grammars shipped with the connector, so methods inside classes are indexed and `engineeros_read_symbol` returns exactly one declaration; other languages use line patterns.
251
+
252
+ Before a workspace assessment stage runs, the connector also extracts repository facts from that index without a model: routes and pages, data models and migrations, integrations declared in dependency manifests, configuration keys, delivery and runtime files, and files that check authentication. They are cached per commit in `.engineeros/context/repository-facts.json`. Each stage receives only a bounded slice of the facts it starts from, with no full copy for an agent to read at once, and the capability catalog receives draft capability areas with their locations, so stages confirm a known inventory instead of rediscovering it.
253
+
254
+ Every assignment prompt arrives with a bounded, task-ranked Markdown working set. It names the most relevant paths, symbol and heading locations, local dependencies, direct consumers, and candidate tests, followed by a pointer to the durable source map at `.engineeros/context/source-map.md`. The connector ranks from the assignment's focused context query, frozen Goal packet, assessment stage identity, or current project request as appropriate. It never pastes source-file contents into the prompt; the Agent reads deeper through the source map, the listed files, assessment sections, ordinary file tools, or the attached `engineeros_*` MCP tools. Ranking is structural and lexical, using indexed paths, symbols, summaries, and imports; it does not generate or store embeddings.
255
+
256
+ Context preparation is a launch prerequisite for every role. The connector refreshes the correct workspace index, verifies that the source map exists, and stops before starting an agent with an actionable error when pairing identity, indexing, or map generation is unavailable. Resumed project sessions also receive a bounded `Session Memory` digest of relevant earlier turns in the same session, kept under `~/.engineeros/context/<connector id>/sessions/`, so follow-up prompts build on prior conclusions instead of re-deriving them. Entries carry a derived kind (fix, decision, change, or conclusion), and cross-session recall is stamped with its source session and last-active time.
257
+
258
+ Every direct Codex assignment — project prompt, assessment, Goal implementation, and independent verification — receives the local read-only context MCP server with `engineeros_search`, `engineeros_outline`, `engineeros_read_symbol`, `engineeros_similar`, `engineeros_blast_radius`, and `engineeros_recall`. Registry-backed ACP adapters receive the same runtime-workspace server through `session/new` and `session/load`. Only a writable Goal implementation receives the authenticated EngineerOS artifact MCP server; project prompts, assessments, and verification never receive mutation tools. Custom ACP commands receive no injected servers because they have no registry MCP contract.
259
+
260
+ After Goal implementation commits its isolated worktree change, the connector rebuilds context from that exact post-commit workspace before starting the independent verifier. Verification therefore receives the current task-ranked working set plus a bounded `Change Impact` section naming changed files, direct importers, and candidate tests rather than relying on the pre-change index. `engineeros_similar` helps the Agent extend existing functions, classes, and types instead of duplicating them. Stored symbol outlines omit literal constant values, MCP search responses are capped at one hundred files, and the index, source map, prompt context, and session memory remain on the local computer.
261
+
262
+ ## Local design artifacts
263
+
264
+ Connector 0.28.0 synchronizes persisted design records into
265
+ `.engineeros/design/projects/<project-id>/`, with `INDEX.md` linking the named
266
+ Markdown artifacts and their current review status. Sync runs on connection,
267
+ every ten seconds, and before project prompts and Goal execution. Goal worktrees
268
+ receive their own copy. Assignments point the agent to the index explicitly.
269
+
270
+ The database remains authoritative. Confirm edits through EngineerOS Copilot;
271
+ local changes are overwritten by the next successful sync. Renames and deletions
272
+ remove outdated Markdown files from this managed directory. An offline connector
273
+ refreshes when it reconnects. The backend must provide the matching design-context
274
+ endpoint; sync failures are reported and block new agent tasks from using stale context.
275
+
276
+ ## Autonomous work scan
277
+
278
+ Connector 1.23.0 can tell EngineerOS what this workspace should deliver next. It scans only when the
279
+ autonomy policy for the project asks it to: EngineerOS answers each five-minute self-check with whether
280
+ it wants a scan, and an autonomy policy that is off, out of budget or already running a Goal never
281
+ causes one. Turn it on, and off again, in **Project steering -> Autonomy**.
282
+
283
+ When a scan is requested, the connector waits until nothing else is running here — no assessment stage,
284
+ no prompt, no local Goal job — and then reads evidence that is already on disk: the synced design index,
285
+ the local assessment, and Goal runs that stopped. One read-only agent turn ranks that evidence and names
286
+ at most five capabilities worth starting, each with its reason. The turn has no write, command or tool
287
+ access, and the scan repeats at most every thirty minutes.
288
+
289
+ The connector never starts work of its own. Candidates are reported as evidence; EngineerOS re-validates
290
+ every one against its own records, applies the policy, budget and concurrency limits, and decides whether
291
+ to dispatch a Goal. A candidate naming a capability EngineerOS never published to this workspace is
292
+ discarded before it is sent. A failing scan backs off like other maintenance and names itself in the
293
+ self-check.
294
+
295
+ Each report comes back with what EngineerOS turned down. The next scan asks for different work and drops
296
+ a refused candidate even if the agent repeats it. When neither the workspace nor those refusals have
297
+ changed, the shortlist is repeated from memory and no agent turn is spent at all, so an idle workspace
298
+ costs nothing to keep watching.
299
+
300
+ ## Run spend ceiling
301
+
302
+ Repair cycles bound how often work is retried, and a run that goes quiet is stopped after ten minutes.
303
+ Neither bounds a run that keeps producing output while spending, which matters once EngineerOS starts
304
+ Goals without anyone watching. Every delivery run therefore stops at **5,000,000 tokens**, counted across
305
+ resumes from the saved run checkpoint and stated to the agent in its execution rules.
306
+
307
+ Reaching the ceiling is a stopping point, not a crash: the committed changes and unresolved findings are
308
+ handed over for review exactly as they are when the repair budget runs out, and the spend already made is
309
+ reported to EngineerOS. Set `ENGINEEROS_RUN_TOKEN_CEILING` to a different whole number of tokens to raise
310
+ or lower it for this machine.
311
+
312
+ ## Requirements
313
+
314
+ Node.js 22 or newer, Git, and an authenticated agent. `npx` distributions use npm, `uvx` distributions require uv, and binary archives require `tar` (`unzip` for ZIP files on Linux). Registry agents report their own authentication prerequisites when they start.
315
+
316
+ ## Execution profiles
317
+
318
+ EngineerOS can set a workspace default model and reasoning effort, then override either value for an individual Goal. The same workspace default is used for assessments, Copilot, and generated artifacts. The connector passes the resolved values to Codex CLI and reports unsupported profiles instead of silently ignoring them.
319
+
320
+ Codex connectors advertise `gpt-5.6-sol` and `gpt-5.6-terra` by default. Override the choices shown in EngineerOS before starting the connector:
321
+
322
+ ```sh
323
+ ENGINEEROS_AGENT_MODELS="model-a,model-b" npx @engineeros/connector start --workspace .
324
+ ```
325
+
326
+ ## Codex CLI compatibility
327
+
328
+ The connector prints the exact Codex CLI version it will use before connecting. If the
329
+ configured model requires a newer CLI, update Codex and restart the connector:
330
+
331
+ ```sh
332
+ npm install -g @openai/codex@latest
333
+ codex --version
334
+ npx @engineeros/connector start --workspace .
335
+ ```
336
+
337
+ ## Supervisor recovery
338
+
339
+ The workspace runner monitors worker health separately from progress reporting. Continuous reporting failures pause coding after one minute; missing worker health is detected after ninety seconds. Recovery preserves the sandbox and checkpoint. It allows one restart per failure category and at most two per run, with a cooldown and storage check before restarting.
340
+
341
+ Unknown runtime failures may use one read-only LLM diagnosis per run through the configured agent, with a two-minute deadline. Known filesystem and network faults do not call an LLM. Diagnosis recommends retrying the checkpoint or a manual fix; it does not execute generated commands or modify the connector. Repeated failures stop automatic recovery. Inspect `runner status` and `.engineeros/runner/recovery/<run-id>.json`, fix the reported cause, then explicitly resume the existing run. Recovery budgets are retained.
342
+
343
+ Verification results are cached per commit and role. Completed checks are reused. An interrupted check requires inspection before a new revision; it is not automatically billed again. Existing workers must load the new connector code before these protections apply.
344
+
345
+ ## Optional tool and plugin inventory
346
+
347
+ Connector 1.7 advertises a curated candidate catalog alongside the operator-managed inventory. The catalog covers code intelligence, design, work management, source control, documentation, research, API development, browser testing, quality and security, data, infrastructure, observability and development environments. Candidate entries are metadata only: they are not installed, authenticated, admitted, started or exposed to coding agents.
348
+
349
+ The catalog includes CodeGraph, Serena, JetBrains IDE MCP, ast-grep, Figma, Storybook, Miro, Lucid, Linear, monday.com, Atlassian Rovo, YouTrack, Notion, Slack, GitHub, GitLab, Context7, Postman, Exa, Tavily, Firecrawl, Perplexity, Playwright, Chrome DevTools, BrowserStack, Semgrep, SonarQube, Snyk, Gitleaks, Trivy, PostgreSQL MCP, Supabase, Terraform, AWS, Azure, Cloudflare, Vercel, Sentry, Grafana, Datadog, PagerDuty, Renovate, Dev Container CLI and Docker MCP Gateway. Each entry records its category, selection group, activation condition, eligible workflow profiles, provenance and default policy. Overlapping selection groups are alternatives, not permission to load every provider.
350
+
351
+ Inspect the catalog and locally registered providers without starting software:
352
+
353
+ ```sh
354
+ engineeros-connector tools list --workspace PATH
355
+ engineeros-connector tools register /absolute/path/manifest.json --workspace PATH
356
+ engineeros-connector tools disable PROVIDER_ID --workspace PATH
357
+ engineeros-connector tools disable all --workspace PATH
358
+ engineeros-connector tools enable PROVIDER_ID --workspace PATH
359
+ engineeros-connector tools remove PROVIDER_ID --workspace PATH
360
+ engineeros-connector tools sign-in PROVIDER_ID --workspace PATH
361
+ engineeros-connector tools auth-status PROVIDER_ID --workspace PATH
362
+ engineeros-connector tools sign-out PROVIDER_ID --workspace PATH
363
+ ```
364
+
365
+ After pairing connector 1.8 or newer, open **Project → Steering → Local workspace → Tools and plugins** to search the catalog and control registered providers. The web UI can enable, disable and remove registrations through the authenticated connector session. Enabling and removal require confirmation. Registration remains local because its evaluated manifest contains machine paths and integrity metadata that are never advertised to EngineerOS.
366
+
367
+ Use `enable all` to clear the global disable. Registration never installs packages or executes a provider. Replacing a pin requires explicit removal and registration. Registry files live beside the user-owned connector configuration as `<workspace-key>.tools.json`, outside the repository. The connected workspace displays their inventory, refreshed through authenticated heartbeats. Stop any abandoned operator update before removing its `.tools.json.lock` file.
368
+
369
+ Manifests are strict internal JSON configuration with these required fields:
370
+
371
+ | Field | Required value |
372
+ | --- | --- |
373
+ | `id`, `name`, `provider`, `capability_class` | Stable lowercase ID, display labels and `tool`, `skill` or `agent`. |
374
+ | `source`, `version`, `license` | Credential-free HTTPS source, exact semantic version and license. No `latest` or version range. |
375
+ | `launch` | For `stdio` or skill `file`: `transport`, absolute `entrypoint`, absolute `package_json` and lowercase `sha256` of the entrypoint. For `https`: `transport` and credential-free `endpoint`. No commands, arguments or environment values are accepted. |
376
+ | `platforms` | Array containing supported `win32`, `linux` and/or `darwin`. |
377
+ | `permissions` | `workspace` (`none`, `read`, `write`), `process` boolean, `network` HTTPS URL array, `browser` (`none`, `isolated`), `secrets` reference-name array and `external_mutations` boolean. These record requests, not runtime grants. |
378
+ | `authentication` | `none`, operator-owned `external` instructions, or `oauth` with exact scopes and either dynamic client registration or a provider-issued public client ID. Secret values are never accepted in a manifest. Older manifests without this field remain loadable but report setup required for HTTPS or secret-bearing providers. |
379
+ | `profiles` | Array of `discovery`, `research`, `implementation`, `verification`, `handover`. |
380
+ | `tasks`, `exclusions` | Arrays of lowercase task IDs; at least one eligible task. |
381
+ | `tools` | Array of objects with `name` (`provider-id:operation_name`), concise `description`, and `response_mode` (`summary` or `reference`). |
382
+ | `policy` | `approval_required: true`, `timeout_ms` from 100 to 30000, `retry_limit` 0 or 1. Reserved for bounded provider adapters; inspection executes nothing. |
383
+ | `evidence` | `metadata-only`. |
384
+ | `evaluation` | `status` (`experimental` or `standard`) and a real evidence `reference`. Standard status requires completed comparative evaluation. |
385
+
384
386
  At most 16 providers may be registered per workspace even though the read-only catalog is larger. Local files must be regular files (resolve symlinks before registration). Inspection compares installed package metadata and entrypoint bytes; it does not verify the entire dependency tree. Local version/hash mismatches and unavailable files report preparation actions. Registered HTTPS providers may use connector-managed OAuth: open **Tools and plugins**, choose **Sign in**, and complete consent in the browser opened on the connected machine. The connector follows MCP authorization discovery, uses PKCE with a loopback callback, and advertises only status, scopes and expiry. Windows protects the credential payload with current-user DPAPI outside the repository; unsupported platform keychains fail closed. Sign out deletes the local credential but does not remove the provider registration. MCP protocol, runtime and index health remain unchecked until a provider pilot implements them. Every entry remains execution-disabled, even if authentication succeeds. Launch paths, endpoints, tokens, authorization codes and raw file errors are excluded from advertised inventory. Do not put secrets in labels, URLs, descriptions or evidence references.