openhermes 1.2.2

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 (69) hide show
  1. package/README.md +281 -0
  2. package/autorecall.mjs +167 -0
  3. package/bootstrap.mjs +255 -0
  4. package/curator.mjs +470 -0
  5. package/harness/commands/build-fix.md +60 -0
  6. package/harness/commands/code-review.md +71 -0
  7. package/harness/commands/doctor.md +42 -0
  8. package/harness/commands/learn.md +37 -0
  9. package/harness/commands/memory-search.md +37 -0
  10. package/harness/commands/plan.md +53 -0
  11. package/harness/commands/security.md +93 -0
  12. package/harness/constitution/soul.md +76 -0
  13. package/harness/instructions/RUNTIME.md +21 -0
  14. package/harness/prompts/architect.txt +175 -0
  15. package/harness/prompts/build-error-resolver.md +37 -0
  16. package/harness/prompts/code-reviewer.md +33 -0
  17. package/harness/prompts/e2e-runner.txt +305 -0
  18. package/harness/prompts/explore.md +29 -0
  19. package/harness/prompts/planner.md +30 -0
  20. package/harness/prompts/security-reviewer.md +35 -0
  21. package/harness/rules/audit.md +84 -0
  22. package/harness/rules/checkpointing.md +75 -0
  23. package/harness/rules/context-loading.md +33 -0
  24. package/harness/rules/credential-exposure.md +0 -0
  25. package/harness/rules/delegation.md +76 -0
  26. package/harness/rules/memory-management.md +28 -0
  27. package/harness/rules/precedence.md +52 -0
  28. package/harness/rules/promotion.md +46 -0
  29. package/harness/rules/ranking.md +64 -0
  30. package/harness/rules/retrieval.md +94 -0
  31. package/harness/rules/runtime-guards.md +196 -0
  32. package/harness/rules/self-heal.md +79 -0
  33. package/harness/rules/session-start.md +34 -0
  34. package/harness/rules/skills-management.md +165 -0
  35. package/harness/rules/state-drift.md +192 -0
  36. package/harness/rules/verification.md +88 -0
  37. package/harness/skills/.bundled_manifest +17 -0
  38. package/harness/skills/.usage.json +6 -0
  39. package/harness/skills/api-design/SKILL.md +523 -0
  40. package/harness/skills/backend-patterns/SKILL.md +598 -0
  41. package/harness/skills/coding-standards/SKILL.md +549 -0
  42. package/harness/skills/e2e-testing/SKILL.md +326 -0
  43. package/harness/skills/frontend-patterns/SKILL.md +642 -0
  44. package/harness/skills/frontend-slides/SKILL.md +184 -0
  45. package/harness/skills/security-review/SKILL.md +495 -0
  46. package/harness/skills/strategic-compact/SKILL.md +131 -0
  47. package/harness/skills/tdd-workflow/SKILL.md +463 -0
  48. package/harness/skills/verification-loop/SKILL.md +126 -0
  49. package/index.mjs +5 -0
  50. package/lib/hardening.mjs +113 -0
  51. package/lib/memory-tools-plugin.mjs +265 -0
  52. package/lib/schema-validator.mjs +77 -0
  53. package/lib/tools/_memory.mjs +230 -0
  54. package/lib/tools/hm_get.mjs +13 -0
  55. package/lib/tools/hm_latest.mjs +12 -0
  56. package/lib/tools/hm_list.mjs +13 -0
  57. package/lib/tools/hm_put.mjs +14 -0
  58. package/lib/tools/hm_search.mjs +16 -0
  59. package/package.json +49 -0
  60. package/schemas/audit.schema.json +61 -0
  61. package/schemas/backlog.schema.json +42 -0
  62. package/schemas/checkpoint.schema.json +44 -0
  63. package/schemas/constraint.schema.json +41 -0
  64. package/schemas/decision.schema.json +42 -0
  65. package/schemas/instinct.schema.json +42 -0
  66. package/schemas/loop-state.schema.json +33 -0
  67. package/schemas/mistake.schema.json +43 -0
  68. package/schemas/verification_receipt.schema.json +67 -0
  69. package/skill-builder.mjs +113 -0
