job-forge 2.8.0 → 2.10.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.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: general-paid
3
3
  description: Quality-sensitive worker on paid model. Use for offer evaluation narratives (Blocks A-F), cover letter generation, "Why X?" form answers, interview STAR stories, and other tasks where writing quality and judgment matter.
4
- model: claude-sonnet-4-6
4
+ model: claude-opus-4-7
5
5
  ---
6
6
 
7
7
  You are the @general-paid subagent. The orchestrator delegated this task to you because it requires quality writing or judgment — the kind of work `@general-free` isn't well-suited for.
@@ -4,15 +4,16 @@
4
4
  "model": "claude-sonnet-4-6"
5
5
  },
6
6
  "roles": {
7
- "general-free": {
7
+ "fast": {
8
8
  "provider": "anthropic",
9
9
  "model": "claude-haiku-4-5"
10
10
  },
11
- "general-paid": {
11
+ "quality": {
12
12
  "provider": "anthropic",
13
- "model": "claude-sonnet-4-6"
13
+ "model": "claude-opus-4-7",
14
+ "reasoning": "high"
14
15
  },
15
- "glm-minimal": {
16
+ "minimal": {
16
17
  "provider": "anthropic",
17
18
  "model": "claude-haiku-4-5"
18
19
  }
@@ -2,23 +2,29 @@
2
2
  model = "claude-sonnet-4-6"
3
3
  model_provider = "anthropic"
4
4
 
5
- [profiles.general-free]
6
- model = "claude-haiku-4-5"
7
- model_provider = "anthropic"
5
+ [profiles.fast]
6
+ model = "gpt-5.4-mini"
7
+ model_provider = "openai"
8
8
 
9
- [profiles.general-paid]
10
- model = "claude-sonnet-4-6"
11
- model_provider = "anthropic"
9
+ [profiles.quality]
10
+ model = "gpt-5.4"
11
+ model_provider = "openai"
12
+ model_reasoning_effort = "high"
12
13
 
13
- [profiles.glm-minimal]
14
- model = "claude-haiku-4-5"
15
- model_provider = "anthropic"
14
+ [profiles.minimal]
15
+ model = "gpt-5.4-nano"
16
+ model_provider = "openai"
16
17
 
17
18
  [model_providers.anthropic]
18
19
  name = "Anthropic"
19
20
  base_url = "https://api.anthropic.com/v1"
20
21
  env_key = "ANTHROPIC_API_KEY"
21
22
 
23
+ [model_providers.openai]
24
+ name = "OpenAI"
25
+ base_url = "https://api.openai.com/v1"
26
+ env_key = "OPENAI_API_KEY"
27
+
22
28
  [mcp_servers.geometra]
23
29
  command = "npx"
24
30
  args = ["-y", "@geometra/mcp"]
@@ -12,6 +12,6 @@ Cursor has no role/subagent system, so these are advisory — switch the model p
12
12
 
13
13
  | Role | Provider | Model | Reasoning |
14
14
  | ---- | -------- | ----- | --------- |
15
- | `general-free` | anthropic | `claude-haiku-4-5` | — |
16
- | `general-paid` | anthropic | `claude-sonnet-4-6` | |
17
- | `glm-minimal` | anthropic | `claude-haiku-4-5` | — |
15
+ | `fast` | anthropic | `claude-haiku-4-5` | — |
16
+ | `quality` | anthropic | `claude-opus-4-7` | high |
17
+ | `minimal` | anthropic | `claude-haiku-4-5` | — |
@@ -16,11 +16,6 @@ tools:
16
16
  gmail_get_message: true
17
17
  temperature: 0.1
18
18
  reasoningEffort: minimal
19
- fallback_models:
20
- - opencode/minimax-m2.5-free
21
- - opencode/nemotron-3-super-free
22
- - opencode-go/minimax-m2.7
23
- - opencode/glm-5.1
24
19
  ---
25
20
 
26
21
  You are the @general-free subagent. You run on a free-tier model, which means the orchestrator has delegated this task to you **specifically because the work is procedural**: deterministic steps, scripted outputs, no nuanced writing required.
@@ -1,14 +1,12 @@
1
1
  ---
2
2
  description: Quality-sensitive worker on paid model. Use for offer evaluation narratives (Blocks A-F), cover letter generation, "Why X?" form answers, interview STAR stories, and other tasks where writing quality and judgment matter.
3
3
  mode: subagent
4
- model: opencode/glm-5.1
4
+ model: opencode-go/kimi-k2.5
5
5
  tools:
6
6
  geometra_*: false
7
7
  gmail_*: false
8
8
  temperature: 0.3
9
9
  reasoningEffort: medium
10
- fallback_models:
11
- - opencode/claude-haiku-4-5
12
10
  ---
13
11
 
14
12
  You are the @general-paid subagent. The orchestrator delegated this task to you because it requires quality writing or judgment — the kind of work `@general-free` isn't well-suited for.
@@ -13,9 +13,6 @@ tools:
13
13
  task: false
14
14
  temperature: 0
15
15
  reasoningEffort: none
16
- fallback_models:
17
- - opencode/big-pickle
18
- - opencode/nemotron-3-super-free
19
16
  ---
20
17
 
21
18
  You are the @glm-minimal subagent. You handle narrow, one-shot extractions where the orchestrator has pre-digested the context and just needs you to do a specific transform.
@@ -1,19 +1,15 @@
1
1
  ---
2
2
  description: Procedural worker on free-tier model. Use for form filling via Geometra, tracker updates, TSV merges, scan dedup, OTP retrieval, and other mechanical/scripted tasks where quality-sensitive text generation is NOT required.
3
+ role: fast
3
4
  targets:
4
- # Claude Code / Cursor / Codex: no inline override — iso-route's resolved
5
- # role map stamps model from models.yaml (role name = filename slug).
6
- # OpenCode keeps its provider-specific model identifier inline.
5
+ # No inline model: iso-route's "standard" preset maps role "fast" to
6
+ # each harness's cheapest reliable model. Claude Code reads
7
+ # .claude/iso-route.resolved.json; OpenCode reads opencode.json's
8
+ # agent.fast.model (iso-harness 0.6.0+).
7
9
  opencode:
8
10
  mode: subagent
9
- model: opencode/big-pickle
10
11
  temperature: 0.1
11
12
  reasoningEffort: minimal
12
- fallback_models:
13
- - opencode/minimax-m2.5-free
14
- - opencode/nemotron-3-super-free
15
- - opencode-go/minimax-m2.7
16
- - opencode/glm-5.1
17
13
  tools:
18
14
  geometra_connect: true
19
15
  geometra_page_model: true
@@ -1,16 +1,15 @@
1
1
  ---
2
2
  description: Quality-sensitive worker on paid model. Use for offer evaluation narratives (Blocks A-F), cover letter generation, "Why X?" form answers, interview STAR stories, and other tasks where writing quality and judgment matter.
3
+ role: quality
3
4
  targets:
4
- # Claude Code / Cursor / Codex: no inline override — iso-route's resolved
5
- # role map stamps model from models.yaml (role name = filename slug).
6
- # OpenCode keeps its provider-specific model identifier inline.
5
+ # No inline model: iso-route's "standard" preset maps role "quality" to
6
+ # each harness's top-tier reasoning-capable model. Claude Code reads
7
+ # .claude/iso-route.resolved.json; OpenCode reads opencode.json's
8
+ # agent.quality.model (iso-harness 0.6.0+).
7
9
  opencode:
8
10
  mode: subagent
9
- model: opencode/glm-5.1
10
11
  temperature: 0.3
11
12
  reasoningEffort: medium
12
- fallback_models:
13
- - opencode/claude-haiku-4-5
14
13
  tools:
15
14
  geometra_*: false
16
15
  gmail_*: false
@@ -1,17 +1,15 @@
1
1
  ---
2
2
  description: Narrow-scope extractor on free-tier model. Use for single-purpose tasks where the orchestrator passes the exact input and expects a small, structured output — e.g., "extract these 8 fields from this JD text" or "parse this form schema into a label→type map". NOT for multi-step workflows.
3
+ role: minimal
3
4
  targets:
4
- # Claude Code / Cursor / Codex: no inline override — iso-route's resolved
5
- # role map stamps model from models.yaml (role name = filename slug).
6
- # OpenCode keeps its provider-specific model identifier inline.
5
+ # No inline model: iso-route's "standard" preset maps role "minimal" to
6
+ # each harness's smallest credible model. Claude Code reads
7
+ # .claude/iso-route.resolved.json; OpenCode reads opencode.json's
8
+ # agent.minimal.model (iso-harness 0.6.0+).
7
9
  opencode:
8
10
  mode: subagent
9
- model: opencode/minimax-m2.5-free
10
11
  temperature: 0
11
12
  reasoningEffort: none
12
- fallback_models:
13
- - opencode/big-pickle
14
- - opencode/nemotron-3-super-free
15
13
  tools:
16
14
  geometra_*: false
17
15
  gmail_*: false
package/models.yaml CHANGED
@@ -1,63 +1,30 @@
1
- # JobForge model policy — one authored source, fanned out to each harness.
1
+ # JobForge model policy.
2
2
  #
3
- # `@razroo/iso-route build` reads this file and writes:
4
- # - .claude/settings.json (default Claude Code model)
5
- # - .claude/iso-route.resolved.json (role map iso-harness stamps onto
6
- # .claude/agents/*.md frontmatter)
7
- # - .codex/config.toml (model + [profiles.*] + providers;
8
- # iso-harness merges [mcp_servers.*]
9
- # on top of this via v0.5+)
10
- # - opencode.json (top-level + per-agent overrides;
11
- # iso-harness preserves these when
12
- # layering mcp on top)
13
- # - .cursor/iso-route.md (advisory — Cursor has no
14
- # programmatic model binding)
3
+ # Extends @razroo/iso-route's bundled "standard" preset a curated
4
+ # cost-tiered routing config verified against 2026-04 provider catalogs.
5
+ # Preset content lives in node_modules/@razroo/iso-route/presets/standard.yaml;
6
+ # run `npx iso-route plan models.yaml` to see the resolved policy.
15
7
  #
16
- # Each role maps 1:1 to a subagent file in iso/agents/ (by filename slug).
17
- # The `targets.<harness>` sub-object overrides provider+model when
18
- # emitting for that specific harness; otherwise the generic policy on the
19
- # role is used (iso-route v0.2+).
20
-
21
- default:
22
- provider: anthropic
23
- model: claude-sonnet-4-6
24
- targets:
25
- # OpenCode users default to the OpenCode proxy's paid-tier chat model
26
- # for the top-level (non-subagent) session.
27
- opencode:
28
- provider: opencode
29
- model: opencode/glm-5.1
30
-
31
- roles:
32
- # @general-free — procedural worker (form-fill, TSV merge, OTP retrieval,
33
- # scan metadata extraction). Runs on each harness's cheapest-reliable
34
- # model; OpenCode gets the free-tier proxy so batch applies cost $0.
35
- general-free:
36
- provider: anthropic
37
- model: claude-haiku-4-5
38
- targets:
39
- opencode:
40
- provider: opencode
41
- model: opencode/big-pickle
42
-
43
- # @general-paid — quality-sensitive worker (Blocks A-F evaluation, cover
44
- # letters, STAR stories, LinkedIn outreach). Upgrade target for
45
- # high-stakes applies per [D3] in iso/instructions.md.
46
- general-paid:
47
- provider: anthropic
48
- model: claude-sonnet-4-6
49
- targets:
50
- opencode:
51
- provider: opencode
52
- model: opencode/glm-5.1
8
+ # JobForge's subagents bind to preset roles via the `role:` field in
9
+ # iso/agents/<slug>.md:
10
+ # @general-free → role: fast (Haiku / opencode/big-pickle / gpt-5.4-mini)
11
+ # @general-paid → role: quality (Opus 4.7 / opencode-go/kimi-k2.5 / gpt-5.4)
12
+ # @glm-minimal → role: minimal (Haiku / opencode/minimax-m2.5-free / gpt-5.4-nano)
13
+ #
14
+ # Override anything by adding fields here. For example, to pin Opus on
15
+ # Claude Code for the @general-paid (quality) role:
16
+ #
17
+ # roles:
18
+ # quality:
19
+ # model: claude-opus-4-7
20
+ #
21
+ # Or to route all high-stakes applies to GPT-5.4 on Codex:
22
+ #
23
+ # roles:
24
+ # quality:
25
+ # targets:
26
+ # codex:
27
+ # provider: openai
28
+ # model: gpt-5.4
53
29
 
54
- # @glm-minimal — narrow ≤5K-input one-shot extractor / classifier. Named
55
- # for its original tuning target (Minimax on the OpenCode proxy); on
56
- # harnesses without that proxy it falls through to a cheap general model.
57
- glm-minimal:
58
- provider: anthropic
59
- model: claude-haiku-4-5
60
- targets:
61
- opencode:
62
- provider: opencode
63
- model: opencode/minimax-m2.5-free
30
+ extends: standard
package/opencode.json CHANGED
@@ -2,13 +2,13 @@
2
2
  "$schema": "https://opencode.ai/config.json",
3
3
  "model": "opencode/glm-5.1",
4
4
  "agent": {
5
- "general-free": {
5
+ "fast": {
6
6
  "model": "opencode/big-pickle"
7
7
  },
8
- "general-paid": {
9
- "model": "opencode/glm-5.1"
8
+ "quality": {
9
+ "model": "opencode-go/kimi-k2.5"
10
10
  },
11
- "glm-minimal": {
11
+ "minimal": {
12
12
  "model": "opencode/minimax-m2.5-free"
13
13
  }
14
14
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "job-forge",
3
- "version": "2.8.0",
3
+ "version": "2.10.0",
4
4
  "description": "AI-powered job search pipeline built on opencode",
5
5
  "type": "module",
6
6
  "bin": {
@@ -82,9 +82,9 @@
82
82
  "playwright": "^1.58.1"
83
83
  },
84
84
  "devDependencies": {
85
- "@razroo/iso": "^0.2.2",
86
- "@razroo/iso-harness": "^0.5.0",
87
- "@razroo/iso-route": "^0.2.0",
85
+ "@razroo/iso": "^0.2.4",
86
+ "@razroo/iso-harness": "^0.6.0",
87
+ "@razroo/iso-route": "^0.3.0",
88
88
  "@razroo/iso-trace": "^0.1.0"
89
89
  }
90
90
  }