skills/sssf/cookbooks/create_config.md
INDigitalStudio 2cc766aabe Add sssf skill, installable via the skills CLI
Port the sssf skill from ~/.agents/skills/sssf into this repo so it can be
distributed and installed with the skills CLI (skills add INDigitalStudio/skills
--skill sssf).

- Copy the skill (SKILL.md, cookbooks, references, scripts, templates, and the
  visualizer app source) into sssf/.
- Gitignore build/runtime artifacts: the visualizer's node_modules/ and dist/,
  Python bytecode, and the machine-specific repos.json.
- Make the skill location-independent: install.py now stamps the skill's real
  path into the stamped justfile's skill_dir (replacing the hardcoded
  ~/.agents/skills/sssf), so 'just obs' finds the visualizer wherever the CLI
  installed the skill.
- Update cookbooks to use <skill>/scripts/... instead of the hardcoded path,
  and document the skills CLI install command.
- Update the repo README with install instructions.
2026-08-09 21:00:28 +00:00

3.3 KiB

Create Config

Generate sssf.config.yaml — the agent roster for a target repo.

Generate it

uv run <skill>/scripts/make_config.py

<skill> is the directory this skill was installed into (e.g. ~/.agents/skills/sssf or a repo's .claude/skills/sssf).

Writes adws/adw_sssf_config/sssf.config.yaml — creating the directory if needed — with the starter agents (planner, builder, scout, reviewer, documenter) wired to the prompt files /sssf install stamped into adws/adw_data/prompt_engineering/. That path is the default every ADW and the justfile look for; --config overrides it. make_config.py refuses to overwrite an existing config unless you pass --force, so retuning an existing roster is a hand edit — see update_config.md.

The rule

One agent, one prompt, one purpose. An entry defines who an agent is: its coding agent, model, thinking level, and exactly one system prompt plus one user prompt. How it gets used — the output type, a per-call user prompt override — lives at the ADW call site, never here.

Schema

defaults:
  coding_agent: pi                 # v1: pi only (claude_code is specced, stubbed until v2)
  model: google/gemini-3.6-flash   # ALWAYS provider/model-id — a bare id is ambiguous
  thinking: medium                 # off | minimal | low | medium | high | xhigh | max
  harness_engineering: []          # pi extension names
  data_dir: adws/adw_data          # runtime home: {data_dir}/sessions/{adw_id}/{agent_name}/

observability:
  db: adws/adw_data/sssf.db        # tracer writes here; the UI polls it
  poll_ms: 500                     # visualizer live-poll cadence

agents:
  - name: planner                  # ADW scripts name agents, never models
    coding_agent: pi
    model: google/gemini-3.6-flash
    thinking: high
    color: "#a78bfa"               # optional hex — this agent's lane color in the visualizer
    purpose: Turn a request into a plan the builder can implement without asking questions.
    prompt_engineering:
      system: adws/adw_data/prompt_engineering/planner/system.md
      user: adws/adw_data/prompt_engineering/planner/user.md

  - name: scout
    thinking: high                 # unset keys fall through to defaults
    purpose: Find and report where things live; change nothing.
    prompt_engineering:
      system: adws/adw_data/prompt_engineering/scout/system.md
      user: adws/adw_data/prompt_engineering/scout/user.md
    tools:                         # optional allowlist — omit the key entirely for all tools
      - read
      - bash

Every agent entry merges over defaults, so an entry only states what differs. Pi's builtin tools are read, bash, edit, write — a read-only recon agent gets [read, bash]; a builder omits tools altogether.

After generating

  1. Each agent needs its prompt pair to exist on disk: adws/adw_data/prompt_engineering/{name}/system.md and user.md. agents.validate() fails the run at startup if either is missing.
  2. Write purpose as one sentence and make the system prompt say the same thing — the two should not drift.
  3. Validate by running the smallest ADW that names your agents; a bad entry fails fast, before anything spawns.

Full field-by-field spec, thinking-level mapping, and model resolution: references/config.md. Retuning an existing roster: update_config.md.