@@ -0,0 +1,165 @@
1
+ # Skills Management — SKILL.md Format, Progressive Disclosure, Agent-Managed Lifecycle
2
+
3
+ Sources: Hermes Agent SKILL.md frontmatter standard, progressive disclosure (L0/L1/L2), agent-managed skill lifecycle.
4
+
5
+ ## SKILL.md Frontmatter Format
6
+
7
+ Every skill MUST have YAML frontmatter with these fields:
8
+
9
+ ```yaml
10
+ ---
11
+ name: my-skill
12
+ description: One-line description of what this skill does
13
+ version: 1.0.0
14
+ author: agent # "agent" if auto-created, "user" if hand-authored
15
+ tags: [testing, python] # Search/discovery tags
16
+ category: development # Category grouping in skills directory
17
+ trigger: # Keywords that trigger loading this skill
18
+ - test
19
+ - tdd
20
+ - coverage
21
+ requires_tools: # Toolsets this skill needs to function
22
+ - terminal
23
+ config: # Optional config settings
24
+ - key: my.setting
25
+ description: What this controls
26
+ default: "value"
27
+ ---
28
+ ```
29
+
30
+ ### Field Reference
31
+
32
+ | Field | Required | Type | Description |
33
+ |-------|----------|------|-------------|
34
+ | `name` | yes | string | Unique skill name, used as directory name |
35
+ | `description` | yes | string | One-line description shown in skill index |
36
+ | `version` | no | string | Semver for curated skills |
37
+ | `author` | no | string | "agent", "user", or origin identifier |
38
+ | `tags` | no | string[] | Search/discovery tags |
39
+ | `category` | no | string | Grouping category |
40
+ | `trigger` | no | string[] | Keywords that trigger progressive load (Tier 0→Tier 1) |
41
+ | `requires_tools` | no | string[] | Toolsets that must be present; skill is hidden when absent |
42
+ | `fallback_for` | no | string[] | Show this skill ONLY when listed toolsets are unavailable |
43
+ | `config` | no | object[] | Declared config settings injected on load |
44
+
45
+ ### Platform Restriction
46
+
47
+ Skills can restrict themselves to specific OS platforms:
48
+
49
+ ```yaml
50
+ platforms: [windows] # Windows only
51
+ platforms: [windows, linux] # Windows and Linux
52
+ ```
53
+
54
+ When set, the skill is hidden on incompatible platforms. If omitted, loads on all platforms.
55
+
56
+ ### Conditional Activation (Fallback Skills)
57
+
58
+ Skills can auto-show/hide based on available tools:
59
+
60
+ ```yaml
61
+ fallback_for: [web] # Show ONLY when web tools are unavailable
62
+ requires_tools: [terminal] # Show ONLY when terminal tools are available
63
+ ```
64
+
65
+ Example: A `web-search` skill with `fallback_for: [web]` stays hidden when web_search tool is available. When the tool is missing (no API key), the skill automatically appears as an alternative.
66
+
67
+ ## Progressive Disclosure Loading
68
+
69
+ Skills use a token-efficient loading pattern inspired by Hermes:
70
+
71
+ ```
72
+ Tier 0: Skill directory listing → names, descriptions, categories, tags (from frontmatter)
73
+ Do: read skills/<name>/SKILL.md frontmatter on demand
74
+ Cost: ~200 tokens for 11 skills
75
+
76
+ Tier 1: Full SKILL.md content → load the markdown body when:
77
+ - User triggers a trigger keyword (matching `trigger` field)
78
+ - User explicitly names the skill or runs `/skill-name`
79
+ - A subtask or command references it
80
+ Cost: Varies by skill (1-5K tokens)
81
+
82
+ Tier 2: Reference files → load scripts/, templates/, references/ only when:
83
+ - Executing the skill's procedure
84
+ - The skill instructs you to read a specific file
85
+ Cost: Varies
86
+ ```
87
+
88
+ ### Trigger-Table Lazy Loading
89
+
90
+ Instead of preloading all skills at session start, use the trigger table:
91
+
92
+ | Trigger keyword | Skill to load | Condition |
93
+ |----------------|---------------|-----------|
94
+ | "test", "tdd", "coverage" | tdd-workflow | User mentions testing |
95
+ | "security", "auth", "xss" | security-review | Security-related work |
96
+ | "verify", "build", "lint" | verification-loop | Build/before-PR context |
97
+
98
+ ### Duplicate Instruction Prevention
99
+
100
+ Before loading a skill, check if its instructions are already covered by:
101
+ - AGENTS.md rules already in context
102
+ - Another skill already loaded this session
103
+
104
+ If overlap is detected, skip loading to avoid context bloat.
105
+
106
+ ## Agent-Managed Skill Lifecycle
107
+
108
+ The agent can create, update, and delete skills during sessions. This is the skill system's self-improvement loop.
109
+
110
+ ### When to Create a Skill
111
+
112
+ - After completing a complex task (5+ tool calls) successfully
113
+ - When you hit errors/dead ends and found the working path
114
+ - When the user corrected your approach
115
+ - When you discovered a non-trivial workflow
116
+
117
+ ### Skill Management Operations
118
+
119
+ | Operation | Method | Use for |
120
+ |-----------|--------|---------|
121
+ | **Create** | Write `skills/<name>/SKILL.md` | New skill from scratch |
122
+ | **Patch** | Edit specific text in `skills/<name>/SKILL.md` | Targeted fixes (preferred over full rewrite) |
123
+ | **Edit** | Full rewrite of `skills/<name>/SKILL.md` | Major structural changes |
124
+ | **Delete** | Remove `skills/<name>/` | Remove a skill (only if superseded; prefer archival) |
125
+ | **Add reference** | Write `skills/<name>/references/<file>` | Supporting documentation |
126
+ | **Add template** | Write `skills/<name>/templates/<file>` | Output format templates |
127
+ | **Add script** | Write `skills/<name>/scripts/<file>` | Helper scripts |
128
+
129
+ ### Minimum Threshold for Creation
130
+
131
+ - Never create a skill from a single data point.
132
+ - Minimum: 3 verified successes or 3 same-type mistakes in 7 days.
133
+ - Check existing skills via `hm_search` before creating to avoid duplicates.
134
+
135
+ ### Skill Quality Gates
136
+
137
+ Every skill must have:
138
+ 1. Complete frontmatter with name, description, tags, trigger keywords
139
+ 2. A "When to Use" section with clear trigger conditions
140
+ 3. A "Procedure" section with step-by-step instructions
141
+ 4. A "Verification" section describing how to confirm it works
142
+ 5. A "Pitfalls" section noting known failure modes
143
+
144
+ ## Skill Directory Structure
145
+
146
+ ```
147
+ skills/
148
+ ├── <name>/
149
+ │ ├── SKILL.md ← required
150
+ │ ├── references/ ← additional docs
151
+ │ ├── templates/ ← output formats
152
+ │ └── scripts/ ← helper scripts
153
+ ```
154
+
155
+ Skills live in three locations (discovered by OpenCode):
156
+ - Project: `.opencode/skills/<name>/SKILL.md`
157
+ - Global opencode: `~/.config/opencode/skills/<name>/SKILL.md`
158
+ - Global agents: `~/.agents/skills/<name>/SKILL.md`
159
+
160
+ ## Verification
161
+
162
+ After creating or updating a skill:
163
+ 1. Run the workflow defined in the SKILL.md.
164
+ 2. Verify it produces the expected outcome.
165
+ 3. Write a verification receipt via `hm_put` with class `verification_receipt`.
@@ -0,0 +1,192 @@
1
+ # State Drift Detection — Hash-Based Environment Fingerprinting
2
+
3
+ ## Problem Statement
4
+ Compression accumulates verification receipts across sessions. Without drift detection, the same receipt content gets compressed repeatedly even when:
5
+ - Environment changed (node 18 → node 20, Python 3.9 → 3.11)
6
+ - File system state drifted (git commit hash changed)
7
+ - Provider credentials rotated (API key in verification detail)
8
+
9
+ This creates "phantom" compressed data that references stale environments.
10
+
11
+ ## Solution: Hash-Based Fingerprinting
12
+
13
+ ### Environment Fingerprint Schema
14
+ ```json
15
+ {
16
+ "fingerprint": {
17
+ "cwd": "C:/path/to/project",
18
+ "harness_root": "C:/Users/nathan/.config/opencode/openhermes",
19
+ "project_root": "C:/path/to/project",
20
+ "project": "my-project",
21
+ "session_id": "session-123",
22
+ "os": "win32",
23
+ "release": "10.0.26100",
24
+ "arch": "x64",
25
+ "shell": "cmd.exe",
26
+ "provider": "lmstudio",
27
+ "model": "openhermes-1.x",
28
+ "sha256": "..."
29
+ }
30
+ }
31
+ ```
32
+
33
+ ### Fingerprint Generation (Pre-Compression)
34
+ ```javascript
35
+ function generateEnvironmentFingerprint() {
36
+ const cwd = process.cwd()
37
+ const provider = process.env.OPENCODE_PROVIDER || 'lmstudio'
38
+ const model = process.env.OPENCODE_MODEL || null
39
+
40
+ return hash(
41
+ `${cwd}${provider}${model || ''}`
42
+ )
43
+ }
44
+ ```
45
+
46
+ ### Hash-Based Drift Detection (Post-Compression)
47
+ ```javascript
48
+ function detectHashDrift(compressedSummary, lastFingerprint) {
49
+ const currentFingerprint = generateEnvironmentFingerprint()
50
+
51
+ if (!lastFingerprint || currentFingerprint !== lastFingerprint) {
52
+ // Environment changed since last compression
53
+ return { drift: true, oldFp: lastFingerprint, newFp: currentFingerprint }
54
+ }
55
+
56
+ return { drift: false }
57
+ }
58
+ ```
59
+
60
+ ## Enforcement Points
61
+
62
+ ### Compress Event (Primary Guard)
63
+ ```javascript
64
+ // In OpenHermes's built-in dynamic-context-pruning plugin
65
+ function onCompress() {
66
+ // Generate fresh fingerprint before compressing
67
+ const currentFp = generateEnvironmentFingerprint()
68
+
69
+ if (!lastFp || currentFp !== lastFp) {
70
+ // Drift detected → abort compression or truncate buffer
71
+ report.warn(`State drift: environment changed from ${lastFp} to ${currentFp}`)
72
+ return { truncated: true, reason: 'environment_drift' }
73
+ }
74
+
75
+ lastFp = currentFp
76
+ }
77
+ ```
78
+
79
+ ### Memory Write (Secondary Guard)
80
+ ```javascript
81
+ // In openhermes-memory MCP server
82
+ funtion putMemoryObject(obj) {
83
+ // Attach fingerprint to all new memory objects
84
+ obj.fingerprint = generateEnvironmentFingerprint()
85
+
86
+ // Compare against last compressed buffer's fingerprint
87
+ if (!lastCompressedFp || obj.fingerprint !== lastCompressedFp) {
88
+ // New environment → flag for review or redact stale content
89
+ obj.stale_content_redacted = true
90
+ }
91
+ }
92
+ ```
93
+
94
+ ### Session Resume (Recovery)
95
+ ```javascript
96
+ // On session resume / checkpoint recovery
97
+ function recoverFromCheckpoint(checkpointData) {
98
+ const lastFp = checkpointData.lastCompressedFingerprint
99
+ const currentFp = generateEnvironmentFingerprint()
100
+
101
+ if (!lastFp || currentFp !== lastFp) {
102
+ // Environment changed since checkpoint was created
103
+ report.warn(`Resume from checkpoint with environment drift: ${lastFp} → ${currentFp}`)
104
+ // Redact any compressed summaries that reference stale environments
105
+ redactStaleCompressedSummaries()
106
+ }
107
+ }
108
+ ```
109
+
110
+ ## Hash Algorithm Selection
111
+
112
+ ### Recommended: SHA-256 (cryptographically strong, fast enough) ```javascript
113
+ const fingerprint = sha256(
114
+ `${os.family}${os.version}${cwd}${gitState?.commit_hash}`
115
+ ).substring(0, 16) // Truncate to 16 hex chars for readability
116
+ ```
117
+
118
+ ### Alternatives (if performance needed)
119
+ - **MD5**: Faster but weaker collision resistance. Use only if fingerprint is never displayed.
120
+ - **CRC32**: Extremely fast, but collisions possible. Not recommended unless hash space is tiny.
121
+
122
+ ### Hash Space Considerations
123
+ - With SHA-256 truncated to 16 hex chars → 4^16 = ~4.3 billion unique fingerprints
124
+ - Collision probability after N compressions ≈ N² / (8 × 2³¹) via birthday paradox
125
+ - For typical sessions (<100,000 compresses), collision risk < 1e-5
126
+
127
+ ## Performance Characteristics
128
+
129
+ | Operation | Time | Notes |
130
+ |-----------|------|-------|
131
+ | Generate fingerprint | ~5ms | Dominated by filesystem stat calls |
132
+ | SHA-256 hash computation | ~0.5ms | Negligible compared to I/O |
133
+ | Store in memory object | <1ms | Just a string assignment |
134
+
135
+ ## Fail-Safe Mechanisms
136
+
137
+ ### 1. Hash Collision (Extremely Rare)
138
+ **What if two different environments produce same fingerprint?**
139
+ - Use full SHA-256 for audit logging, truncated value for quick comparison
140
+ - Log collision event with both hashes and manual review required
141
+ - Store in `memory/audits/collision-events.json`
142
+
143
+ ### 2. Fingerprint Computation Failure
144
+ **What if filesystem stat fails (permission denied)?**
145
+ - Fall back to previous valid fingerprint
146
+ - Log error but continue operation
147
+ - Schedule full drift check on next checkpoint
148
+
149
+ ### 3. Hash Algorithm Change
150
+ **What if we upgrade from SHA-256 to SHA-3?**
151
+ - Include hash algorithm identifier in fingerprint metadata
152
+ - Parse both old and new format during resume
153
+ - Migrate gracefully without data loss
154
+
155
+ ## Configuration & Overrides
156
+
157
+ | Config | Default | Override |
158
+ |--------|---------|----------|
159
+ | `fingerprint_hash_algo` | "sha256" | "md5", "crc32" (performance mode only) |
160
+ | `truncated_fingerprint_len` | 16 | 8, 4, 0 (full hash) |
161
+ | `allow_drift_bypass` | false | Set to true for testing or known-good drift scenarios |
162
+
163
+ ## Compliance & Audit
164
+
165
+ Every compressed summary must include:
166
+ ```json
167
+ {
168
+ "fingerprint_at_compression": "fp_abc123def456",
169
+ "hash_algorithm": "sha256",
170
+ "truncated_length": 16,
171
+ "drift_detected": false,
172
+ "redaction_applied": false
173
+ }
174
+ ```
175
+
176
+ This allows:
177
+ - Forensic reconstruction of environment at compression time
178
+ - Verification that no phantom data exists in compressed buffer
179
+ - Audit trail for compliance requirements (NIST, SOC2)
180
+
181
+ ## Integration with Other Rules
182
+
183
+ - `rules/verification.md`: Fingerprint must be attached to all verification receipts
184
+ - `rules/runtime-guards.md`: Hash-based drift detection prevents credential exposure
185
+ - `commands/doctor.md`: Include fingerprint checks in the doctor workflow
186
+
187
+ ---
188
+
189
+ **Status**: Active (enforcement: hard)
190
+ **Scope**: Global
191
+ **Created**: 2026-05-09T07:31:00Z
192
+ **Author**: agent (auto-generated via gap analysis)
@@ -0,0 +1,88 @@
1
+ # Verification — Skeptical Evidence Protocol
2
+
3
+ Constitutional parent: principle 11 (`openhermes\constitution\soul.md`).
4
+ Trust nothing without evidence. Every claim, instruction, document, and behavioral assertion must be confirmed by personal observation or a cached verification receipt before it may be treated as ground truth.
5
+
6
+ Verification receipts prove that an artifact was observed in a particular state. They do not, by themselves, prove a live runtime claim unless the receipt captures a live-session artifact or log.
7
+
8
+ ## Core Stance
9
+
10
+ - **User claims** — Input, not truth. Verify against evidence before acting.
11
+ - **Document claims** — Documents rot. Cross-reference against current filesystem/code state.
12
+ - **Code/script claims** — Past success does not guarantee present function. Run and check.
13
+ - **Dependency claims** — Package manifests can be stale. Check the filesystem directly.
14
+
15
+ ## Verification Cache (Memory-Backed)
16
+
17
+ Successful verifications are stored via `hm_put` so repeated checks of unchanged artifacts are skipped.
18
+
19
+ ### Cache Key
20
+
21
+ Each verification receipt is keyed by:
22
+ - **Artifact identity**: normalized file path, or logical identity (e.g., `state:dcp-installed`)
23
+ - **Artifact fingerprint**: file `mtime` + `size` (files), or structured state hash (logical)
24
+
25
+ ### Cache Lifecycle
26
+
27
+ 1. **Before trusting a claim**: search memory (`hm_get` or `hm_list`) for matching receipt.
28
+ 2. **Receipt found + fingerprint matches**: artifact unchanged. Trust cached result. Skip re-verify.
29
+ 3. **Receipt found + fingerprint differs**: artifact changed. Re-verify. Stale receipt is invalid.
30
+ 4. **No receipt found**: verify fresh. Store receipt on success.
31
+
32
+ ### Receipt Storage
33
+
34
+ Use `hm_put` with class `verification_receipt` — a dedicated memory class (schema: `schemas\verification_receipt.schema.json`). Receipts are stored as file-per-object in `memory\verification_receipts\<id>.json`.
35
+
36
+ Required fields:
37
+ - **artifact**: path or logical identity of the verified artifact
38
+ - **fingerprint**: { path, mtime, size, sha256? } — determines cache validity
39
+ - **environment**: { cwd, os, shell, provider, model } — reproducibility context
40
+ - **method**: "command" | "read" | "test" | "schema-validate" | "manual-inspection" | "bash" | "grep"
41
+ - **result**: "pass" | "fail" | "unknown"
42
+ - **result_detail**: free-text description of what passed/failed, including output excerpts for command-based methods
43
+ - **expires_at**: ISO-8601 — hard expiry regardless of fingerprint match (default: 30 days)
44
+ - **supersedes / superseded_by**: receipt chains for audit trail
45
+
46
+ Receipt quality gates:
47
+ 1. Every receipt must have: `artifact`, `method`, `result`, `result_detail`, `fingerprint`, `environment`, `provenance.session_id`, `created_at`.
48
+ 2. Command-based receipts (`method: command | bash | test`) must include output excerpt or exit code in `result_detail`.
49
+ 3. Config-based receipts (`method: manual-inspection | schema-validate | grep`) must reference the specific file paths inspected.
50
+ 4. No receipt may exceed 30 lines. If more detail is needed, link to a file.
51
+ 5. Receipts that supersede older ones must set `supersedes` to the prior receipt ID. The older receipt gets `superseded_by`.
52
+ 6. Receipts without `fingerprint` are non-cacheable — they must be re-verified every time.
53
+
54
+ Receipts stored under `decision` with `v:` prefix are deprecated. Migrate to `verification_receipt` class on next touch.
55
+
56
+ ## Verification Methods by Artifact
57
+
58
+ | Artifact | Method | Evidence |
59
+ |---|---|---|
60
+ | File content | `read` + grep for expected text | Exact match |
61
+ | Code behavior | `bash` with test command | Exit 0 + expected output |
62
+ | Directory structure | `read` (dir) or `glob` | Entry list matches |
63
+ | Installation state | `bash (cmd --version)` | Non-error + expected version |
64
+ | Document truth | Cross-ref code/filesystem | Primary source confirms doc |
65
+ | User claim | Execute/read referenced thing | Primary evidence matches claim |
66
+
67
+ ## Contradiction Protocol
68
+
69
+ When verification reveals evidence contradicts a document or user claim:
70
+
71
+ 1. **Pause** — do not proceed on either source.
72
+ 2. **Log** — `hm_put` as `constraint` or `backlog` with both claim and contradictory evidence.
73
+ 3. **Flag** — ask user about the discrepancy. Present both sides.
74
+ 4. **Resolve** — let user decide which source is authoritative. Update document if needed.
75
+
76
+ ## When to Skip Verification
77
+
78
+ Allowed ONLY when:
79
+ - Cached receipt with matching fingerprint exists in memory, AND
80
+ - Artifact is confirmed unchanged (same mtime/hash)
81
+
82
+ Never skip based on "should work" or "user says it works."
83
+
84
+ ## Integration
85
+
86
+ - **Precedence** (`rules/precedence.md`): verified claim outranks unverified claim at same level. A verification receipt raises the effective priority of the claim it supports.
87
+ - **Memory Retrieval** (`rules/retrieval.md`): verification receipts are queried before substantive work (Gate 2) and before task close (Gate 3).
88
+ - **Self-Edit** (`AGENTS.md` Self-Edit Authority): adding verification receipts is unconditionally allowed.
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": 1,
3
+ "description": "Bundled skills shipped with openhermes. These are never subject to curator mutation, archive, or deletion.",
4
+ "skills": [
5
+ { "name": "api-design", "bundled": true, "created_by": "openhermes" },
6
+ { "name": "backend-patterns", "bundled": true, "created_by": "openhermes" },
7
+ { "name": "coding-standards", "bundled": true, "created_by": "openhermes" },
8
+ { "name": "e2e-testing", "bundled": true, "created_by": "openhermes" },
9
+ { "name": "frontend-patterns", "bundled": true, "created_by": "openhermes" },
10
+ { "name": "frontend-slides", "bundled": true, "created_by": "openhermes" },
11
+ { "name": "security-review", "bundled": true, "created_by": "openhermes" },
12
+ { "name": "strategic-compact", "bundled": true, "created_by": "openhermes" },
13
+ { "name": "tdd-workflow", "bundled": true, "created_by": "openhermes" },
14
+ { "name": "verification-loop", "bundled": true, "created_by": "openhermes" }
15
+ ],
16
+ "updated_at": "2026-05-08T00:00:00Z"
17
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 1,
3
+ "description": "Skill usage telemetry. Bundled skills are excluded from curator mutation but tracked for load/use counts.",
4
+ "skills": {},
5
+ "updated_at": "2026-05-08T00:00:00Z"
6
+ }