openhermes 4.12.1 → 4.13.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 (73) hide show
  1. package/CONTEXT.md +6 -6
  2. package/ETHOS.md +2 -2
  3. package/README.md +11 -17
  4. package/bootstrap.ts +118 -126
  5. package/docs/HOW-IT-WORKS.md +162 -0
  6. package/docs/adr/ADR-0001-rebuild-vs-increment.md +30 -0
  7. package/docs/adr/ADR-0002-routing-graph-vs-linear-chain.md +36 -0
  8. package/docs/adr/ADR-0003-per-directory-plan-storage.md +34 -0
  9. package/docs/adr/ADR-0004-composer-fragment-architecture.md +42 -0
  10. package/docs/adr/ADR-0005-hook-system-design.md +42 -0
  11. package/docs/adr/README.md +9 -0
  12. package/harness/codex/AUTOPILOT.md +35 -40
  13. package/harness/codex/CHARTER.md +3 -3
  14. package/harness/lib/composer/compose.test.ts +29 -29
  15. package/harness/lib/composer/fragments/02-delegation.md +5 -5
  16. package/harness/lib/composer/fragments/04-task-flow.md +13 -13
  17. package/harness/lib/composer/fragments/08-routing.md +1 -1
  18. package/harness/lib/composer/fragments/09-guardrails.md +25 -25
  19. package/harness/lib/composer/index.ts +1 -1
  20. package/harness/lib/guards/guard-config.ts +72 -72
  21. package/harness/lib/hooks/builtins/confidence-gate-hook.ts +9 -9
  22. package/harness/lib/hooks/builtins/delegation-depth-hook.ts +1 -1
  23. package/harness/lib/hooks/builtins/dynamic-route-hook.ts +99 -99
  24. package/harness/lib/hooks/builtins/next-route-hook.ts +24 -24
  25. package/harness/lib/hooks/builtins/plan-check-hook.ts +5 -5
  26. package/harness/lib/hooks/builtins/route-tracking-hook.ts +1 -1
  27. package/harness/lib/hooks/hooks.test.ts +160 -324
  28. package/harness/lib/hooks/index.ts +38 -42
  29. package/harness/lib/hooks/registry.ts +309 -416
  30. package/harness/lib/hooks/types.ts +116 -119
  31. package/harness/lib/plans/plan-location.ts +134 -134
  32. package/harness/lib/routing/index.ts +21 -21
  33. package/harness/lib/routing/route-guidance.ts +147 -147
  34. package/harness/lib/routing/route-resolver.ts +58 -58
  35. package/harness/lib/routing/routing.test.ts +195 -195
  36. package/harness/lib/routing/skill-frontmatter.ts +125 -125
  37. package/harness/lib/routing/types.ts +52 -52
  38. package/harness/skills/oh-ascii/SKILL.md +1 -1
  39. package/harness/skills/oh-fusion/DEEP.md +109 -109
  40. package/harness/skills/oh-fusion/SKILL.md +47 -47
  41. package/harness/skills/oh-init/DEEP.md +2 -2
  42. package/harness/skills/oh-plan-review/DEEP.md +1 -1
  43. package/harness/skills/oh-planner/DEEP.md +3 -3
  44. package/harness/skills/oh-review/DEEP.md +5 -5
  45. package/package.json +56 -53
  46. package/harness/lib/background/background.test.ts +0 -216
  47. package/harness/lib/background/index.ts +0 -7
  48. package/harness/lib/background/interfaces.ts +0 -31
  49. package/harness/lib/background/manager.ts +0 -320
  50. package/harness/lib/hooks/builtins/error-recovery-hook.ts +0 -107
  51. package/harness/lib/hooks/builtins/memory-sync-hook.ts +0 -73
  52. package/harness/lib/hooks/builtins/sanity-check-hook.ts +0 -52
  53. package/harness/lib/hooks/builtins/subagent-failure-hook.ts +0 -93
  54. package/harness/lib/memory/index.ts +0 -18
  55. package/harness/lib/memory/interfaces.ts +0 -53
  56. package/harness/lib/memory/memory-manager.ts +0 -205
  57. package/harness/lib/memory/memory.test.ts +0 -485
  58. package/harness/lib/memory/plan-store.ts +0 -346
  59. package/harness/lib/recovery/handler.ts +0 -243
  60. package/harness/lib/recovery/index.ts +0 -14
  61. package/harness/lib/recovery/interfaces.ts +0 -48
  62. package/harness/lib/recovery/patterns.ts +0 -149
  63. package/harness/lib/recovery/recovery.test.ts +0 -312
  64. package/harness/lib/sanity/anomaly-tracker.ts +0 -127
  65. package/harness/lib/sanity/checker.ts +0 -189
  66. package/harness/lib/sanity/index.ts +0 -13
  67. package/harness/lib/sanity/interfaces.ts +0 -24
  68. package/harness/lib/sanity/sanity.test.ts +0 -472
  69. package/harness/lib/sync/file-watcher.ts +0 -175
  70. package/harness/lib/sync/index.ts +0 -11
  71. package/harness/lib/sync/interfaces.ts +0 -27
  72. package/harness/lib/sync/plan-sync.ts +0 -533
  73. package/harness/lib/sync/sync.test.ts +0 -858
