@nail00749/agent-gvozd 0.1.1 → 0.1.2
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 +172 -11
- package/defaults/agents/back-deep.jsonc +3 -1
- package/defaults/agents/back-fast.jsonc +2 -1
- package/defaults/agents/devops.jsonc +2 -0
- package/defaults/agents/front-deep.jsonc +3 -1
- package/defaults/agents/front-fast.jsonc +2 -1
- package/defaults/agents/master.jsonc +2 -1
- package/defaults/agents/planner.jsonc +2 -1
- package/defaults/agents/review-deep.jsonc +2 -1
- package/defaults/agents/review-fast.jsonc +2 -1
- package/defaults/default.jsonc +2 -1
- package/defaults/prompts/back-deep.md +1 -1
- package/defaults/prompts/devops.md +1 -1
- package/defaults/prompts/explorer.md +1 -1
- package/defaults/prompts/front-deep.md +1 -1
- package/defaults/prompts/master.md +2 -2
- package/dist/cli.js +991 -255
- package/dist/index.js +544 -177
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Gvozd installs one permission-aware agent team globally, so every OpenCode
|
|
4
4
|
project can use it without copying plugin or agent files into the repository.
|
|
5
|
-
|
|
5
|
+
Release `0.1.2` targets OpenCode V2 `0.0.0-beta-19425` exactly.
|
|
6
6
|
|
|
7
7
|
## Global setup
|
|
8
8
|
|
|
@@ -26,8 +26,9 @@ OpenCode first if the desired provider is absent from `opencode models`.
|
|
|
26
26
|
|
|
27
27
|
For a deterministic unattended rerun, use `gvozd setup --yes`. It retains a
|
|
28
28
|
valid existing profile, or selects the built-in OpenAI preset only when Luna,
|
|
29
|
-
Sol, and Codex Spark are all available.
|
|
30
|
-
|
|
29
|
+
Sol, and Codex Spark are all available. Setup registers the exact current
|
|
30
|
+
release (`@nail00749/agent-gvozd@0.1.2`), not a version range. Rerunning setup
|
|
31
|
+
after updating the CLI is the supported v0.1 upgrade path.
|
|
31
32
|
|
|
32
33
|
Inspect an installation at any time:
|
|
33
34
|
|
|
@@ -37,9 +38,11 @@ gvozd doctor --json
|
|
|
37
38
|
```
|
|
38
39
|
|
|
39
40
|
Setup owns `<OpenCode config>/gvozd/config.jsonc`, its generated schema, and
|
|
40
|
-
the Gvozd Markdown files under `<OpenCode config>/agents`.
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
the Gvozd Markdown files under `<OpenCode config>/agents`. During upgrades it
|
|
42
|
+
removes disabled or obsolete agents only when they are regular files with the
|
|
43
|
+
exact Gvozd ownership marker. Unmanaged files are never removed or overwritten.
|
|
44
|
+
Unrelated JSONC fields and comments are preserved. Project overrides under
|
|
45
|
+
`docs/.gvozd` still take precedence.
|
|
43
46
|
|
|
44
47
|
The installed team contains:
|
|
45
48
|
|
|
@@ -72,10 +75,90 @@ automatically.
|
|
|
72
75
|
|
|
73
76
|
Run `bun run sync --check` to report drift without changing files. The command
|
|
74
77
|
prints a diff before replacing or removing an existing generated agent and
|
|
75
|
-
never overwrites an agent file it does not own.
|
|
78
|
+
never overwrites an agent file it does not own. In `0.1.2`, check mode also
|
|
79
|
+
reports a missing project template or schema and stale managed schema content;
|
|
80
|
+
it performs no migration or directory creation. A markerless legacy schema is
|
|
81
|
+
migrated only when it is semantically identical to the known generated schema.
|
|
82
|
+
User-owned project configuration is not replaced. This legacy check resolves
|
|
83
|
+
the normal user-global OpenCode configuration. `bun run verify:sync` is the
|
|
84
|
+
deterministic release gate: it uses an empty temporary config root, checks the
|
|
85
|
+
repository, and removes the temporary root afterward.
|
|
76
86
|
|
|
77
87
|
Run `bun test`, `bun run typecheck`, and `bun run build` for local verification.
|
|
78
88
|
|
|
89
|
+
## Release verification
|
|
90
|
+
|
|
91
|
+
The regular CI workflow runs on Ubuntu and macOS with a frozen Bun install. It
|
|
92
|
+
runs tests, TypeScript checking (including `scripts/**/*.ts`), the build,
|
|
93
|
+
the deterministic `verify:sync` gate, and package verification. Package
|
|
94
|
+
verification installs the actual npm tarball outside the workspace, imports
|
|
95
|
+
its plugin entrypoint, and runs its Node CLI without depending on a system
|
|
96
|
+
`tar` command.
|
|
97
|
+
|
|
98
|
+
Live OpenCode compatibility is opt-in through the `Live OpenCode
|
|
99
|
+
compatibility` `workflow_dispatch`. It accepts no caller-controlled paths or
|
|
100
|
+
package specifications and is protected by the `gvozd-live` GitHub environment.
|
|
101
|
+
Provision these protected environment variables:
|
|
102
|
+
|
|
103
|
+
- `GVOZD_LIVE_OPENCODE`: absolute path to the pinned OpenCode executable;
|
|
104
|
+
- `GVOZD_LIVE_OPENCODE_SHA256`: its allowlisted SHA-256;
|
|
105
|
+
- `GVOZD_LIVE_HOST_DRIVER`: absolute path to the trusted host scenario driver;
|
|
106
|
+
- `GVOZD_LIVE_HOST_DRIVER_SHA256`: its allowlisted SHA-256;
|
|
107
|
+
- `GVOZD_LIVE_SAFE_PATH`: the complete child-process `PATH`, containing only
|
|
108
|
+
provisioner-controlled tool directories required by OpenCode and the driver.
|
|
109
|
+
|
|
110
|
+
These values come only from protected environment variables; the dispatch has
|
|
111
|
+
no path, digest, or package inputs. Every `GVOZD_LIVE_SAFE_PATH` entry must be
|
|
112
|
+
nonempty, absolute, existing, canonical, and a non-symlink directory. It must
|
|
113
|
+
not be group- or world-writable, and the same checks apply to its directory
|
|
114
|
+
chain. On POSIX, every directory owner must differ from the non-root runner
|
|
115
|
+
account and the runner must not have write access. Child processes receive
|
|
116
|
+
only this validated value, never the runner's ambient `PATH`.
|
|
117
|
+
|
|
118
|
+
The self-hosted runner must carry the `gvozd-live` and `ephemeral` labels and
|
|
119
|
+
must be provisioned as a one-shot runner that is destroyed after the job. A
|
|
120
|
+
runner label is only routing metadata; GitHub does not technically guarantee
|
|
121
|
+
ephemerality from that label. Environment reviewers must verify the selected
|
|
122
|
+
ref and runner provisioning before approval.
|
|
123
|
+
|
|
124
|
+
Provision the OpenCode executable and host driver outside runner-writable
|
|
125
|
+
storage. They must be regular canonical non-symlink files, executable, owned
|
|
126
|
+
by root or another trusted provisioning account rather than the workflow
|
|
127
|
+
runner, and have no owner, group, or world write bits (for example mode
|
|
128
|
+
`0555`). Every parent directory must likewise be provisioner-owned and not
|
|
129
|
+
runner-writable. A POSIX runner operating as root is rejected. The gate records
|
|
130
|
+
their file identity and exact allowlisted digest, then re-stats and re-hashes
|
|
131
|
+
each file immediately before every corresponding spawn; replacement or
|
|
132
|
+
metadata change hard-fails.
|
|
133
|
+
|
|
134
|
+
The workflow builds the checkout, creates its own local npm tarball, computes
|
|
135
|
+
its SHA-256, and passes only that path and digest to the gate. Arbitrary package
|
|
136
|
+
specifications are not accepted. Unlike the provisioned executables, this
|
|
137
|
+
artifact is expected to be runner-owned and may be owner-writable, while still
|
|
138
|
+
being a regular non-symlink file with no group/world write bits. Its digest is
|
|
139
|
+
a build-consistency check that detects changes after packing; it is not an
|
|
140
|
+
external provenance assertion. Review and protected checkout controls remain
|
|
141
|
+
the source-provenance boundary.
|
|
142
|
+
|
|
143
|
+
The executable must report exactly `0.0.0-beta-19425`. The gate gives child
|
|
144
|
+
processes a minimal allowlisted environment and isolated HOME, XDG config,
|
|
145
|
+
temporary, and project directories. Commands have timeouts, bounded output,
|
|
146
|
+
and redacted failure messages. The pinned CLI exposes no credential-free
|
|
147
|
+
non-interactive API that can itself prove permission-event resource mapping,
|
|
148
|
+
MCP refresh, and the complete lease lifecycle. The protected host driver must
|
|
149
|
+
run those scenarios and emit one JSON object with `pluginActivation`,
|
|
150
|
+
`projectOverride`, `editResourceMapping`, `mcpRefresh`, and `leaseLifecycle`
|
|
151
|
+
all set to `true`. Missing paths, digests, host integration, credentials, or
|
|
152
|
+
proof hard-fail the gate; they are never reported as a successful skip.
|
|
153
|
+
|
|
154
|
+
Node does not expose a portable descriptor-based `exec`, so a privileged
|
|
155
|
+
provisioner could still race the final verified pathname between revalidation
|
|
156
|
+
and spawn. That privileged-provisioner race is outside this gate's threat
|
|
157
|
+
model. Residual trust therefore remains in GitHub environment approvers,
|
|
158
|
+
one-shot runner and safe-PATH provisioning, the pinned OpenCode binary, and
|
|
159
|
+
the allowlisted host driver. The driver should use an isolated local MCP
|
|
160
|
+
fixture where possible rather than long-lived provider credentials.
|
|
161
|
+
|
|
79
162
|
## Configuration layers
|
|
80
163
|
|
|
81
164
|
Configuration is merged in this order:
|
|
@@ -87,6 +170,68 @@ Configuration is merged in this order:
|
|
|
87
170
|
Later scalar values replace earlier values. Arrays such as `models`, `skills`,
|
|
88
171
|
`mcp`, and `permissions` replace the complete earlier array.
|
|
89
172
|
|
|
173
|
+
Configuration objects are validated strictly. Unknown root, agent, and
|
|
174
|
+
permission keys are errors rather than silently ignored. Prompt paths and
|
|
175
|
+
custom agent directories must stay within the layer that declares them;
|
|
176
|
+
missing files, traversal, and symlink targets are rejected.
|
|
177
|
+
|
|
178
|
+
### Project capability trust
|
|
179
|
+
|
|
180
|
+
As a security and compatibility change in `0.1.2`, untrusted
|
|
181
|
+
repository-controlled configuration may contain only `$schema` and
|
|
182
|
+
`description` overrides for existing agents. Custom agents and all other root
|
|
183
|
+
or agent fields require explicit trust.
|
|
184
|
+
|
|
185
|
+
After reviewing the repository configuration, a user may opt in externally:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
TOKEN="$(gvozd trust-project)"
|
|
189
|
+
GVOZD_TRUST_PROJECT_CONFIG="$TOKEN" opencode2
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
The second command must start the OpenCode process with the exact token; setting
|
|
193
|
+
the variable in another process does not grant trust. `gvozd trust-project`
|
|
194
|
+
uses the current directory by default and accepts an explicit project directory.
|
|
195
|
+
It only prints the current token and does not modify files or the environment.
|
|
196
|
+
A repository cannot self-authorize by placing the token in its files.
|
|
197
|
+
|
|
198
|
+
The token is bound to the canonical project root and the reviewed project root
|
|
199
|
+
config, agent fragments, and referenced prompts. Changing any of them
|
|
200
|
+
invalidates it, and a token for one project cannot authorize another project.
|
|
201
|
+
API callers can pass the exact token as `projectTrustToken` to `loadConfig`.
|
|
202
|
+
|
|
203
|
+
### OpenCode config-root contract
|
|
204
|
+
|
|
205
|
+
`setup` and `doctor` use `opencode debug paths` as the authority for CLI writes
|
|
206
|
+
and diagnostics. Runtime/config loading resolves its root in this order:
|
|
207
|
+
|
|
208
|
+
1. an explicit `configRoot` supplied by an API caller;
|
|
209
|
+
2. `GVOZD_OPENCODE_CONFIG_ROOT`;
|
|
210
|
+
3. `XDG_CONFIG_HOME/opencode`;
|
|
211
|
+
4. `APPDATA/opencode` on Windows;
|
|
212
|
+
5. `~/.config/opencode`.
|
|
213
|
+
|
|
214
|
+
OpenCode `0.0.0-beta-19425` does not expose its config root in the plugin
|
|
215
|
+
context. The runtime therefore cannot infer a nonstandard host root from
|
|
216
|
+
`debug paths`. If Doctor reports a mismatch, set
|
|
217
|
+
`GVOZD_OPENCODE_CONFIG_ROOT` to the absolute path printed by
|
|
218
|
+
`opencode debug paths` before starting or restarting OpenCode.
|
|
219
|
+
|
|
220
|
+
The config root reported by `debug paths` must already use its canonical
|
|
221
|
+
absolute spelling. Before setup creates a lock or managed directory, every
|
|
222
|
+
existing component from the filesystem root through the nearest existing
|
|
223
|
+
ancestor is checked with `lstat`: symbolic links, non-directory ancestors, and
|
|
224
|
+
POSIX group/world-writable directories are rejected. Managed config, Gvozd,
|
|
225
|
+
agents, and lock directories additionally must be owned by and writable by the
|
|
226
|
+
current account. Known platform aliases such as macOS `/var` are not followed;
|
|
227
|
+
OpenCode must report the corresponding canonical path.
|
|
228
|
+
|
|
229
|
+
These checks prevent an unprivileged different-user path swap, but Node has no
|
|
230
|
+
portable descriptor-relative recursive mkdir/rename transaction. A
|
|
231
|
+
same-UID process that deliberately races the final validated component, or a
|
|
232
|
+
non-cooperating process that performs a final rename between validation and
|
|
233
|
+
mutation, remains outside this cooperative setup threat model.
|
|
234
|
+
|
|
90
235
|
## Cooperative file leases
|
|
91
236
|
|
|
92
237
|
Writer agents coordinate exact project files before editing them. The default
|
|
@@ -128,6 +273,15 @@ process. Unclaimed reservations expire after five minutes; active leases expire
|
|
|
128
273
|
after thirty minutes without tool activity and are released on terminal session
|
|
129
274
|
events. Separate OpenCode processes and remote hosts are not coordinated.
|
|
130
275
|
|
|
276
|
+
File ownership keys are case-insensitive by default on macOS and Windows and
|
|
277
|
+
case-sensitive on other platforms. Because the runtime cannot portably detect
|
|
278
|
+
the mounted filesystem policy, start OpenCode with
|
|
279
|
+
`GVOZD_CASE_INSENSITIVE_FILESYSTEM=0` for a case-sensitive APFS workspace, or
|
|
280
|
+
with `GVOZD_CASE_INSENSITIVE_FILESYSTEM=1` for a case-folding Linux workspace
|
|
281
|
+
such as a suitably configured casefold filesystem or CIFS mount. Only the exact
|
|
282
|
+
values `0` and `1` are accepted; any other value aborts plugin setup rather than
|
|
283
|
+
selecting an uncertain ownership policy.
|
|
284
|
+
|
|
131
285
|
An agent override can be inline:
|
|
132
286
|
|
|
133
287
|
```jsonc
|
|
@@ -172,14 +326,20 @@ exactly `context7`. Gvozd grants access to that server; it does not install or
|
|
|
172
326
|
configure it, inspect its implementation, or constrain its individual tools.
|
|
173
327
|
Operators must trust that exact server identity and its advertised tool set.
|
|
174
328
|
|
|
329
|
+
OpenCode's built-in desktop browser tools report only the `browser` permission
|
|
330
|
+
action and never request runtime approval themselves. Every built-in Gvozd agent
|
|
331
|
+
therefore ends with an explicit `browser` deny so the host hides those tools;
|
|
332
|
+
agents that need live UI evidence use the Playwright MCP server instead, where
|
|
333
|
+
Gvozd's tool-level permissions apply.
|
|
334
|
+
|
|
175
335
|
| Agents | Skills | MCP access |
|
|
176
336
|
| --- | --- | --- |
|
|
177
337
|
| `master` | none | none |
|
|
178
338
|
| `planner` | verification planning, ASCII UI review, GitNexus impact | Context7; GitNexus read-only |
|
|
179
339
|
| `back-fast` | none | Context7 |
|
|
180
|
-
| `back-deep` | GitNexus impact and refactoring | Context7; GitNexus except group sync |
|
|
340
|
+
| `back-deep` | GitNexus impact and refactoring | Context7; GitNexus except rename and group sync |
|
|
181
341
|
| `front-fast` | modern web and interface polish | Context7; Playwright observation; interactions ask |
|
|
182
|
-
| `front-deep` | frontend/layout skills plus GitNexus impact/refactoring | Context7; GitNexus except group sync; Playwright interactions ask |
|
|
342
|
+
| `front-deep` | frontend/layout skills plus GitNexus impact/refactoring | Context7; GitNexus except rename and group sync; Playwright interactions ask |
|
|
183
343
|
| `review-fast` | code review | Context7; read-only GitLab without CI variables |
|
|
184
344
|
| `review-deep` | code review and GitNexus review/impact | Context7; read-only GitLab and GitNexus |
|
|
185
345
|
| `researcher` | none | Context7 |
|
|
@@ -227,8 +387,9 @@ and shell access is denied.
|
|
|
227
387
|
Verifier uses `openai/gpt-5.6-luna` with `openai/gpt-5.6-sol` as fallback.
|
|
228
388
|
Debugger, Security, and DevOps use the reverse order. Verifier, Debugger, and
|
|
229
389
|
Security are read-only and require approval for shell commands. DevOps can edit
|
|
230
|
-
common CI, Docker, and infrastructure paths; other edits
|
|
231
|
-
external mutation
|
|
390
|
+
common CI, Docker, and infrastructure paths; other edits require approval, shell
|
|
391
|
+
is denied for the writer role, and every external mutation requires explicit
|
|
392
|
+
task authorization.
|
|
232
393
|
|
|
233
394
|
This pre-release change replaces the earlier single-tier agent IDs. Existing
|
|
234
395
|
global or project overrides must be split explicitly:
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
"permissions": [
|
|
16
16
|
{ "action": "subagent", "resource": "*", "effect": "deny" },
|
|
17
17
|
{ "action": "gitnexus_*", "resource": "*", "effect": "allow" },
|
|
18
|
-
{ "action": "
|
|
18
|
+
{ "action": "gitnexus_rename", "resource": "*", "effect": "deny" },
|
|
19
|
+
{ "action": "gitnexus_group_sync", "resource": "*", "effect": "deny" },
|
|
20
|
+
{ "action": "browser", "resource": "*", "effect": "deny" }
|
|
19
21
|
]
|
|
20
22
|
}
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
{ "action": "edit", "resource": "Dockerfile.*", "effect": "allow" },
|
|
22
22
|
{ "action": "edit", "resource": "docker-compose*.yml", "effect": "allow" },
|
|
23
23
|
{ "action": "edit", "resource": "docker-compose*.yaml", "effect": "allow" },
|
|
24
|
+
{ "action": "edit", "resource": "compose.yml", "effect": "allow" },
|
|
25
|
+
{ "action": "edit", "resource": "compose.yaml", "effect": "allow" },
|
|
24
26
|
{ "action": "edit", "resource": ".github/workflows/*", "effect": "allow" },
|
|
25
27
|
{ "action": "edit", "resource": ".gitlab-ci.yml", "effect": "allow" },
|
|
26
28
|
{ "action": "edit", "resource": "deploy/*", "effect": "allow" },
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"permissions": [
|
|
19
19
|
{ "action": "subagent", "resource": "*", "effect": "deny" },
|
|
20
20
|
{ "action": "gitnexus_*", "resource": "*", "effect": "allow" },
|
|
21
|
+
{ "action": "gitnexus_rename", "resource": "*", "effect": "deny" },
|
|
21
22
|
{ "action": "gitnexus_group_sync", "resource": "*", "effect": "deny" },
|
|
22
23
|
{ "action": "playwright_*", "resource": "*", "effect": "ask" },
|
|
23
24
|
{ "action": "playwright_browser_get_config", "resource": "*", "effect": "allow" },
|
|
@@ -29,6 +30,7 @@
|
|
|
29
30
|
{ "action": "playwright_browser_find", "resource": "*", "effect": "allow" },
|
|
30
31
|
{ "action": "playwright_browser_generate_locator", "resource": "*", "effect": "allow" },
|
|
31
32
|
{ "action": "playwright_browser_verify_*", "resource": "*", "effect": "allow" },
|
|
32
|
-
{ "action": "playwright_browser_run_code_unsafe", "resource": "*", "effect": "deny" }
|
|
33
|
+
{ "action": "playwright_browser_run_code_unsafe", "resource": "*", "effect": "deny" },
|
|
34
|
+
{ "action": "browser", "resource": "*", "effect": "deny" }
|
|
33
35
|
]
|
|
34
36
|
}
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
{ "action": "playwright_browser_find", "resource": "*", "effect": "allow" },
|
|
25
25
|
{ "action": "playwright_browser_generate_locator", "resource": "*", "effect": "allow" },
|
|
26
26
|
{ "action": "playwright_browser_verify_*", "resource": "*", "effect": "allow" },
|
|
27
|
-
{ "action": "playwright_browser_run_code_unsafe", "resource": "*", "effect": "deny" }
|
|
27
|
+
{ "action": "playwright_browser_run_code_unsafe", "resource": "*", "effect": "deny" },
|
|
28
|
+
{ "action": "browser", "resource": "*", "effect": "deny" }
|
|
28
29
|
]
|
|
29
30
|
}
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
{ "action": "subagent", "resource": "verifier", "effect": "allow" },
|
|
26
26
|
{ "action": "subagent", "resource": "debugger", "effect": "allow" },
|
|
27
27
|
{ "action": "subagent", "resource": "security", "effect": "allow" },
|
|
28
|
-
{ "action": "subagent", "resource": "devops", "effect": "allow" }
|
|
28
|
+
{ "action": "subagent", "resource": "devops", "effect": "allow" },
|
|
29
|
+
{ "action": "browser", "resource": "*", "effect": "deny" }
|
|
29
30
|
]
|
|
30
31
|
}
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
{ "action": "shell", "resource": "*", "effect": "ask" },
|
|
20
20
|
{ "action": "gitnexus_*", "resource": "*", "effect": "allow" },
|
|
21
21
|
{ "action": "gitnexus_rename", "resource": "*", "effect": "deny" },
|
|
22
|
-
{ "action": "gitnexus_group_sync", "resource": "*", "effect": "deny" }
|
|
22
|
+
{ "action": "gitnexus_group_sync", "resource": "*", "effect": "deny" },
|
|
23
|
+
{ "action": "browser", "resource": "*", "effect": "deny" }
|
|
23
24
|
]
|
|
24
25
|
}
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
{ "action": "gitlab_get_project_variable", "resource": "*", "effect": "deny" },
|
|
29
29
|
{ "action": "gitlab_get_group_variable", "resource": "*", "effect": "deny" },
|
|
30
30
|
{ "action": "gitlab_list_project_variables", "resource": "*", "effect": "deny" },
|
|
31
|
-
{ "action": "gitlab_list_group_variables", "resource": "*", "effect": "deny" }
|
|
31
|
+
{ "action": "gitlab_list_group_variables", "resource": "*", "effect": "deny" },
|
|
32
|
+
{ "action": "browser", "resource": "*", "effect": "deny" }
|
|
32
33
|
]
|
|
33
34
|
}
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
{ "action": "gitlab_get_project_variable", "resource": "*", "effect": "deny" },
|
|
25
25
|
{ "action": "gitlab_get_group_variable", "resource": "*", "effect": "deny" },
|
|
26
26
|
{ "action": "gitlab_list_project_variables", "resource": "*", "effect": "deny" },
|
|
27
|
-
{ "action": "gitlab_list_group_variables", "resource": "*", "effect": "deny" }
|
|
27
|
+
{ "action": "gitlab_list_group_variables", "resource": "*", "effect": "deny" },
|
|
28
|
+
{ "action": "browser", "resource": "*", "effect": "deny" }
|
|
28
29
|
]
|
|
29
30
|
}
|
package/defaults/default.jsonc
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
// Built-in baseline.
|
|
2
|
+
// Built-in baseline. Project overrides beyond $schema and descriptions of
|
|
3
|
+
// existing agents require an external, content-bound project trust token.
|
|
3
4
|
"defaultAgent": "master",
|
|
4
5
|
"agents": {}
|
|
5
6
|
}
|
|
@@ -4,4 +4,4 @@ Before the first file mutation, call `gvozd_claim` with the `leaseId` supplied b
|
|
|
4
4
|
|
|
5
5
|
Pay particular attention to migrations, concurrency, authentication, authorization, external integrations, failure handling, and data integrity when they are in scope. Report the changed files, key decisions, concrete verification evidence, and remaining uncertainty.
|
|
6
6
|
|
|
7
|
-
Use GitNexus for cross-module impact
|
|
7
|
+
Use GitNexus for cross-module impact and refactoring analysis when the graph is current and materially useful; the GitNexus rename tool is unavailable, so apply renames through structured edits inside the leased files. Source and runtime evidence remain authoritative.
|
|
@@ -2,6 +2,6 @@ You are DevOps. Implement focused CI, Docker, infrastructure, deployment, and re
|
|
|
2
2
|
|
|
3
3
|
Before the first file mutation, call `gvozd_claim` with the `leaseId` supplied by Master. Modify only the exact leased files and use structured mutation tools; shell is unavailable while acting as a writer. If the task has no lease ID or requires another file, stop before changing it and report the exact missing path to Master for scope extension.
|
|
4
4
|
|
|
5
|
-
Modify only the assigned infrastructure scope and do not delegate work.
|
|
5
|
+
Modify only the assigned infrastructure scope and do not delegate work. Shell is denied while you act as a writer, so do not attempt shell commands; report the exact commands that still need to run so Master can route them to Verifier or the user after the leases are released. Never deploy, publish, push, rotate secrets, delete resources, or mutate an external environment unless the delegated request explicitly authorizes that exact action. Report changed files, observed state, commands that were not run, and remaining deployment uncertainty.
|
|
6
6
|
|
|
7
7
|
GitLab reads and CI validation are available. Other GitLab actions require approval and exact task authorization; CI variables remain unavailable.
|
|
@@ -2,4 +2,4 @@ You are Explorer. Find the files, symbols, dependencies, and execution paths rel
|
|
|
2
2
|
|
|
3
3
|
Do not modify files, run shell commands, browse the internet, or delegate work. Stop when the requested code location or flow is established; unresolved architecture decisions belong to Master.
|
|
4
4
|
|
|
5
|
-
Use GitNexus only when the correct checkout has a current index and graph evidence materially improves the answer;
|
|
5
|
+
Use GitNexus only when the correct checkout has a current index and graph evidence materially improves the answer; a graph result proves nothing beyond the indexed snapshot.
|
|
@@ -4,4 +4,4 @@ Before the first file mutation, call `gvozd_claim` with the `leaseId` supplied b
|
|
|
4
4
|
|
|
5
5
|
Resolve difficult interaction and integration details within the assigned architecture. Report the changed files, key decisions, concrete verification evidence, and remaining uncertainty.
|
|
6
6
|
|
|
7
|
-
Use GitNexus only for material cross-module impact
|
|
7
|
+
Use GitNexus only for material cross-module impact; its rename tool is unavailable, so apply renames through structured edits inside the leased files. Use the supplied web and interface skills when their trigger applies. Use ASCII layout comparison only when an unresolved layout choice materially changes navigation, information hierarchy, or the user journey. Playwright observation is available for UI evidence; interactive browser actions require approval.
|
|
@@ -12,10 +12,10 @@ If backend and frontend scopes are independent, they may be delegated separately
|
|
|
12
12
|
|
|
13
13
|
Before delegating work to more than one writer, use Explorer to identify the exact existing and planned files for each independent work package. Reserve each non-overlapping exact file set with `gvozd_lease` using operation `reserve`, then include the returned `leaseId` in that writer's task. If reservation reports an overlap, change the split or serialize the work; never dispatch overlapping writers.
|
|
14
14
|
|
|
15
|
-
Every writer, including Master when editing directly, needs a reserved and claimed lease. If a writer reports that another file is required, use `gvozd_lease` operation `extend` only after checking the added file does not conflict. Release abandoned reservations explicitly.
|
|
15
|
+
Every writer, including Master when editing directly, needs a reserved and claimed lease. If a writer reports that another file is required, use `gvozd_lease` operation `extend` only after checking the added file does not conflict. Release abandoned reservations explicitly. Before sending work to Verifier or asking another agent to run approval-gated shell commands, check with `gvozd_lease` operation `status` that every writer lease has been released; active writer leases pause approval-gated shell work, so wait or release first.
|
|
16
16
|
|
|
17
17
|
Use Researcher for current external information that requires internet sources. Use Explorer for focused, read-only discovery of files, symbols, dependencies, and execution paths in the local workspace. Use Git for repository status, history, diffs, branches, staging, commits, and other explicitly authorized Git operations. Use Docs for focused documentation, examples, and migration notes. Do not delegate a task merely to restate work that is already clear from the current context.
|
|
18
18
|
|
|
19
19
|
Use Verifier after implementation when independent runtime, build, typecheck, or manual scenario evidence is needed. Use Debugger when a failure is unclear and the root cause must be established before choosing a fix. Use Security for an independent security-focused review when authentication, authorization, secrets, untrusted input, external requests, data exposure, or another trust boundary is material. Use DevOps for CI, Docker, infrastructure, deployment, and release configuration; keep deployment and other external mutations subject to explicit user authorization.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
Write only the narrowest regression tests when tests are explicitly required by the task, its acceptance criteria, or CI/release verification. Otherwise prefer direct typechecking, builds, runtime smoke checks, and manual scenarios; do not expand test scope without user agreement.
|