70 lines
5.9 KiB
JSON
70 lines
5.9 KiB
JSON
{
|
||
"schema_version": "m2.solution.v1",
|
||
"solution_id": "sol_agent-scaffold",
|
||
"name": "Agent Scaffold Generator",
|
||
"summary": "Scaffold OpenClaw/Hermes agent workspaces (PRD.md + SOUL.md + MEMORY.md) from m2-memory context.",
|
||
"description": "Installs the agent-scaffold skill: given an agent name and a one-line description, it queries m2-memory (agent.memory.system / memory-api) for relevant context and generates a complete agent workspace — PRD.md (problem, personas, functional requirements, success metrics), SOUL.md (identity, values, communication style, scope boundaries), and MEMORY.md (seed memories pre-loaded from the search results) — plus a deploy snippet for OpenClaw or Hermes. Ships two artifacts: SKILL.md and scripts/scaffold.py (a single-file Python script using only the stdlib, talking HTTP to memory-api). Requirement: the buyer machine needs memory-api (m2-memory) network access for full function — scripts/scaffold.py calls M2_MEMORY_API_URL (default http://172.18.0.20:8000, override via env) at /memory/search. Without reachable memory-api the script still runs and produces PRD.md/SOUL.md, but with an empty 'Relevant Memory Context' section and no MEMORY.md content — degraded, not blocked. content_hash is computed over payload/ + recipe.yaml only (not solution.json itself, to avoid the self-referential hash problem of hashing a file that contains its own hash): sha256 of `tar --sort=name --mtime='@0' --owner=0 --group=0 --numeric-owner -czf - payload recipe.yaml` run from this bundle's root.",
|
||
"intent": "Give an operator a reproducible way to stand up (or reconstruct) a new agent's working context — PRD + identity + seed memory — from what the fleet's memory system already knows, instead of starting from a blank page.",
|
||
"behavior": {
|
||
"skill_ref": "payload/SKILL.md"
|
||
},
|
||
"tools": [
|
||
{ "name": "memory-api", "kind": "http-api", "required": true },
|
||
{ "name": "python3", "kind": "cli", "required": true }
|
||
],
|
||
"runtime": {
|
||
"surfaces": ["claude-code-skill"]
|
||
},
|
||
"permissions": [
|
||
{ "action": "write", "target": "~/.claude/skills/agent-scaffold/" },
|
||
{ "action": "write", "target": "~/agents/<agent-name>/ (PRD.md, SOUL.md, MEMORY.md — output of running the skill, not part of the install)" },
|
||
{ "action": "net", "target": "HTTP POST to the configured M2_MEMORY_API_URL /memory/search endpoint" }
|
||
],
|
||
"deployment": {
|
||
"recipe_ref": "recipe.yaml",
|
||
"entrypoint": "Ask your agent to use the agent-scaffold skill, or run: python3 ~/.claude/skills/agent-scaffold/scripts/scaffold.py <agent-name> \"<description>\"",
|
||
"verify_command": "test -f ~/.claude/skills/agent-scaffold/SKILL.md"
|
||
},
|
||
"applicability": {
|
||
"image_classes": ["primus", "agent-latest"],
|
||
"roles": ["operator", "desktop-agent"],
|
||
"tool_requirements": ["python3", "memory-api"]
|
||
},
|
||
"tenant_scope": "m2-core",
|
||
"evidence": [
|
||
{
|
||
"source": "/home/m2/.claude/skills/agent-scaffold/ (SKILL.md, scripts/scaffold.py) — the proven skill this bundle packages, present on the m2 host since 2026-04-20 (SKILL.md mtime 2026-04-20T22:48:00+02:00, scripts/scaffold.py mtime 2026-04-28T00:33:10+02:00 — a later revision of the same script)",
|
||
"machine": "m2",
|
||
"excerpt": "SKILL.md frontmatter: 'Scaffolds OpenClaw/Hermes agent workspaces from m2-memory. Query memory for context, generate PRD.md + SOUL.md for a new agent, and optionally wire into the fleet.'"
|
||
},
|
||
{
|
||
"source": "/home/m2/gmi-clinic/agents/{admin-data-bridge,clinical-entity-extraction,drg-los-optimizer}/{PRD.md,SOUL.md} — three real PRD+SOUL agent-workspace pairs on disk, all created 2026-04-20 22:46:27–22:47:19 (mtimes), roughly one minute before this skill's own SKILL.md mtime (22:48:00) — the exact PRD.md/SOUL.md workspace shape this skill formalizes and automates, produced for the GMI Clinic AI fleet deployment immediately prior to the skill being written",
|
||
"machine": "m2",
|
||
"excerpt": "admin-data-bridge/SOUL.md: 'You are the Admin Data Bridge for GMI Clinic... ## Values ## Communication style ## Scope boundaries' — same section structure generate_soul() in scaffold.py emits"
|
||
},
|
||
{
|
||
"source": "/home/m2/gmi-clinic/agents/gesy-research/PRD.md — a fourth real workspace, mtime 2026-04-20T22:47:48+02:00, whose own text names the exact incident SKILL.md's 'Design principle' section cites as the skill's reason for existing: 'On 2026-04-08, Nasr ran 4 parallel research agents on his machine... The output was intended to be stored in m2-memory, Planka, and Forgejo but the storage step failed (m2 errored). This PRD reconstructs the agent's purpose and gaps so the research can be completed and properly stored.'",
|
||
"machine": "m2",
|
||
"excerpt": "SKILL.md: 'The goal is reproducibility: if an agent's context is lost (like Nasr's Apr 8 research agents), this skill can reconstruct the workspace from the vector store and hand it to OpenClaw or Hermes to re-execute without starting from scratch.'"
|
||
},
|
||
{
|
||
"source": "/home/m2/agent-restore-harness/agents/{nasr,parlo,peter}/SOUL.md — three further real SOUL.md agent-identity files for actual named fleet agents (nasr-m2o, parlobyg-m2o per /home/m2/CLAUDE.md), mtimes 2026-04-22T23:41–2026-04-23T00:48, confirming the PRD+SOUL workspace pattern stayed in production use after the skill was written, not a one-off",
|
||
"machine": "m2",
|
||
"excerpt": "nasr/SOUL.md: 'You are Nasr's digital twin — his AI counterpart in the Machine.Machine fleet... ## Core Capabilities'"
|
||
}
|
||
],
|
||
"content_hash": "sha256:202aaff5519e774e2669bd2ca6220fc67284a506775a90ff7710fb2361cc58ee",
|
||
"price": {
|
||
"amount": 60,
|
||
"currency": "m2cr",
|
||
"model": "fixed"
|
||
},
|
||
"seller": "sdjs-operator",
|
||
"license": {
|
||
"terms": "Perpetual use on operator-owned machines for the buyer's own agent-workspace generation; no redistribution of the skill files as a standalone product.",
|
||
"major_version_coverage": true
|
||
},
|
||
"revenue_split": {
|
||
"platform_pct": 10
|
||
}
|
||
}
|