@@ -1,52 +1,52 @@
1
- export const ROUTE_OUTCOMES = ["pass", "fail", "blocker"] as const;
2
- export const ROUTE_VERIFICATIONS = ["verified", "unverified"] as const;
3
- export const ROUTE_ACTIONS = ["done", "fixable", "needs-context", "blocked"] as const;
4
- export const ROUTE_WORK_TYPES = ["implement", "verify", "ship", "diagnose", "surface"] as const;
5
-
6
- export type RouteOutcome = (typeof ROUTE_OUTCOMES)[number];
7
- export type RouteVerification = (typeof ROUTE_VERIFICATIONS)[number];
8
- export type RouteAction = (typeof ROUTE_ACTIONS)[number];
9
- export type RouteWork = (typeof ROUTE_WORK_TYPES)[number];
10
-
11
- export interface SkillRouteMap {
12
- pass: string[];
13
- fail: string[];
14
- blocker: string[];
15
- }
16
-
17
- export interface SkillRoutingFrontmatter {
18
- name?: string;
19
- description?: string;
20
- tier?: string;
21
- route: SkillRouteMap;
22
- }
23
-
24
- export interface RouteEvidence {
25
- outcome: RouteOutcome;
26
- verification?: RouteVerification;
27
- action?: RouteAction;
28
- work?: RouteWork;
29
- target?: string;
30
- reason?: string;
31
- }
32
-
33
- export interface RouteResolution {
34
- outcome: RouteOutcome;
35
- verification?: RouteVerification;
36
- action?: RouteAction;
37
- work?: RouteWork;
38
- candidates: string[];
39
- selected: string | null;
40
- reason: string;
41
- }
42
-
43
- export interface RuntimeRouteDecision {
44
- selected: string;
45
- source: "next_route" | "route_guidance";
46
- outcome?: RouteOutcome;
47
- verification?: RouteVerification;
48
- action?: RouteAction;
49
- work?: RouteWork;
50
- candidates?: string[];
51
- reason?: string;
52
- }
1
+ export const ROUTE_OUTCOMES = ["pass", "fail", "blocker"] as const;
2
+ export const ROUTE_VERIFICATIONS = ["verified", "unverified"] as const;
3
+ export const ROUTE_ACTIONS = ["done", "fixable", "needs-context", "blocked"] as const;
4
+ export const ROUTE_WORK_TYPES = ["implement", "verify", "ship", "diagnose", "surface"] as const;
5
+
6
+ export type RouteOutcome = (typeof ROUTE_OUTCOMES)[number];
7
+ export type RouteVerification = (typeof ROUTE_VERIFICATIONS)[number];
8
+ export type RouteAction = (typeof ROUTE_ACTIONS)[number];
9
+ export type RouteWork = (typeof ROUTE_WORK_TYPES)[number];
10
+
11
+ export interface SkillRouteMap {
12
+ pass: string[];
13
+ fail: string[];
14
+ blocker: string[];
15
+ }
16
+
17
+ export interface SkillRoutingFrontmatter {
18
+ name?: string;
19
+ description?: string;
20
+ tier?: string;
21
+ route: SkillRouteMap;
22
+ }
23
+
24
+ export interface RouteEvidence {
25
+ outcome: RouteOutcome;
26
+ verification?: RouteVerification;
27
+ action?: RouteAction;
28
+ work?: RouteWork;
29
+ target?: string;
30
+ reason?: string;
31
+ }
32
+
33
+ export interface RouteResolution {
34
+ outcome: RouteOutcome;
35
+ verification?: RouteVerification;
36
+ action?: RouteAction;
37
+ work?: RouteWork;
38
+ candidates: string[];
39
+ selected: string | null;
40
+ reason: string;
41
+ }
42
+
43
+ export interface RuntimeRouteDecision {
44
+ selected: string;
45
+ source: "next_route" | "route_guidance";
46
+ outcome?: RouteOutcome;
47
+ verification?: RouteVerification;
48
+ action?: RouteAction;
49
+ work?: RouteWork;
50
+ candidates?: string[];
51
+ reason?: string;
52
+ }
@@ -19,7 +19,7 @@ Create and validate ASCII diagrams in three phases: design, generate, validate.
19
19
  3. Fence all diagrams in markdown code blocks
