Skill: cyber-bye/skill-onboarder (version 1.1.0)

--- name: skill-onboarder description: Auto-wires new skills into core system. On skill install detected, reads SKILL.md/AGENT.md/SOUL.md/hooks and injects into soul/memory/agent files. version: 1.1.0 trigger: "installed|new skill|onboard|wire skill|onboarding|skill wired" homepage: https://github.com/clawhub/skill-onboarder metadata: {"openclaw": {"skillKey": "skill-onboard", "emoji": "🔧", "always": true, "requires": {"bins": []}, "triggers": [{"kind": "event", "event": "skill:post-install", "future": true}]}} --- # Skill Onboarder ## Purpose Auto-wire new skills. On trigger, reads skill files → wires to core system. ## Trigger Matches: "installed", "new skill", "onboard", "wire skill", "onboarding" Future: Auto-fires on `skill:post-install` event (not yet implemented) ## Files Written | File | Adds | |------|------| | `soul/master.md` | Skill sections | | `agent/skills-active.md` | Triggers + rules | | `workspace/_index.md` | Registration | ## Process 1. Detect trigger → extract skill name 2. Read: SKILL.md, AGENT.md, SOUL.md, hooks/ 3. Extract: triggers, rules (hard/soft), sections 4. Inject to core files 5. Confirm ## Idempotent Safe to re-run. Checks before write. Updates version if changed.

path: AGENT.md
content: ---
name: skill-onboarder-agent
description: Rules: On trigger, reads skill files → wires to core.
---

# Rules

## 1. Detect Trigger

Trigger on: "installed", "new skill", "onboard", "wire", "onboarding"

Extract skill name → begin onboarding.

## 2. Read Files

1. `<skill>/SKILL.md` — name, version, triggers
2. `<skill>/AGENT.md` — rules (hard/soft)
3. `<skill>/SOUL.md` — sections
4. `<skill>/hooks/*.md` — hooks

Missing → warn, continue.

## 3. Show Summary

```
EXTRACTION: <skill>
Sections: N
Rules: N hard, N soft
Hooks: N
```

Wait confirm → inject.

## 4. Write (Idempotent)

Check existing → skip if same version → update if diff → add if new.

## 5. Create Paths

From SKILL.md structure → mkdir -p missing paths.

## 6. Confirm

```
✓ <skill> wired
Sections: N | Rules: N hard/N soft
```

path: hooks/on-install.md
content: ---
name: skill-onboarder-on-install
description: On trigger: read skill files → extract → inject → confirm.
---

# On-Install

## Read

| File | Extract |
|------|---------|
| SKILL.md | name, version, triggers |
| AGENT.md | rules (hard/soft) |
| SOUL.md | sections |
| hooks/*.md | hook names |

## Classify Rules

- Contains MUST/SHALL/ALWAYS/CANNOT → HARD
- Contains SHOULD/PREFER → SOFT
- Default → SOFT

## Inject

Writes to: soul/master.md, agent/skills-active.md, workspace/_index.md

path: memory/schema.json
content: {
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Skill Onboarder Memory",
  "type": "object",
  "required": ["version","updated","installed_skills"],
  "properties": {
    "version": { "type": "string" },
    "updated": { "type": "string", "format": "date" },
    "installed_skills": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["name","version","installed_at","status"],
        "properties": {
          "name":           { "type": "string" },
          "version":        { "type": "string" },
          "path":           { "type": "string" },
          "installed_at":   { "type": "string", "format": "date" },
          "status":         { "enum": ["active","disabled","partial"] },
          "wired":          { "type": "boolean" },
          "soul_sections":  { "type": "integer" },
          "hard_rules":     { "type": "integer" },
          "soft_rules":     { "type": "integer" },
          "hooks":          { "type": "integer" },
          "paths_created":  { "type": "integer" },
          "notes":          { "type": ["string","null"] }
        }
      }
    }
  }
}


path: templates/agent-inject.md
content: ---
name: agent-inject-template
description: Template for what gets injected into agent/skills-active.md when a skill is installed. Includes enforcement level.
---

---
## <skill-name> v<version>
Installed: YYYY-MM-DD | Path: <skill-folder>/
---

### Trigger Keywords
<!-- Add to trigger scan on every input -->
<keyword-1>, <keyword-2>, <keyword-3>

### Always Fires
yes / no
<!-- If yes: this skill activates on every single turn -->

### Hard Rules (enforced — BLOCK response until satisfied)
| Rule | Level | Short Desc | Requires | Fires When |
|------|-------|------------|----------|----------|
| R1 | HARD | <short> | write: <path> | every_turn |
| R2 | HARD | <short> | hook: <name> | on: <condition> |

### Soft Rules (advisory — log warning, continue)
| Rule | Level | Short Desc | Recommends | Fires When |
|------|-------|------------|------------|----------|
| R1 | SOFT | <short> | check | on_condition |

### Hooks
| Hook File | Fires When | Writes To |
|----------|----------|----------|
| hooks/on-error.md | error detected | errors/raw/ |
| hooks/pre-response.md | before every response | memory/index.json |

### Required Paths
<!-- Created on install — must exist for skill to function -->
- <path-1>/
- <path-2>/
- <path-3>/entry.md (touch)


path: templates/soul-inject.md
content: ---
name: soul-inject-template
description: Template for what gets injected into soul/master.md when a skill is installed.
---

## [SKILL: <skill-name>] — v<version>
<!-- Installed: YYYY-MM-DD | Path: <skill-folder>/ -->

<!-- ═══ SOUL SECTIONS FROM THIS SKILL ═══ -->

### [<SECTION-1>]
<!-- Format: <copy format line from SOUL.md> -->
<!-- Write trigger: <when this gets written> -->
<!-- Operation: append-only / upsert / update -->

### [<SECTION-2>]
<!-- Format: -->
<!-- Write trigger: -->
<!-- Operation: -->

<!-- ═══ WRITE PROTOCOL ═══ -->
| Section | Trigger | Operation |
|---|---|---|
| [SECTION-1] | <trigger> | <operation> |
| [SECTION-2] | <trigger> | <operation> |


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)