@nail00749/agent-gvozd 0.1.0

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.
Files changed (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/defaults/agents/back-deep.jsonc +20 -0
  4. package/defaults/agents/back-fast.jsonc +15 -0
  5. package/defaults/agents/debugger.jsonc +37 -0
  6. package/defaults/agents/devops.jsonc +42 -0
  7. package/defaults/agents/docs.jsonc +22 -0
  8. package/defaults/agents/explorer.jsonc +23 -0
  9. package/defaults/agents/front-deep.jsonc +34 -0
  10. package/defaults/agents/front-fast.jsonc +29 -0
  11. package/defaults/agents/git.jsonc +50 -0
  12. package/defaults/agents/master.jsonc +30 -0
  13. package/defaults/agents/planner.jsonc +24 -0
  14. package/defaults/agents/researcher.jsonc +17 -0
  15. package/defaults/agents/review-deep.jsonc +33 -0
  16. package/defaults/agents/review-fast.jsonc +29 -0
  17. package/defaults/agents/security.jsonc +46 -0
  18. package/defaults/agents/verifier.jsonc +35 -0
  19. package/defaults/default.jsonc +5 -0
  20. package/defaults/prompts/back-deep.md +7 -0
  21. package/defaults/prompts/back-fast.md +5 -0
  22. package/defaults/prompts/debugger.md +5 -0
  23. package/defaults/prompts/devops.md +7 -0
  24. package/defaults/prompts/docs.md +5 -0
  25. package/defaults/prompts/explorer.md +5 -0
  26. package/defaults/prompts/front-deep.md +7 -0
  27. package/defaults/prompts/front-fast.md +7 -0
  28. package/defaults/prompts/git.md +5 -0
  29. package/defaults/prompts/master.md +21 -0
  30. package/defaults/prompts/planner.md +1 -0
  31. package/defaults/prompts/researcher.md +3 -0
  32. package/defaults/prompts/review-deep.md +5 -0
  33. package/defaults/prompts/review-fast.md +5 -0
  34. package/defaults/prompts/security.md +5 -0
  35. package/defaults/prompts/verifier.md +5 -0
  36. package/defaults/schema.json +65 -0
  37. package/dist/cli.js +7705 -0
  38. package/dist/index.js +6320 -0
  39. package/package.json +54 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 nail00749
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,233 @@
1
+ # Gvozd for OpenCode V2
2
+
3
+ Gvozd installs one permission-aware agent team globally, so every OpenCode
4
+ project can use it without copying plugin or agent files into the repository.
5
+ The first release targets OpenCode V2 `0.0.0-beta-19425` exactly.
6
+
7
+ ## Global setup
8
+
9
+ Run the guided setup once:
10
+
11
+ ```bash
12
+ npx @nail00749/agent-gvozd setup
13
+ ```
14
+
15
+ Or with Bun:
16
+
17
+ ```bash
18
+ bunx @nail00749/agent-gvozd setup
19
+ ```
20
+
21
+ The wizard discovers `opencode2` (then `opencode`), reads the live model
22
+ catalog, asks for fast and deep preferences, registers the plugin through
23
+ OpenCode, writes marker-owned global agents, restarts the service, and runs a
24
+ read-only doctor. It does not configure provider credentials. Authenticate with
25
+ OpenCode first if the desired provider is absent from `opencode models`.
26
+
27
+ For a deterministic unattended rerun, use `gvozd setup --yes`. It retains a
28
+ valid existing profile, or selects the built-in OpenAI preset only when Luna,
29
+ Sol, and Codex Spark are all available. Rerunning setup is the supported v0.1
30
+ upgrade path.
31
+
32
+ Inspect an installation at any time:
33
+
34
+ ```bash
35
+ gvozd doctor
36
+ gvozd doctor --json
37
+ ```
38
+
39
+ Setup owns `<OpenCode config>/gvozd/config.jsonc`, its generated schema, and
40
+ the Gvozd Markdown files under `<OpenCode config>/agents`. It refuses to
41
+ overwrite unmanaged agent or schema files and preserves unrelated JSONC fields
42
+ and comments. Project overrides under `docs/.gvozd` still take precedence.
43
+
44
+ The installed team contains:
45
+
46
+ - `master` — primary coordinator
47
+ - `planner` — read-only planning subagent
48
+ - `back-fast` / `back-deep` — fast and deep backend implementation tiers
49
+ - `front-fast` / `front-deep` — fast and deep frontend implementation tiers
50
+ - `review-fast` / `review-deep` — fast and deep read-only review tiers
51
+ - `researcher` — source-backed internet research
52
+ - `explorer` — read-only local file and execution-path discovery
53
+ - `git` — focused Git inspection and explicitly authorized operations
54
+ - `docs` — documentation, examples, and migration notes
55
+ - `verifier` — independent build, runtime, and manual scenario verification
56
+ - `debugger` — read-only root-cause investigation
57
+ - `security` — read-only security and trust-boundary review
58
+ - `devops` — CI, Docker, infrastructure, deployment, and release configuration
59
+
60
+ ## Development setup
61
+
62
+ ```bash
63
+ bun install
64
+ bun run sync
65
+ opencode2 service restart
66
+ ```
67
+
68
+ `bun run sync` materializes the resolved configuration as native
69
+ `.opencode/agents/*.md` files and installs the local plugin entrypoint at
70
+ `.opencode/plugins/agent-gvozd/index.ts`. OpenCode V2 discovers that entrypoint
71
+ automatically.
72
+
73
+ Run `bun run sync --check` to report drift without changing files. The command
74
+ prints a diff before replacing or removing an existing generated agent and
75
+ never overwrites an agent file it does not own.
76
+
77
+ Run `bun test`, `bun run typecheck`, and `bun run build` for local verification.
78
+
79
+ ## Configuration layers
80
+
81
+ Configuration is merged in this order:
82
+
83
+ 1. package defaults in `defaults/default.jsonc` and `defaults/agents/*.jsonc`
84
+ 2. global overrides under the platform/XDG OpenCode config root in `gvozd/config.jsonc`
85
+ 3. project overrides in `<project>/docs/.gvozd/config.jsonc` and its `agents/` directory
86
+
87
+ Later scalar values replace earlier values. Arrays such as `models`, `skills`,
88
+ `mcp`, and `permissions` replace the complete earlier array.
89
+
90
+ ## Cooperative file leases
91
+
92
+ Writer agents coordinate exact project files before editing them. The default
93
+ roles are:
94
+
95
+ - `master`: `coordinator`
96
+ - backend, frontend, Docs, and DevOps agents: `writer`
97
+ - planning, exploration, review, research, Git, verification, debugging, and
98
+ security agents: `readonly`
99
+
100
+ Custom agents default to `readonly`. Set `fileLease` explicitly when a custom
101
+ agent must write:
102
+
103
+ ```jsonc
104
+ {
105
+ "agents": {
106
+ "custom-writer": {
107
+ "fileLease": "writer"
108
+ }
109
+ }
110
+ }
111
+ ```
112
+
113
+ Before parallel writer delegation, Master asks Explorer for the exact existing
114
+ and planned files in each independent work package. Master reserves each set
115
+ with `gvozd_lease` and passes the returned `leaseId` to the matching writer.
116
+ The writer calls `gvozd_claim` before its first mutation. Overlapping
117
+ reservations fail immediately, and `edit`, `write`, or `apply_patch` targets
118
+ outside the claimed lease are denied.
119
+
120
+ Writer and coordinator agents cannot use arbitrary shell commands because
121
+ shell writes cannot be safely inferred from command text. Verifier runs builds
122
+ and tests only after active writer leases are released. If a writer discovers
123
+ another required file, it reports the exact path to Master, which can extend
124
+ the lease after a conflict check or serialize the work.
125
+
126
+ Leases are in-memory and protect child sessions within one OpenCode server
127
+ process. Unclaimed reservations expire after five minutes; active leases expire
128
+ after thirty minutes without tool activity and are released on terminal session
129
+ events. Separate OpenCode processes and remote hosts are not coordinated.
130
+
131
+ An agent override can be inline:
132
+
133
+ ```jsonc
134
+ {
135
+ "$schema": "./schema.json",
136
+ "defaultAgent": "master",
137
+ "agents": {
138
+ "review-deep": {
139
+ "models": [
140
+ "openai/gpt-5.6-sol",
141
+ "openai/gpt-5.6-luna"
142
+ ],
143
+ "skills": ["code-review"],
144
+ "mcp": ["gitlab"]
145
+ }
146
+ }
147
+ }
148
+ ```
149
+
150
+ Or it can live in `docs/.gvozd/agents/review-deep.jsonc`. Relative prompt paths
151
+ are resolved from the file that declares them. Prompt files and a custom
152
+ `agentsDirectory` must remain inside the configuration layer that owns them;
153
+ sync rejects symlinked output directories and files.
154
+
155
+ `skills` contains exact skill IDs. `mcp` contains MCP server names; the plugin
156
+ converts them to the V2 `<server>_*` permission action. Use explicit
157
+ `permissions` with a matching normalized action (for example,
158
+ `gitlab_get_issue`) when an agent should receive only selected tools from a
159
+ server. If an MCP action can match more than one normalized server prefix,
160
+ access to that ambiguous action is denied.
161
+
162
+ ## Default capabilities
163
+
164
+ The built-in team uses exact skill IDs and tool-level MCP permissions from the
165
+ current OpenCode setup. Server-wide `mcp` grants remain empty by default because
166
+ GitLab, GitNexus, and Playwright each expose actions that are too broad for at
167
+ least one receiving role.
168
+
169
+ | Agents | Skills | MCP access |
170
+ | --- | --- | --- |
171
+ | `planner` | verification planning, ASCII UI review, GitNexus impact | GitNexus read-only |
172
+ | `back-deep` | GitNexus impact and refactoring | GitNexus except group sync |
173
+ | `front-fast` | modern web and interface polish | Playwright observation; interactions ask |
174
+ | `front-deep` | frontend/layout skills plus GitNexus impact/refactoring | GitNexus except group sync; Playwright interactions ask |
175
+ | `review-fast` | code review | read-only GitLab without CI variables |
176
+ | `review-deep` | code review and GitNexus review/impact | read-only GitLab and GitNexus |
177
+ | `explorer` | GitNexus exploration | GitNexus read-only |
178
+ | `git` | none | GitLab reads; mutations ask; CI variables denied |
179
+ | `verifier` | verification before completion | read-only GitNexus; Playwright interactions ask |
180
+ | `debugger` | systematic debugging and GitNexus debugging/PDG | read-only GitNexus; Playwright interactions ask |
181
+ | `security` | code review and GitNexus taint/PDG | read-only GitLab/GitNexus; Playwright interactions ask |
182
+ | `devops` | verification before completion | GitLab reads and CI validation; mutations ask; CI variables denied |
183
+
184
+ `master`, `back-fast`, `researcher`, and `docs` intentionally keep their
185
+ existing narrow capability sets. TDD skills are not enabled implicitly.
186
+
187
+ ## Model order
188
+
189
+ `models` is an ordered preference list. During plugin activation, agent-gvozd
190
+ selects the first enabled model and variant present in the OpenCode catalog. If
191
+ none is currently catalogued, it preserves the first configured model so that
192
+ OpenCode can report the underlying availability problem.
193
+
194
+ OpenCode V2 currently exposes only one model on an agent and does not expose a
195
+ safe hook for replacing that model inside an already dispatched provider
196
+ request. The ordered list therefore handles activation-time availability; an
197
+ outage or rate limit after dispatch still follows OpenCode's own retry policy.
198
+
199
+ ## Fast and deep routing
200
+
201
+ Fast workers and reviewers prefer `openai/gpt-5.6-luna` with
202
+ `openai/gpt-5.6-sol` as fallback. Deep agents use the reverse order. Master
203
+ selects the tier from task complexity and risk: localized, clear, low-risk
204
+ changes go to fast; ambiguous, cross-module, security-sensitive, migration,
205
+ concurrency, or otherwise material work goes to deep. Review depth is selected
206
+ independently from implementation depth.
207
+
208
+ Researcher, Git, and Docs prefer `openai/gpt-5.6-luna` with
209
+ `openai/gpt-5.6-sol` as fallback. Explorer prefers
210
+ `openai/gpt-5.3-codex-spark` with `openai/gpt-5.6-luna` as fallback. Researcher
211
+ is restricted to web search and fetch tools; Explorer is restricted to local
212
+ glob, grep, and read tools. Git allows common read-only Git commands and asks
213
+ for approval before diff/history inspection or any mutating Git command. Docs
214
+ can edit Markdown and files under `docs/`; edits elsewhere require approval,
215
+ and shell access is denied.
216
+
217
+ Verifier uses `openai/gpt-5.6-luna` with `openai/gpt-5.6-sol` as fallback.
218
+ Debugger, Security, and DevOps use the reverse order. Verifier, Debugger, and
219
+ Security are read-only and require approval for shell commands. DevOps can edit
220
+ common CI, Docker, and infrastructure paths; other edits and every shell or
221
+ external mutation require approval.
222
+
223
+ This pre-release change replaces the earlier single-tier agent IDs. Existing
224
+ global or project overrides must be split explicitly:
225
+
226
+ | Previous ID | New IDs |
227
+ | --- | --- |
228
+ | `backender` | `back-fast`, `back-deep` |
229
+ | `frontend` | `front-fast`, `front-deep` |
230
+ | `reviewer` | `review-fast`, `review-deep` |
231
+
232
+ There are no automatic aliases because copying one override to both tiers could
233
+ silently give them the same model order and defeat complexity-based routing.
@@ -0,0 +1,20 @@
1
+ {
2
+ "description": "Implements complex or high-risk backend, data, API, and integration changes.",
3
+ "mode": "subagent",
4
+ "fileLease": "writer",
5
+ "models": [
6
+ "openai/gpt-5.6-sol",
7
+ "openai/gpt-5.6-luna"
8
+ ],
9
+ "prompt": "../prompts/back-deep.md",
10
+ "skills": [
11
+ "gitnexus-impact-analysis",
12
+ "gitnexus-refactoring"
13
+ ],
14
+ "mcp": [],
15
+ "permissions": [
16
+ { "action": "subagent", "resource": "*", "effect": "deny" },
17
+ { "action": "gitnexus_*", "resource": "*", "effect": "allow" },
18
+ { "action": "gitnexus_group_sync", "resource": "*", "effect": "deny" }
19
+ ]
20
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "description": "Implements small, clear, low-risk backend changes with minimal exploration.",
3
+ "mode": "subagent",
4
+ "fileLease": "writer",
5
+ "models": [
6
+ "openai/gpt-5.6-luna",
7
+ "openai/gpt-5.6-sol"
8
+ ],
9
+ "prompt": "../prompts/back-fast.md",
10
+ "skills": [],
11
+ "mcp": [],
12
+ "permissions": [
13
+ { "action": "subagent", "resource": "*", "effect": "deny" }
14
+ ]
15
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "description": "Diagnoses unclear failures and establishes a concrete root cause without modifying files.",
3
+ "mode": "subagent",
4
+ "fileLease": "readonly",
5
+ "models": [
6
+ "openai/gpt-5.6-sol",
7
+ "openai/gpt-5.6-luna"
8
+ ],
9
+ "prompt": "../prompts/debugger.md",
10
+ "skills": [
11
+ "systematic-debugging",
12
+ "gitnexus-debugging",
13
+ "gitnexus-pdg-query"
14
+ ],
15
+ "mcp": [],
16
+ "permissions": [
17
+ { "action": "*", "resource": "*", "effect": "deny" },
18
+ { "action": "read", "resource": "*", "effect": "allow" },
19
+ { "action": "glob", "resource": "*", "effect": "allow" },
20
+ { "action": "grep", "resource": "*", "effect": "allow" },
21
+ { "action": "shell", "resource": "*", "effect": "ask" },
22
+ { "action": "gitnexus_*", "resource": "*", "effect": "allow" },
23
+ { "action": "gitnexus_rename", "resource": "*", "effect": "deny" },
24
+ { "action": "gitnexus_group_sync", "resource": "*", "effect": "deny" },
25
+ { "action": "playwright_*", "resource": "*", "effect": "ask" },
26
+ { "action": "playwright_browser_get_config", "resource": "*", "effect": "allow" },
27
+ { "action": "playwright_browser_snapshot", "resource": "*", "effect": "allow" },
28
+ { "action": "playwright_browser_take_screenshot", "resource": "*", "effect": "allow" },
29
+ { "action": "playwright_browser_console_messages", "resource": "*", "effect": "allow" },
30
+ { "action": "playwright_browser_network_requests", "resource": "*", "effect": "allow" },
31
+ { "action": "playwright_browser_tabs", "resource": "*", "effect": "allow" },
32
+ { "action": "playwright_browser_find", "resource": "*", "effect": "allow" },
33
+ { "action": "playwright_browser_generate_locator", "resource": "*", "effect": "allow" },
34
+ { "action": "playwright_browser_verify_*", "resource": "*", "effect": "allow" },
35
+ { "action": "playwright_browser_run_code_unsafe", "resource": "*", "effect": "deny" }
36
+ ]
37
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "description": "Implements focused CI, Docker, infrastructure, deployment, and release configuration changes.",
3
+ "mode": "subagent",
4
+ "fileLease": "writer",
5
+ "models": [
6
+ "openai/gpt-5.6-sol",
7
+ "openai/gpt-5.6-luna"
8
+ ],
9
+ "prompt": "../prompts/devops.md",
10
+ "skills": [
11
+ "verification-before-completion"
12
+ ],
13
+ "mcp": [],
14
+ "permissions": [
15
+ { "action": "*", "resource": "*", "effect": "deny" },
16
+ { "action": "read", "resource": "*", "effect": "allow" },
17
+ { "action": "glob", "resource": "*", "effect": "allow" },
18
+ { "action": "grep", "resource": "*", "effect": "allow" },
19
+ { "action": "edit", "resource": "*", "effect": "ask" },
20
+ { "action": "edit", "resource": "Dockerfile", "effect": "allow" },
21
+ { "action": "edit", "resource": "Dockerfile.*", "effect": "allow" },
22
+ { "action": "edit", "resource": "docker-compose*.yml", "effect": "allow" },
23
+ { "action": "edit", "resource": "docker-compose*.yaml", "effect": "allow" },
24
+ { "action": "edit", "resource": ".github/workflows/*", "effect": "allow" },
25
+ { "action": "edit", "resource": ".gitlab-ci.yml", "effect": "allow" },
26
+ { "action": "edit", "resource": "deploy/*", "effect": "allow" },
27
+ { "action": "edit", "resource": "infra/*", "effect": "allow" },
28
+ { "action": "edit", "resource": "k8s/*", "effect": "allow" },
29
+ { "action": "edit", "resource": "helm/*", "effect": "allow" },
30
+ { "action": "shell", "resource": "*", "effect": "ask" },
31
+ { "action": "gitlab_*", "resource": "*", "effect": "ask" },
32
+ { "action": "gitlab_get_*", "resource": "*", "effect": "allow" },
33
+ { "action": "gitlab_list_*", "resource": "*", "effect": "allow" },
34
+ { "action": "gitlab_search_*", "resource": "*", "effect": "allow" },
35
+ { "action": "gitlab_validate_*", "resource": "*", "effect": "allow" },
36
+ { "action": "gitlab_health_check", "resource": "*", "effect": "allow" },
37
+ { "action": "gitlab_get_project_variable", "resource": "*", "effect": "deny" },
38
+ { "action": "gitlab_get_group_variable", "resource": "*", "effect": "deny" },
39
+ { "action": "gitlab_list_project_variables", "resource": "*", "effect": "deny" },
40
+ { "action": "gitlab_list_group_variables", "resource": "*", "effect": "deny" }
41
+ ]
42
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "description": "Writes and updates focused project documentation, examples, and migration notes.",
3
+ "mode": "subagent",
4
+ "fileLease": "writer",
5
+ "models": [
6
+ "openai/gpt-5.6-luna",
7
+ "openai/gpt-5.6-sol"
8
+ ],
9
+ "prompt": "../prompts/docs.md",
10
+ "skills": [],
11
+ "mcp": [],
12
+ "permissions": [
13
+ { "action": "*", "resource": "*", "effect": "deny" },
14
+ { "action": "read", "resource": "*", "effect": "allow" },
15
+ { "action": "glob", "resource": "*", "effect": "allow" },
16
+ { "action": "grep", "resource": "*", "effect": "allow" },
17
+ { "action": "edit", "resource": "*", "effect": "ask" },
18
+ { "action": "edit", "resource": "*.md", "effect": "allow" },
19
+ { "action": "edit", "resource": "*.mdx", "effect": "allow" },
20
+ { "action": "edit", "resource": "docs/*", "effect": "allow" }
21
+ ]
22
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "description": "Finds relevant files, symbols, and local execution paths without changing the workspace.",
3
+ "mode": "subagent",
4
+ "fileLease": "readonly",
5
+ "models": [
6
+ "openai/gpt-5.3-codex-spark",
7
+ "openai/gpt-5.6-luna"
8
+ ],
9
+ "prompt": "../prompts/explorer.md",
10
+ "skills": [
11
+ "gitnexus-exploring"
12
+ ],
13
+ "mcp": [],
14
+ "permissions": [
15
+ { "action": "*", "resource": "*", "effect": "deny" },
16
+ { "action": "glob", "resource": "*", "effect": "allow" },
17
+ { "action": "grep", "resource": "*", "effect": "allow" },
18
+ { "action": "read", "resource": "*", "effect": "allow" },
19
+ { "action": "gitnexus_*", "resource": "*", "effect": "allow" },
20
+ { "action": "gitnexus_rename", "resource": "*", "effect": "deny" },
21
+ { "action": "gitnexus_group_sync", "resource": "*", "effect": "deny" }
22
+ ]
23
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "description": "Implements complex frontend architecture, state, UX, and accessibility changes.",
3
+ "mode": "subagent",
4
+ "fileLease": "writer",
5
+ "models": [
6
+ "openai/gpt-5.6-sol",
7
+ "openai/gpt-5.6-luna"
8
+ ],
9
+ "prompt": "../prompts/front-deep.md",
10
+ "skills": [
11
+ "modern-web-guidance",
12
+ "make-interfaces-feel-better",
13
+ "ascii-ui-review",
14
+ "gitnexus-impact-analysis",
15
+ "gitnexus-refactoring"
16
+ ],
17
+ "mcp": [],
18
+ "permissions": [
19
+ { "action": "subagent", "resource": "*", "effect": "deny" },
20
+ { "action": "gitnexus_*", "resource": "*", "effect": "allow" },
21
+ { "action": "gitnexus_group_sync", "resource": "*", "effect": "deny" },
22
+ { "action": "playwright_*", "resource": "*", "effect": "ask" },
23
+ { "action": "playwright_browser_get_config", "resource": "*", "effect": "allow" },
24
+ { "action": "playwright_browser_snapshot", "resource": "*", "effect": "allow" },
25
+ { "action": "playwright_browser_take_screenshot", "resource": "*", "effect": "allow" },
26
+ { "action": "playwright_browser_console_messages", "resource": "*", "effect": "allow" },
27
+ { "action": "playwright_browser_network_requests", "resource": "*", "effect": "allow" },
28
+ { "action": "playwright_browser_tabs", "resource": "*", "effect": "allow" },
29
+ { "action": "playwright_browser_find", "resource": "*", "effect": "allow" },
30
+ { "action": "playwright_browser_generate_locator", "resource": "*", "effect": "allow" },
31
+ { "action": "playwright_browser_verify_*", "resource": "*", "effect": "allow" },
32
+ { "action": "playwright_browser_run_code_unsafe", "resource": "*", "effect": "deny" }
33
+ ]
34
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "description": "Implements small, clear, low-risk frontend and styling changes with minimal exploration.",
3
+ "mode": "subagent",
4
+ "fileLease": "writer",
5
+ "models": [
6
+ "openai/gpt-5.6-luna",
7
+ "openai/gpt-5.6-sol"
8
+ ],
9
+ "prompt": "../prompts/front-fast.md",
10
+ "skills": [
11
+ "modern-web-guidance",
12
+ "make-interfaces-feel-better"
13
+ ],
14
+ "mcp": [],
15
+ "permissions": [
16
+ { "action": "subagent", "resource": "*", "effect": "deny" },
17
+ { "action": "playwright_*", "resource": "*", "effect": "ask" },
18
+ { "action": "playwright_browser_get_config", "resource": "*", "effect": "allow" },
19
+ { "action": "playwright_browser_snapshot", "resource": "*", "effect": "allow" },
20
+ { "action": "playwright_browser_take_screenshot", "resource": "*", "effect": "allow" },
21
+ { "action": "playwright_browser_console_messages", "resource": "*", "effect": "allow" },
22
+ { "action": "playwright_browser_network_requests", "resource": "*", "effect": "allow" },
23
+ { "action": "playwright_browser_tabs", "resource": "*", "effect": "allow" },
24
+ { "action": "playwright_browser_find", "resource": "*", "effect": "allow" },
25
+ { "action": "playwright_browser_generate_locator", "resource": "*", "effect": "allow" },
26
+ { "action": "playwright_browser_verify_*", "resource": "*", "effect": "allow" },
27
+ { "action": "playwright_browser_run_code_unsafe", "resource": "*", "effect": "deny" }
28
+ ]
29
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "description": "Handles focused Git inspection and explicitly authorized repository operations.",
3
+ "mode": "subagent",
4
+ "fileLease": "readonly",
5
+ "models": [
6
+ "openai/gpt-5.6-luna",
7
+ "openai/gpt-5.6-sol"
8
+ ],
9
+ "prompt": "../prompts/git.md",
10
+ "skills": [],
11
+ "mcp": [],
12
+ "permissions": [
13
+ { "action": "*", "resource": "*", "effect": "deny" },
14
+ { "action": "read", "resource": "*", "effect": "allow" },
15
+ { "action": "glob", "resource": "*", "effect": "allow" },
16
+ { "action": "grep", "resource": "*", "effect": "allow" },
17
+ { "action": "shell", "resource": "git *", "effect": "ask" },
18
+ { "action": "shell", "resource": "GIT_OPTIONAL_LOCKS=0 git *", "effect": "ask" },
19
+ { "action": "shell", "resource": "git status", "effect": "allow" },
20
+ { "action": "shell", "resource": "git status --short", "effect": "allow" },
21
+ { "action": "shell", "resource": "git status --short --branch", "effect": "allow" },
22
+ { "action": "shell", "resource": "git status --porcelain=v1 --branch", "effect": "allow" },
23
+ { "action": "shell", "resource": "git rev-parse --show-toplevel", "effect": "allow" },
24
+ { "action": "shell", "resource": "git rev-parse --git-dir", "effect": "allow" },
25
+ { "action": "shell", "resource": "git remote -v", "effect": "allow" },
26
+ { "action": "shell", "resource": "git branch --show-current", "effect": "allow" },
27
+ { "action": "shell", "resource": "git stash list", "effect": "allow" },
28
+ { "action": "shell", "resource": "GIT_OPTIONAL_LOCKS=0 git status", "effect": "allow" },
29
+ { "action": "shell", "resource": "GIT_OPTIONAL_LOCKS=0 git status --short", "effect": "allow" },
30
+ { "action": "shell", "resource": "GIT_OPTIONAL_LOCKS=0 git status --short --branch", "effect": "allow" },
31
+ { "action": "shell", "resource": "GIT_OPTIONAL_LOCKS=0 git status --porcelain=v1 --branch", "effect": "allow" },
32
+ { "action": "shell", "resource": "GIT_OPTIONAL_LOCKS=0 git rev-parse --show-toplevel", "effect": "allow" },
33
+ { "action": "shell", "resource": "GIT_OPTIONAL_LOCKS=0 git rev-parse --git-dir", "effect": "allow" },
34
+ { "action": "shell", "resource": "GIT_OPTIONAL_LOCKS=0 git remote -v", "effect": "allow" },
35
+ { "action": "shell", "resource": "GIT_OPTIONAL_LOCKS=0 git branch --show-current", "effect": "allow" },
36
+ { "action": "shell", "resource": "GIT_OPTIONAL_LOCKS=0 git stash list", "effect": "allow" },
37
+ { "action": "gitlab_*", "resource": "*", "effect": "ask" },
38
+ { "action": "gitlab_get_*", "resource": "*", "effect": "allow" },
39
+ { "action": "gitlab_list_*", "resource": "*", "effect": "allow" },
40
+ { "action": "gitlab_search_*", "resource": "*", "effect": "allow" },
41
+ { "action": "gitlab_my_issues", "resource": "*", "effect": "allow" },
42
+ { "action": "gitlab_mr_discussions", "resource": "*", "effect": "allow" },
43
+ { "action": "gitlab_whoami", "resource": "*", "effect": "allow" },
44
+ { "action": "gitlab_health_check", "resource": "*", "effect": "allow" },
45
+ { "action": "gitlab_get_project_variable", "resource": "*", "effect": "deny" },
46
+ { "action": "gitlab_get_group_variable", "resource": "*", "effect": "deny" },
47
+ { "action": "gitlab_list_project_variables", "resource": "*", "effect": "deny" },
48
+ { "action": "gitlab_list_group_variables", "resource": "*", "effect": "deny" }
49
+ ]
50
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "description": "Coordinates planning, implementation, manual verification, and review.",
3
+ "mode": "primary",
4
+ "fileLease": "coordinator",
5
+ "models": [
6
+ "openai/gpt-5.6-sol",
7
+ "openai/gpt-5.6-luna"
8
+ ],
9
+ "prompt": "../prompts/master.md",
10
+ "skills": [],
11
+ "mcp": [],
12
+ "permissions": [
13
+ { "action": "subagent", "resource": "*", "effect": "deny" },
14
+ { "action": "subagent", "resource": "planner", "effect": "allow" },
15
+ { "action": "subagent", "resource": "back-fast", "effect": "allow" },
16
+ { "action": "subagent", "resource": "back-deep", "effect": "allow" },
17
+ { "action": "subagent", "resource": "front-fast", "effect": "allow" },
18
+ { "action": "subagent", "resource": "front-deep", "effect": "allow" },
19
+ { "action": "subagent", "resource": "review-fast", "effect": "allow" },
20
+ { "action": "subagent", "resource": "review-deep", "effect": "allow" },
21
+ { "action": "subagent", "resource": "researcher", "effect": "allow" },
22
+ { "action": "subagent", "resource": "explorer", "effect": "allow" },
23
+ { "action": "subagent", "resource": "git", "effect": "allow" },
24
+ { "action": "subagent", "resource": "docs", "effect": "allow" },
25
+ { "action": "subagent", "resource": "verifier", "effect": "allow" },
26
+ { "action": "subagent", "resource": "debugger", "effect": "allow" },
27
+ { "action": "subagent", "resource": "security", "effect": "allow" },
28
+ { "action": "subagent", "resource": "devops", "effect": "allow" }
29
+ ]
30
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "description": "Inspects the task and produces a concise implementation plan.",
3
+ "mode": "subagent",
4
+ "fileLease": "readonly",
5
+ "models": [
6
+ "openai/gpt-5.6-sol",
7
+ "openai/gpt-5.6-luna"
8
+ ],
9
+ "prompt": "../prompts/planner.md",
10
+ "skills": [
11
+ "verification-planning",
12
+ "ascii-ui-review",
13
+ "gitnexus-impact-analysis"
14
+ ],
15
+ "mcp": [],
16
+ "permissions": [
17
+ { "action": "edit", "resource": "*", "effect": "deny" },
18
+ { "action": "subagent", "resource": "*", "effect": "deny" },
19
+ { "action": "shell", "resource": "*", "effect": "ask" },
20
+ { "action": "gitnexus_*", "resource": "*", "effect": "allow" },
21
+ { "action": "gitnexus_rename", "resource": "*", "effect": "deny" },
22
+ { "action": "gitnexus_group_sync", "resource": "*", "effect": "deny" }
23
+ ]
24
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "description": "Researches current external information on the internet and returns source-backed findings.",
3
+ "mode": "subagent",
4
+ "fileLease": "readonly",
5
+ "models": [
6
+ "openai/gpt-5.6-luna",
7
+ "openai/gpt-5.6-sol"
8
+ ],
9
+ "prompt": "../prompts/researcher.md",
10
+ "skills": [],
11
+ "mcp": [],
12
+ "permissions": [
13
+ { "action": "*", "resource": "*", "effect": "deny" },
14
+ { "action": "websearch", "resource": "*", "effect": "allow" },
15
+ { "action": "webfetch", "resource": "*", "effect": "allow" }
16
+ ]
17
+ }