20
20
  4. Keep diagrams under 80 columns with max 3 nesting levels
21
21
  5. For complex diagrams, author PlantUML and render with `-utxt`
22
- 6. Validate structural alignment with `scripts/check_ascii_alignment.py`
22
+ 6. Validate visual alignment manually: check that box-drawing characters connect cleanly and all columns align within the markdown code block
23
23
  7. Fix reported issues and re-validate until clean
24
24
 
25
25
  ## Routing
@@ -1,10 +1,10 @@
1
1
  # oh-fusion — Deep Reference
2
2
 
3
- ## When to Use
4
-
5
- Use when a user wants to bring an external skill or capability into the OpenHermes harness as an OH-native skill.
6
-
7
- ## Phase 1: Discovery
3
+ ## When to Use
4
+
5
+ Use when a user wants to bring an external skill or capability into the OpenHermes harness as an OH-native skill.
6
+
7
+ ## Phase 1: Discovery
8
8
 
9
9
  | Source | Access |
10
10
  |--------|--------|
@@ -14,63 +14,63 @@ Use when a user wants to bring an external skill or capability into the OpenHerm
14
14
  | User path | Resolve and read |
15
15
  | Inline text | Capture raw |
16
16
 
17
- Confirm: content loaded, frontmatter present, no access restrictions. For multiple: all loaded.
18
-
19
- ## Phase 2: Analysis
20
-
21
- ### Required Lenses
22
-
23
- Analyze every source through these lenses:
24
-
25
- - **OH gaps** — what OH does not currently cover, or covers weakly
26
- - **OH wins** — where OH already outperforms the source and should not regress
27
- - **Missed patterns** — reusable patterns the source surfaces that OH should absorb
28
- - **Overlap target** — the strongest existing `oh-*` candidate for merge, if any
29
-
30
- ### Merge Rubric
31
-
32
- Choose one verdict:
33
-
34
- | Verdict | Use when |
35
- |---------|----------|
36
- | Merge | The source upgrades an existing OH capability more than it defines a new one |
37
- | Standalone | The source adds a distinct capability with its own trigger, workflow, and routing needs |
38
- | Discard | The source is redundant, weak, or anti-native |
39
-
40
- ### Strength Check
41
-
42
- Reject or rewrite any protocol that makes OH weaker, slower, noisier, or less OpenCode-native.
43
-
44
- ### Fusion Report Template
45
- ```markdown
46
- ## OH gaps
47
- - ...
48
-
49
- ## OH wins
50
- - ...
51
-
52
- ## Missed patterns
53
- - ...
54
-
55
- ## Merge verdict
56
- - Verdict: <merge | standalone | discard>
57
- - Target: <existing oh-* or new oh-*>
58
- - Why: <short rationale>
59
-
60
- ## Action plan
61
- 1. ...
62
- 2. ...
63
-
64
- ## Approval gate
65
- - Status: pending approval
66
- - Next move after approval: <skill/action>
67
- ```
68
-
69
- ## Phase 3: Decision
70
-
71
- Default to `merge` when the source sharpens an existing OH workflow. Default to `standalone` only when the capability stays clean, distinct, and reusable after removing overlap.
72
-
73
- ## Phase 4: Adaptation
17
+ Confirm: content loaded, frontmatter present, no access restrictions. For multiple: all loaded.
18
+
19
+ ## Phase 2: Analysis
20
+
21
+ ### Required Lenses
22
+
23
+ Analyze every source through these lenses:
24
+
25
+ - **OH gaps** — what OH does not currently cover, or covers weakly
26
+ - **OH wins** — where OH already outperforms the source and should not regress
27
+ - **Missed patterns** — reusable patterns the source surfaces that OH should absorb
28
+ - **Overlap target** — the strongest existing `oh-*` candidate for merge, if any
29
+
30
+ ### Merge Rubric
31
+
32
+ Choose one verdict:
33
+
34
+ | Verdict | Use when |
35
+ |---------|----------|
36
+ | Merge | The source upgrades an existing OH capability more than it defines a new one |
37
+ | Standalone | The source adds a distinct capability with its own trigger, workflow, and routing needs |
38
+ | Discard | The source is redundant, weak, or anti-native |
39
+
40
+ ### Strength Check
41
+
42
+ Reject or rewrite any protocol that makes OH weaker, slower, noisier, or less OpenCode-native.
43
+
44
+ ### Fusion Report Template
45
+ ```markdown
46
+ ## OH gaps
47
+ - ...
48
+
49
+ ## OH wins
50
+ - ...
51
+
52
+ ## Missed patterns
53
+ - ...
54
+
55
+ ## Merge verdict
56
+ - Verdict: <merge | standalone | discard>
57
+ - Target: <existing oh-* or new oh-*>
58
+ - Why: <short rationale>
59
+
60
+ ## Action plan
61
+ 1. ...
62
+ 2. ...
63
+
64
+ ## Approval gate
65
+ - Status: pending approval
66
+ - Next move after approval: <skill/action>
67
+ ```
68
+
69
+ ## Phase 3: Decision
70
+
71
+ Default to `merge` when the source sharpens an existing OH workflow. Default to `standalone` only when the capability stays clean, distinct, and reusable after removing overlap.
72
+
73
+ ## Phase 4: Adaptation
74
74
 
