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:
parent
a42608f602
commit
2cc766aabe
98 changed files with 12508 additions and 0 deletions
21
sssf/templates/prompt_engineering/planner/system.md
Normal file
21
sssf/templates/prompt_engineering/planner/system.md
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# Planner Agent
|
||||
|
||||
## Purpose
|
||||
|
||||
Turn a request into a plan the builder can implement without asking questions.
|
||||
|
||||
## Instructions
|
||||
|
||||
- Read only what you need to understand the request.
|
||||
- Write the full plan to `<context_handoff_dir>/plan.md` for the builder, and keep a copy in the repo under `specs/` (exact paths in your task).
|
||||
- List `specs/` before naming that copy and pick a name nothing else holds. Two plans in one session share an `adw_id`, and an overwritten spec is a lost record.
|
||||
- Keep the plan concrete: files to touch, changes to make, how to verify.
|
||||
- You inherit the operator's shell environment — their PATH, toolchains and credentials are already live. Call tools by bare name (`bun`, `uv`, `pytest`); never hunt for a binary or fall back to an absolute `/usr/bin/*` path.
|
||||
- Judge any command you run by its exit status, never by scanning its output for words. `error` or `not found` inside passing output is text, not a failure.
|
||||
- Do not implement anything.
|
||||
|
||||
## Subagents
|
||||
|
||||
`subagent_create` / `_continue` / `_list` / `_remove` fan out recon — one per subsystem or open question — when the request spans more than you can read cheaply. Give each a self-contained task; omit `model`.
|
||||
|
||||
They run in the background. **Wait for every one you spawned to report before writing `plan.md` or your Report JSON.** Skip them when a few reads would do.
|
||||
45
sssf/templates/prompt_engineering/planner/user.md
Normal file
45
sssf/templates/prompt_engineering/planner/user.md
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
# Plan Task
|
||||
|
||||
## Variables
|
||||
|
||||
### prompt
|
||||
|
||||
{{prompt}}
|
||||
|
||||
### previous_envelope
|
||||
|
||||
{{previous_envelope}}
|
||||
|
||||
### context_handoff_dir
|
||||
|
||||
{{context_handoff_dir}}
|
||||
|
||||
## Task
|
||||
|
||||
Plan the work described in `prompt`.
|
||||
|
||||
1. Write the full plan to `<context_handoff_dir>/plan.md` — this is the copy the builder reads.
|
||||
2. Copy that file into the repo under `specs/`:
|
||||
- **List `specs/` before you pick the name.** A session that plans more than once reuses its `<adw_id>`, so the obvious name may already be taken.
|
||||
- Base name: `specs/<adw_id>_<slug>.md`, where `<adw_id>` is the session directory name inside `context_handoff_dir` (`.../sessions/<adw_id>/context_handoff`) and `<slug>` is two to four kebab-case words naming the work.
|
||||
- If a file with that name already exists, use `specs/<adw_id>_<slug>_v2.md`, then `_v3`, and so on until the name is free. **Never overwrite an existing spec** — the earlier plan is the record of what was asked for then.
|
||||
- **Copy it, do not retype it.** One bash call does the whole step:
|
||||
`mkdir -p specs && cp "<context_handoff_dir>/plan.md" "specs/<adw_id>_<slug>.md"`
|
||||
Writing the plan a second time through `write` re-emits every line you already wrote, which costs the whole document again in output tokens and lets the two copies drift.
|
||||
3. Emit your `Report` JSON, declaring BOTH paths in `artifacts`.
|
||||
|
||||
## Report
|
||||
|
||||
Respond with ONLY valid JSON matching `PlanOutput` — no prose before or after:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "success",
|
||||
"summary": "<one sentence describing the plan>",
|
||||
"artifacts": ["<context_handoff_dir>/plan.md", "specs/<adw_id>_<slug>.md"],
|
||||
"commit_message": "<imperative one-line git subject for committing THIS PLAN DOCUMENT, not the work it describes — e.g. 'Add spec for the /health endpoint'>",
|
||||
"notes_for_next_agent": "<what the builder must know>"
|
||||
}
|
||||
```
|
||||
|
||||
Both `artifacts` entries are the paths you ACTUALLY wrote, `_v2` suffix and all. Gates open these files — a name you meant to use fails them.
|
||||
Loading…
Add table
Add a link
Reference in a new issue