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.
This commit is contained in:
INDigitalStudio 2026-08-09 21:00:28 +00:00
parent a42608f602
commit 2cc766aabe
98 changed files with 12508 additions and 0 deletions

View file

@ -0,0 +1,36 @@
#!/usr/bin/env -S uv run
# /// script
# dependencies = ["pydantic", "python-dotenv", "pyyaml", "rich"]
# ///
"""ADW Validate — check the config without running anything.
Loads the roster and validates every agent: the name resolves, the coding
agent is implemented, the prompt files exist, and the model resolves in the
harness's catalog. Exits 0 on success, 1 with a list of problems otherwise.
Usage:
uv run adws/adw_validate.py [--config adws/adw_sssf_config/sssf.config.yaml]
"""
import argparse
import sys
from adw_modules import agents
def main(config: str = "adws/adw_sssf_config/sssf.config.yaml") -> int:
cfg = agents.load_config(config)
names = [a.name for a in cfg.agents]
if not names:
print(f"config {config} declares no agents")
return 1
agents.validate(cfg, names)
print(f"config OK; agents: {', '.join(names)}")
return 0
if __name__ == "__main__":
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--config", default="adws/adw_sssf_config/sssf.config.yaml")
args = parser.parse_args()
sys.exit(main(args.config))