75
75
  ### Frontmatter
76
76
  ```yaml
@@ -79,34 +79,34 @@ description: "Adapted from <source>. Core function. Use when ..."
79
79
  tier: <2|3|4>
80
80
  ```
81
81
 
82
- ### Body Structure
83
- 1. **Summary** — one short paragraph
84
- 2. **When to Use** — clear triggering context
85
- 3. **Protocol** — numbered workflow
86
- 4. **Rubric / guardrails** — what to merge, reject, or escalate
87
- 5. **Routing** — pass/fail/blocker table
88
-
89
- ### Adaptation Rules
90
- - Remove emojis. Replace ecosystem terms with OH equivalents.
91
- - Convert relative paths to OH harness conventions.
92
- - Add routing table based on the skill's purpose.
93
- - Keep all concrete rules, examples, and anti-patterns from the original.
94
- - Discard fluff, philosophy, and motivational language.
95
- - Preserve the original's unique signal — that's why you're importing it.
96
- - Keep the result OpenCode/OpenHermes-native only.
97
-
98
- ### Naming
99
- Match `^[a-z0-9]+(-[a-z0-9]+)*$`, prefix `oh-`. Original name if good fit, adapt if not. Fusion names signal combined purpose.
100
-
101
- ## Phase 5: Approval Gate
102
-
103
- Before any harness mutation, surface the fusion report and wait for approval. Approved intent already present in the conversation counts. Do not ask new questions unless a blocker cannot be resolved from the codebase or prior conversation.
104
-
105
- ## Phase 6: Fusion (opt — skip for single imports)
106
-
107
- For each skill being fused, identify:
108
- - **Unique concepts** — content only this skill has
109
- - **Overlapping content** — same idea expressed differently (keep the better version)
82
+ ### Body Structure
83
+ 1. **Summary** — one short paragraph
84
+ 2. **When to Use** — clear triggering context
85
+ 3. **Protocol** — numbered workflow
86
+ 4. **Rubric / guardrails** — what to merge, reject, or escalate
87
+ 5. **Routing** — pass/fail/blocker table
88
+
89
+ ### Adaptation Rules
90
+ - Remove emojis. Replace ecosystem terms with OH equivalents.
91
+ - Convert relative paths to OH harness conventions.
92
+ - Add routing table based on the skill's purpose.
93
+ - Keep all concrete rules, examples, and anti-patterns from the original.
94
+ - Discard fluff, philosophy, and motivational language.
95
+ - Preserve the original's unique signal — that's why you're importing it.
96
+ - Keep the result OpenCode/OpenHermes-native only.
97
+
98
+ ### Naming
99
+ Match `^[a-z0-9]+(-[a-z0-9]+)*$`, prefix `oh-`. Original name if good fit, adapt if not. Fusion names signal combined purpose.
100
+
101
+ ## Phase 5: Approval Gate
102
+
103
+ Before any harness mutation, surface the fusion report and wait for approval. Approved intent already present in the conversation counts. Do not ask new questions unless a blocker cannot be resolved from the codebase or prior conversation.
104
+
105
+ ## Phase 6: Fusion (opt — skip for single imports)
106
+
107
+ For each skill being fused, identify:
108
+ - **Unique concepts** — content only this skill has
109
+ - **Overlapping content** — same idea expressed differently (keep the better version)
110
110
  - **Conflicting directives** — skills that say opposite things (surface to user)
