@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jabworks/condux",
3
- "version": "0.26.1",
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: haiku
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: sonnet
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
- const PRESERVE_KEYS = ['model', 'model_reasoning_effort', 'sandbox_mode', 'nickname_candidates'];
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`, `researcher` | haiku (`explorer`), sonnet (`researcher`) | Read-only, narrow scope, clear output. Good for lookup tasks that would bloat your context |
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 | haiku |
23
- | Multi-file integration, pattern-matching, moderate judgment | sonnet |
24
- | Architecture-level judgment; the final whole-branch review | opus |
25
-
26
- Turn count costs more than token price on multi-step work — the cheapest
27
- tier routinely takes more turns to reach the same result, which can cost
28
- more overall. Use sonnet as the floor for reviewers and for implementers
29
- working from prose descriptions; reserve haiku for tasks whose brief
30
- already contains the exact code to write.
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
 
@@ -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 (haiku, non-blocking; LSP over grep).
235
- - `researcher` — external API/library verification (sonnet, non-blocking; resolves
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).