@jabworks/condux 0.26.1 → 0.27.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.
- package/package.json +1 -1
- package/skills/subagent-execution/agents/explorer.md +2 -1
- package/skills/subagent-execution/agents/researcher.md +1 -1
- package/skills/subagent-execution/references/install-codex-agents.mjs +15 -3
- package/skills/subagent-execution/references/spawn-rules.md +32 -12
- package/skills/workflow/SKILL.md +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jabworks/condux",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "OpenCode plugin for the condux workflow toolkit — bundles the condux skills and injects the specialist agents (coder, explorer, planner, researcher) plus an opt-in plan-review listener.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
name: "explorer"
|
|
3
3
|
description: "Use this agent when you need to understand an unfamiliar codebase, trace types or symbols, identify module boundaries, discover conventions, map call graphs, or find where specific patterns are implemented — before planning or implementing any changes. Fire non-blocking when possible — delegate and continue while it traverses.\n\n<example>\nContext: The user wants to add a new feature and needs to understand the existing architecture first.\nuser: \"I want to add authentication middleware to the API. Where should I put it?\"\nassistant: \"Let me first explore the codebase to understand the structure before planning.\"\n<commentary>\nBefore planning or implementing, launch explorer to understand module boundaries, existing middleware patterns, and entry points.\n</commentary>\n</example>"
|
|
4
4
|
tools: CronCreate, CronDelete, CronList, EnterWorktree, ExitWorktree, ListMcpResourcesTool, LSP, Monitor, PushNotification, Read, ReadMcpResourceTool, RemoteTrigger, Skill, TaskCreate, TaskGet, TaskList, TaskStop, TaskUpdate, ToolSearch, WebFetch, WebSearch, mcp__plugin_context7_context7__query-docs, mcp__plugin_context7_context7__resolve-library-id
|
|
5
|
-
model:
|
|
5
|
+
model: sonnet
|
|
6
|
+
effort: low
|
|
6
7
|
color: cyan
|
|
7
8
|
memory: user
|
|
8
9
|
---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: "researcher"
|
|
3
3
|
description: "Use this agent when any external library or framework API needs to be looked up before implementation. Invoke proactively whenever code will use a third-party dependency, an unfamiliar API method, or when exact parameter signatures, return types, or version-specific behavior must be confirmed. Fire non-blocking — delegate and continue working while it runs.\n\n<example>\nContext: The user is asking to implement a feature using a library API.\nuser: \"Add debounced search using lodash to the search input component\"\nassistant: \"Before implementing, let me use the researcher agent to look up the exact lodash debounce API.\"\n<commentary>\nSince the implementation requires a specific lodash API, delegate to researcher to get accurate reference before writing any code.\n</commentary>\n</example>"
|
|
4
4
|
tools: CronCreate, CronDelete, CronList, EnterWorktree, ExitWorktree, ListMcpResourcesTool, LSP, Monitor, PushNotification, Read, ReadMcpResourceTool, RemoteTrigger, Skill, TaskCreate, TaskGet, TaskList, TaskStop, TaskUpdate, ToolSearch, WebFetch, WebSearch, mcp__plugin_context7_context7__query-docs, mcp__plugin_context7_context7__resolve-library-id
|
|
5
|
-
model:
|
|
5
|
+
model: opus
|
|
6
6
|
color: blue
|
|
7
7
|
memory: user
|
|
8
8
|
---
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
// - tuning keys on an existing TOML (model, model_reasoning_effort,
|
|
20
20
|
// sandbox_mode, nickname_candidates) are preserved; otherwise
|
|
21
21
|
// sandbox_mode defaults to read-only for explorer/researcher and
|
|
22
|
-
// workspace-write for planner/coder
|
|
22
|
+
// workspace-write for planner/coder, and model / model_reasoning_effort
|
|
23
|
+
// default per MODEL_DEFAULTS (Free/Go plans get Luna only — edit down)
|
|
23
24
|
// - existing files are backed up to <name>.toml.bak first
|
|
24
25
|
//
|
|
25
26
|
// --uninstall removes exactly the .toml files this installer would have
|
|
@@ -31,7 +32,7 @@
|
|
|
31
32
|
// [features] hooks flag is shared host state this script does not own.
|
|
32
33
|
//
|
|
33
34
|
// Schema per https://developers.openai.com/codex/subagents (verified
|
|
34
|
-
// 2026-07-08): required name/description/developer_instructions; a custom
|
|
35
|
+
// 2026-07-08; model / model_reasoning_effort keys re-verified 2026-10-04): required name/description/developer_instructions; a custom
|
|
35
36
|
// agent named like a built-in (e.g. explorer) takes precedence over it.
|
|
36
37
|
|
|
37
38
|
import fs from 'node:fs';
|
|
@@ -53,7 +54,15 @@ const SANDBOX_DEFAULTS = {
|
|
|
53
54
|
planner: 'workspace-write',
|
|
54
55
|
coder: 'workspace-write',
|
|
55
56
|
};
|
|
56
|
-
|
|
57
|
+
// Model tiers per spawn-rules.md → Codex Model Defaults. Applied per key,
|
|
58
|
+
// only when the existing TOML doesn't set it.
|
|
59
|
+
const MODEL_DEFAULTS = {
|
|
60
|
+
explorer: { model: 'gpt-6-luna', model_reasoning_effort: 'low' },
|
|
61
|
+
researcher: { model: 'gpt-6-astra', model_reasoning_effort: 'high' },
|
|
62
|
+
planner: { model: 'gpt-6.1-sol', model_reasoning_effort: 'medium' },
|
|
63
|
+
coder: { model: 'gpt-6.1-sol', model_reasoning_effort: 'medium' },
|
|
64
|
+
};
|
|
65
|
+
const PRESERVE_KEYS =['model', 'model_reasoning_effort', 'sandbox_mode', 'nickname_candidates'];
|
|
57
66
|
|
|
58
67
|
function fmField(block, key) {
|
|
59
68
|
const m = block.match(new RegExp('^' + key + ':[ \\t]*(.*)$', 'm'));
|
|
@@ -111,6 +120,9 @@ for (const file of fs.readdirSync(AGENTS_DIR).filter((f) => f.endsWith('.md')))
|
|
|
111
120
|
if (!preserved.some((l) => l.startsWith('sandbox_mode')) && SANDBOX_DEFAULTS[name]) {
|
|
112
121
|
preserved.push(`sandbox_mode = "${SANDBOX_DEFAULTS[name]}"`);
|
|
113
122
|
}
|
|
123
|
+
for (const [key, value] of Object.entries(MODEL_DEFAULTS[name] || {})) {
|
|
124
|
+
if (!preserved.some((l) => l.startsWith(key + ' ') || l.startsWith(key + '='))) preserved.push(`${key} = "${value}"`);
|
|
125
|
+
}
|
|
114
126
|
|
|
115
127
|
const toml = [
|
|
116
128
|
`name = "${name}"`,
|
|
@@ -7,9 +7,13 @@ Reference for deciding when and which agent to spawn. Read this before every spa
|
|
|
7
7
|
| Tier | Examples | Model | When to Use |
|
|
8
8
|
| ------------- | ------------------------- | ----------------------------------------- | --------------------------------------------------------------------------------------------- |
|
|
9
9
|
| **FREE** | — | n/a | Built-in tool calls (bash, grep, file reads) — do these yourself, no agent needed |
|
|
10
|
-
| **CHEAP** | `explorer
|
|
10
|
+
| **CHEAP** | `explorer` | sonnet, `effort: low` | Read-only, narrow scope, clear output. Good for lookup tasks that would bloat your context |
|
|
11
|
+
| **EXPENSIVE** | `researcher` | opus | Read-only, but source judgment decides the result — conflicting docs, version drift |
|
|
11
12
|
| **EXPENSIVE** | `coder`, `planner` | sonnet (default) — see Model Selection | Write-capable or high-context output. Justify carefully |
|
|
12
13
|
|
|
14
|
+
No agent uses haiku. Sonnet at low effort beats it at the same job in fewer
|
|
15
|
+
turns, and turn count costs more than token price on multi-step work.
|
|
16
|
+
|
|
13
17
|
### Model Selection for `coder` Dispatch
|
|
14
18
|
|
|
15
19
|
`coder`'s baseline model is sonnet. Override per-dispatch based on task
|
|
@@ -17,17 +21,33 @@ complexity — always pass the model explicitly; an omitted model silently
|
|
|
17
21
|
inherits the session's own model, which is often the most capable and most
|
|
18
22
|
expensive tier.
|
|
19
23
|
|
|
20
|
-
| Task complexity | Model
|
|
21
|
-
| --------------------------------------------------------------------- |
|
|
22
|
-
| Mechanical, 1-2 files, complete spec/code already in the task brief |
|
|
23
|
-
| Multi-file integration, pattern-matching, moderate judgment | sonnet
|
|
24
|
-
| Architecture-level judgment; the final whole-branch review | opus
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
| Task complexity | Model |
|
|
25
|
+
| --------------------------------------------------------------------- | ---------------------- |
|
|
26
|
+
| Mechanical, 1-2 files, complete spec/code already in the task brief | sonnet, `effort: low` |
|
|
27
|
+
| Multi-file integration, pattern-matching, moderate judgment | sonnet |
|
|
28
|
+
| Architecture-level judgment; the final whole-branch review | fable → opus fallback |
|
|
29
|
+
|
|
30
|
+
**Fable is a dispatch-time choice, never a frontmatter pin.** It ships only
|
|
31
|
+
on the Max plan, and Claude Code has no automatic fallback — a `fable`
|
|
32
|
+
dispatch on a plan without it, or past Max's Fable allowance, errors or
|
|
33
|
+
bills usage credits instead of downgrading. Dispatch `fable` only when the
|
|
34
|
+
session is known to have it; if the dispatch fails on model availability,
|
|
35
|
+
redispatch the same brief with `opus`. When unsure, use `opus`.
|
|
36
|
+
|
|
37
|
+
### Codex Model Defaults
|
|
38
|
+
|
|
39
|
+
`install-codex-agents.mjs` writes these when a TOML has no `model` /
|
|
40
|
+
`model_reasoning_effort` of its own (yours always win):
|
|
41
|
+
|
|
42
|
+
| Agent | `model` | `model_reasoning_effort` |
|
|
43
|
+
| -------------------- | -------------- | ------------------------ |
|
|
44
|
+
| `explorer` | `gpt-6-luna` | `low` |
|
|
45
|
+
| `planner`, `coder` | `gpt-6.1-sol` | `medium` |
|
|
46
|
+
| `researcher` | `gpt-6-astra` | `high` |
|
|
47
|
+
|
|
48
|
+
Free and Go plans get Luna only, and Astra's plan gating is not settled in
|
|
49
|
+
OpenAI's docs — on those plans, edit the TOML's `model` down. Codex has no
|
|
50
|
+
documented fallback for an unavailable model either.
|
|
31
51
|
|
|
32
52
|
## Agent Capability Boundaries
|
|
33
53
|
|
package/skills/workflow/SKILL.md
CHANGED
|
@@ -231,8 +231,8 @@ with an injected prompt. Implement yourself by default; spawn only with concrete
|
|
|
231
231
|
justification (unfamiliar codebase, external API to verify, genuinely parallel
|
|
232
232
|
exploration, or a LARGE plan via `subagent-execution`).
|
|
233
233
|
|
|
234
|
-
- `explorer` — read-only codebase navigation (
|
|
235
|
-
- `researcher` — external API/library verification (
|
|
234
|
+
- `explorer` — read-only codebase navigation (sonnet at low effort, non-blocking; LSP over grep).
|
|
235
|
+
- `researcher` — external API/library verification (opus, non-blocking; resolves
|
|
236
236
|
the installed version first, omits what it can't verify).
|
|
237
237
|
- `planner` — design → executable plan (sonnet; always delegates to explorer, and
|
|
238
238
|
researcher when external libs are involved, before planning).
|