111
111
 
112
112
  ### Merge Architecture
@@ -118,26 +118,26 @@ Structure so each source contributes its strength. Do NOT concatenate — must r
118
118
  ### Phase B: <from skill 2>
119
119
  ```
120
120
 
121
- ### Naming
122
- Name signals combined purpose, not individual sources. E.g., `oh-facade` from redesign + design-taste + high-end-visual, not `oh-redesign-plus-taste`.
123
-
124
- ## Phase 7: Integration
125
-
126
- 1. **Create file** → user dir (`~/.config/opencode/skills/oh-<name>/SKILL.md`)
127
- 2. **Wire AUTOPILOT** → add to auto-classify matrix in `harness/codex/AUTOPILOT.md`: signal keywords → classification → "Load **oh-<name>**. Do not ask."
128
- 3. **Wire routing** → add `route:` frontmatter in the skill. Dynamic loading reads `route.pass`, `route.fail`, `route.blocker` directly from `SKILL.md` — no ROUTING.md edit needed. Skill becomes routable automatically.
121
+ ### Naming
122
+ Name signals combined purpose, not individual sources. E.g., `oh-facade` from redesign + design-taste + high-end-visual, not `oh-redesign-plus-taste`.
123
+
124
+ ## Phase 7: Integration
125
+
126
+ 1. **Create file** → user dir (`~/.config/opencode/skills/oh-<name>/SKILL.md`)
127
+ 2. **Wire AUTOPILOT** → add to auto-classify matrix in `harness/codex/AUTOPILOT.md`: signal keywords → classification → "Load **oh-<name>**. Do not ask."
128
+ 3. **Wire routing** → add `route:` frontmatter in the skill. Dynamic loading reads `route.pass`, `route.fail`, `route.blocker` directly from `SKILL.md` — no ROUTING.md edit needed. Skill becomes routable automatically.
129
129
  4. **Wire AGENTS.md** → add to skills table with tier and purpose. Increment total count.
130
130
  5. **Wire openhermes.md** → add to orchestrator's skill list in `harness/agents/openhermes.md`.
131
131
  6. **Verify** → route to `oh-skills-link` to confirm OpenCode discovers it.
132
132
 
133
- ## Anti-patterns
134
-
135
- - Importing without analysis (always run Phase 2)
136
- - Asking before checking code or prior conversation
137
- - Changing the harness before the approval gate clears
138
- - Keeping everything — most external skill text is fluff
139
- - Fusing incompatible domains (confusing to model and user)
140
- - Naming after source ("oh-tailwind-v2") instead of capability ("oh-styles")
141
- - Skipping route frontmatter — without it, autopilot can't route
142
- - Overwriting existing routing without checking for collisions
143
- - Shipping a protocol that weakens OH or makes it less native
133
+ ## Anti-patterns
134
+
135
+ - Importing without analysis (always run Phase 2)
136
+ - Asking before checking code or prior conversation
137
+ - Changing the harness before the approval gate clears
138
+ - Keeping everything — most external skill text is fluff
139
+ - Fusing incompatible domains (confusing to model and user)
140
+ - Naming after source ("oh-tailwind-v2") instead of capability ("oh-styles")
141
+ - Skipping route frontmatter — without it, autopilot can't route
142
+ - Overwriting existing routing without checking for collisions
143
+ - Shipping a protocol that weakens OH or makes it less native
@@ -1,50 +1,50 @@
1
1
  ---
2
2
  name: oh-fusion
3
- description: "Use when the user has an existing skill, finds a skill in their .agents/skills, or wants to bring an external capability into OH as a skill."
4
- tier: 3
5
- route:
6
- pass: [oh-skill-craft, oh-skills-link]
7
- fail: surface
8
- blocker: surface
9
- ---
10
-
11
- # oh-fusion
12
-
13
- Skill fusion pipeline: Discover → Analyze → Verdict → Approval Gate → Integrate.
14
-
15
- ## Protocol
16
-
17
- 1. Load skill content — read from `.agents/skills/`, `npx skills`, URL, user path, or inline text.
18
- 2. Analyze the source against OH — report `OH gaps`, `OH wins`, and `missed patterns`.
19
- 3. Compare overlap — identify the best existing `oh-*` target, if any.
20
- 4. Decide with a rubric:
21
- - **Merge** when the source mainly strengthens an existing OH capability.
22
- - **Standalone** when the source adds a distinct, reusable capability.
23
- - **Discard** when the signal is weak or redundant.
24
- 5. Produce a fusion report with these sections, in order:
25
- - `OH gaps`
26
- - `OH wins`
27
- - `missed patterns`
28
- - `merge verdict`
29
- - `action plan`
30
- - `approval gate`
31
- 6. Resolve from code and prior conversation first. Ask only if a blocker remains.
32
- 7. After approval, adapt to OH-native form and route directly to implementation.
33
- 8. Verify discovery with `oh-skills-link` when a new or renamed skill is added.
34
-
35
- ## Merge Rubric
36
-
37
- - **Merge into existing `oh-*`** when domain, trigger, and route already exist; the source mostly adds sharper rules, better sequencing, or stronger edge-case handling.
38
- - **Create standalone `oh-*`** when the source introduces a capability with distinct trigger words, workflow, and handoff points.
39
- - **Discard** when the source adds fluff, duplicates OH, or weakens OpenCode/OpenHermes-native operation.
40
-
41
- ## Routing
42
-
43
- | Outcome | Route |
44
- |---------|-------|
45
- | Approved merge or standalone plan | → oh-skill-craft |
46
- | New or renamed skill needs discovery check | → oh-skills-link |
47
- | Analysis: discard | → surface |
48
- | Approval not yet granted | → surface |
3
+ description: "Use when the user has an existing skill, finds a skill in their .agents/skills, or wants to bring an external capability into OH as a skill."
4
+ tier: 3
5
+ route:
6
+ pass: [oh-skill-craft, oh-skills-link]
7
+ fail: surface
8
+ blocker: surface
9
+ ---
10
+
11
+ # oh-fusion
12
+
13
+ Skill fusion pipeline: Discover → Analyze → Verdict → Approval Gate → Integrate.
14
+
15
+ ## Protocol
16
+
17
+ 1. Load skill content — read from `.agents/skills/`, `npx skills`, URL, user path, or inline text.
18
+ 2. Analyze the source against OH — report `OH gaps`, `OH wins`, and `missed patterns`.
19
+ 3. Compare overlap — identify the best existing `oh-*` target, if any.
20
+ 4. Decide with a rubric:
21
+ - **Merge** when the source mainly strengthens an existing OH capability.
22
+ - **Standalone** when the source adds a distinct, reusable capability.
23
+ - **Discard** when the signal is weak or redundant.
24
+ 5. Produce a fusion report with these sections, in order:
25
+ - `OH gaps`
26
+ - `OH wins`
27
+ - `missed patterns`
28
+ - `merge verdict`
29
+ - `action plan`
30
+ - `approval gate`
31
+ 6. Resolve from code and prior conversation first. Ask only if a blocker remains.
32
+ 7. After approval, adapt to OH-native form and route directly to implementation.
33
+ 8. Verify discovery with `oh-skills-link` when a new or renamed skill is added.
34
+
35
+ ## Merge Rubric
36
+
37
+ - **Merge into existing `oh-*`** when domain, trigger, and route already exist; the source mostly adds sharper rules, better sequencing, or stronger edge-case handling.
38
+ - **Create standalone `oh-*`** when the source introduces a capability with distinct trigger words, workflow, and handoff points.
39
+ - **Discard** when the source adds fluff, duplicates OH, or weakens OpenCode/OpenHermes-native operation.
40
+
41
+ ## Routing
42
+
43
+ | Outcome | Route |
44
+ |---------|-------|
45
+ | Approved merge or standalone plan | → oh-skill-craft |
46
+ | New or renamed skill needs discovery check | → oh-skills-link |
47
+ | Analysis: discard | → surface |
48
+ | Approval not yet granted | → surface |
49
49
  | Blocker | → surface |
50
-
50
+
@@ -26,7 +26,7 @@ OpenHermes is the primary orchestrator. All routing, planning, and delegation fl
26
26
  - **Test command**: <fill or auto-detect>
27
27
 
28
28
  ## Key Directives
29
- - Plan first. Write to `~/.local/share/openhermes/plans/<project>/plan-<nnn>.md` before multi-file changes.
29
+ - Plan first. Write to `~/.local/share/openhermes/plans/<project>/plan-<nnn>.md` before multi-file changes.
30
30
  - OpenHermes delegates everything to sub-agents — never executes directly.
31
31
  - Verify before claiming success. Read files, run commands, confirm output.
32
32
  - Use oh-* skills on demand via the skill tool.
@@ -40,7 +40,7 @@ Ask user to fill or auto-detect from manifests.
40
40
  ```markdown
