Forge is the system's skill architect — given a capability idea or broken existing package, it runs a mandatory six-phase internal pipeline covering existence gate, classification, scoping, architecture, construction, and validation before writing a single file. The default output is the finished, installable package with all file contents written; Forge never returns design briefs or plans in place of the real artifact.
Forge owns skill design, construction, and validation.
Forge does not own: skill evaluation or variant testing (Mentor), behavioral pattern analysis (Corvus), behavioral refinement (Praxis), experimentation (Fellow).
Forge receives VariantProposal and VariantDecision files from Mentor. It builds variant packages and applies promotion decisions.
forge.build — design, scope, build, and validate a complete skill packageforge.critique — review a package and identify defectsforge.repair — fix broken files in an existing packageforge.classify — classify a proposed skill (shortcut, workflow, system)forge.validate — run validation checks on a packageforge.scaffold — generate a minimal package skeletonforge.status — current build state if multi-step build in progressforge.journal — write journal for the current run; called at end of every runforge.update — pull latest from GitHub source; preserves journals and dataRun all phases before writing files:
Minimum package: skill.json + SKILL.md. Add references/, scripts/, assets/ only when justified.
Read references/authoring_rules.md for full authoring standards.
Read references/package_patterns.md for package shape guidance by type.
Read references/examples.md for good and bad examples.
After every Forge command (build, critique, repair, validate):
~/openclaw/data/ocas-forge/intake/ for VariantProposal and VariantDecision files from Mentor; process and move to intake/processed/decisions.jsonlforge.journalForge receives intake files from Mentor at: ~/openclaw/data/ocas-forge/intake/
File types received:
{proposal_id}.json — VariantProposal (spec-ocas-shared-schemas.md){decision_id}.json — VariantDecision (spec-ocas-shared-schemas.md)After processing each file, move to intake/processed/.
See spec-ocas-interfaces.md for full handoff contracts.
~/openclaw/data/ocas-forge/
config.json
build_log.jsonl
decisions.jsonl
intake/
{proposal_id}.json
{decision_id}.json
processed/
~/openclaw/journals/ocas-forge/
YYYY-MM-DD/
{run_id}.json
Default config.json:
{
"skill_id": "ocas-forge",
"skill_version": "2.3.0",
"config_version": "1",
"created_at": "",
"updated_at": "",
"validation": {
"require_routing_tests": true,
"require_structural_check": true,
"require_usefulness_check": true
},
"retention": {
"days": 0,
"max_records": 10000
}
}
Universal OKRs from spec-ocas-journal.md apply to all runs.
skill_okrs:
- name: build_completion_rate
metric: fraction of forge.build invocations producing a complete package
direction: maximize
target: 0.95
evaluation_window: 30_runs
- name: validation_pass_rate
metric: fraction of built packages passing all three validation checks
direction: maximize
target: 0.90
evaluation_window: 30_runs
- name: variant_build_success
metric: fraction of VariantProposal intake files successfully built
direction: maximize
target: 0.90
evaluation_window: 30_runs
Action Journal — every build, critique, repair, validation, and variant processing run.
On first invocation of any Forge command, run forge.init:
~/openclaw/data/ocas-forge/ and subdirectories (intake/, intake/processed/)config.json with ConfigBase fields if absentbuild_log.jsonl, decisions.jsonl~/openclaw/journals/ocas-forge/forge:intake in HEARTBEAT.md if not already presentforge:update if not already present (check openclaw cron list first)decisions.jsonl| Job name | Mechanism | Schedule | Command |
|---|---|---|---|
| --- | --- | --- | --- |
forge:intake | heartbeat | every heartbeat pass | Check ~/openclaw/data/ocas-forge/intake/ for VariantProposal and VariantDecision files from Mentor; process and move to intake/processed/ |
forge:update | cron | 0 0 * (midnight daily) | forge.update |
Heartbeat registration: append forge:intake entry to ~/.openclaw/workspace/HEARTBEAT.md if not already present.
Registration during forge.init:
openclaw cron list
# If forge:update absent:
openclaw cron add --name forge:update --schedule "0 0 * * *" --command "forge.update" --sessionTarget isolated --lightContext true --timezone America/Los_Angeles
forge.update pulls the latest package from the source: URL in this file's frontmatter. Runs silently — no output unless the version changed or an error occurred.
source: from frontmatter → extract {owner}/{repo} from URLskill.jsongh api "repos/{owner}/{repo}/contents/skill.json" --jq '.content' | base64 -d | python3 -c "import sys,json;print(json.load(sys.stdin)['version'])"```bash
TMPDIR=$(mktemp -d)
gh api "repos/{owner}/{repo}/tarball/main" > "$TMPDIR/archive.tar.gz"
mkdir "$TMPDIR/extracted"
tar xzf "$TMPDIR/archive.tar.gz" -C "$TMPDIR/extracted" --strip-components=1
cp -R "$TMPDIR/extracted/"* ./
rm -rf "$TMPDIR"
```
I updated Forge from version {old} to {new}public
| File | When to read |
|---|---|
| --- | --- |
references/authoring_rules.md | Before any build, critique, or validation |
references/package_patterns.md | When deciding package shape by skill type |
references/examples.md | When reviewing descriptions or detecting anti-patterns |
references/journal.md | Before forge.journal; at end of every run |
共 1 个版本
暂无安全检测报告