41
41
  ## OpenHermes Orchestrator
42
42
  OpenHermes is the primary orchestrator.
43
- - **Plan**: `~/.local/share/openhermes/plans/<project>/plan-<nnn>.md`
43
+ - **Plan**: `~/.local/share/openhermes/plans/<project>/plan-<nnn>.md`
44
44
  - **Never execute**: delegates everything to sub-agents
45
45
  - **Verify before claim**: read files, run commands, confirm output
46
46
  ```
@@ -80,7 +80,7 @@ One section at a time: Architecture → Code Quality → Tests → Performance.
80
80
 
81
81
  ## Output
82
82
 
83
- Plan file (`~/.local/share/openhermes/plans/<project-name>/plan-<nnn>.md`) updated with findings and decisions.
83
+ Plan file (`~/.local/share/openhermes/plans/<project-name>/plan-<nnn>.md`) updated with findings and decisions.
84
84
 
85
85
  ## Anti-patterns
86
86
 
@@ -92,18 +92,18 @@ Runs sequentially: **Strategy → Architecture → Design → Engineering → DX
92
92
  Every plan written by oh-planner uses this canonical format.
93
93
 
94
94
  ### Storage
95
- Canonical path: `~/.local/share/openhermes/plans/<project>/plan-<nnn>.md`
95
+ Canonical path: `~/.local/share/openhermes/plans/<project>/plan-<nnn>.md`
96
96
 
97
97
  ### Template
98
98
  ```markdown
99
99
  # PLAN: <project>
100
100
 
101
- Plan ID: <project>/plan-<nnn>
101
+ Plan ID: <project>/plan-<nnn>
102
102
  Project: <project>
103
103
  Status: active | in-progress | blocked | complete | abandoned
104
104
  Created: <ts> | Updated: <ts>
105
105
  Project Path: <absolute-path>
106
- Plan Path: <canonical-path>/<project>/plan-<nnn>.md
106
+ Plan Path: <canonical-path>/<project>/plan-<nnn>.md
107
107
  Objective: <short>
108
108
 
109
109
  ## Current State
@@ -20,14 +20,14 @@ AGENTS.md, CLAUDE.md, CONTRIBUTING.md, CONTEXT.md, ADRs, eslint/biome/prettier c
20
20
  - **Standards** — Read standards + diff. Per-file/hunk: violations citing standard + rule. Distinguish hard violations from judgment calls. Skip tool-enforced.
21
21
  - **Spec** — Read spec + diff. Report: missing/partial requirements, scope creep, wrong implementations. Quote spec line.
22
22
 
23
- ### 5. Aggregate
24
- Present under `## Standards` / `## Spec`. Do not merge. End with total + worst issue.
25
-
26
- Concrete, low-risk, fixable findings should be converted into implementation work and dispatched to oh-builder immediately instead of stopping as report-only notes.
23
+ ### 5. Aggregate
24
+ Present under `## Standards` / `## Spec`. Do not merge. End with total + worst issue.
25
+
26
+ Concrete, low-risk, fixable findings should be converted into implementation work and dispatched to oh-builder immediately instead of stopping as report-only notes.
27
27
 
28
28
  ### Safety Check (inline before spawning)
29
29
  - SQL injection, LLM trust boundary violations, conditional side effects (test vs prod), hardcoded secrets
30
- - Block immediately if critical — do not spawn sub-agents.
30
+ - Block immediately if critical — do not spawn sub-agents.
31
31
 
32
32
  ## Mode B: Architecture Deepening
33
33
 
package/package.json CHANGED
@@ -1,55 +1,58 @@
1
1
  {
2
- "name": "openhermes",
3
- "version": "4.12.1",
4
- "description": "Autonomous agent orchestration for OpenCode.",
5
- "type": "module",
6
- "license": "MIT",
7
- "engines": {
8
- "bun": "\u003e=1.0"
9
- },
10
- "main": "./index.ts",
11
- "dependencies": {
12
- "@opencode-ai/plugin": "1.15.0"
13
- },
14
- "exports": {
15
- ".": "./index.ts",
16
- "./bootstrap": "./bootstrap.ts"
17
- },
18
- "files": [
19
- "index.ts",
20
- "bootstrap.ts",
21
- "tsconfig.json",
22
- "ETHOS.md",
23
- "CONTEXT.md",
24
- "lib/",
25
- "harness/codex/",
26
- "harness/instructions/",
27
- "harness/skills/",
28
- "harness/agents/",
29
- "harness/lib/"
30
- ],
31
- "scripts": {
32
- "test": "bun test"
33
- },
34
- "keywords": [
35
- "opencode",
36
- "openhermes",
37
- "orchestrator",
38
- "skills",
39
- "commands",
40
- "agents",
41
- "rules"
42
- ],
43
- "repository": {
44
- "type": "git",
45
- "url": "git+https://github.com/nathwn12/openhermes.git"
46
- },
47
- "bugs": {
48
- "url": "https://github.com/nathwn12/openhermes/issues"
49
- },
50
- "homepage": "https://github.com/nathwn12/openhermes#readme",
51
- "author": "nathwn12",
52
- "devDependencies": {
53
- "@types/node": "^25.8.0"
54
- }
2
+ "name": "openhermes",
3
+ "version": "4.13.0",
4
+ "description": "Autonomous agent orchestration for OpenCode.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "engines": {
8
+ "bun": ">=1.0"
9
+ },
10
+ "main": "./index.ts",
11
+ "dependencies": {
12
+ "@opencode-ai/plugin": "1.15.0"
13
+ },
14
+ "exports": {
15
+ ".": "./index.ts",
16
+ "./bootstrap": "./bootstrap.ts"
17
+ },
18
+ "files": [
19
+ "index.ts",
20
+ "bootstrap.ts",
21
+ "tsconfig.json",
22
+ "ETHOS.md",
23
+ "CONTEXT.md",
24
+ "docs/",
25
+ "lib/",
26
+ "harness/codex/",
27
+ "harness/instructions/",
28
+ "harness/skills/",
29
+ "harness/agents/",
30
+ "harness/lib/"
31
+ ],
32
+ "scripts": {
33
+ "test": "bun test",
34
+ "typecheck": "bun tsc --noEmit"
35
+ },
36
+ "keywords": [
37
+ "opencode",
38
+ "openhermes",
39
+ "orchestrator",
40
+ "skills",
41
+ "commands",
42
+ "agents",
43
+ "rules"
44
+ ],
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "git+https://github.com/nathwn12/openhermes.git"
48
+ },
49
+ "bugs": {
50
+ "url": "https://github.com/nathwn12/openhermes/issues"
51
+ },
52
+ "homepage": "https://github.com/nathwn12/openhermes#readme",
53
+ "author": "nathwn12",
54
+ "devDependencies": {
55
+ "@types/node": "^25.8.0",
56
+ "typescript": "^6.0.3"
57
+ }
55
58
  }