@sassywares/skills 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@ description: >-
|
|
|
4
4
|
Commit, push, and open a PR, then babysit it by default. Use when asked to
|
|
5
5
|
ship/open a PR, or for a PR-description-only flow (writing, rewriting, or
|
|
6
6
|
describing a PR body).
|
|
7
|
-
argument-hint: "[PR ref] [branch:new|current] [babysit:on|off] [checkpoint] [merge:on|off] [delete-branch:on|off]"
|
|
7
|
+
argument-hint: "[PR ref] [branch:new|current] [base:<branch>] [babysit:on|off] [checkpoint] [merge:on|off] [delete-branch:on|off]"
|
|
8
8
|
disable-model-invocation: true
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -36,7 +36,7 @@ Only an exit-0 empty list means "no open PR". A non-zero exit means **unknown**
|
|
|
36
36
|
|
|
37
37
|
**Branch policy.** Default: if on the base branch or detached HEAD, create a feature branch named from the work and say so. `branch:current` or a plain request keeps the checked-out branch (that run pushes and skips the PR). Never ask whether to branch. Forward the resolved choice to `sassy-commit`: `branch:new <name>` when this run creates a branch, else `branch:current`.
|
|
38
38
|
|
|
39
|
-
**Base branch.** `<base>` is `repos[<repo dir>]` from a workspace config, else `git.default_branch`, else the probed remote HEAD.
|
|
39
|
+
**Base branch.** `<base>` is `repos[<repo dir>]` from a workspace config, else `git.default_branch`, else the probed remote HEAD. An explicit `base:<branch>` token wins over all of them — use it when this PR targets something other than the day-to-day base, such as a release PR aimed at `main` while work lands on `staging`. **Never use `defaultBranchRef` as the PR base when the config names one.** Pass it explicitly: `gh pr create --base <base>`.
|
|
40
40
|
|
|
41
41
|
**Refused topologies.** From a `workspace` root there is no single PR to open — refuse in one line and point at `sassy-ship`, which owns the per-repo fan-out. With `git.repo: none`, refuse and say why. Neither ever pushes directly to a base branch.
|
|
42
42
|
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sassy-setup
|
|
3
3
|
description: >-
|
|
4
|
-
Detect a project's topology and
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
project.
|
|
4
|
+
Detect a project's topology and wire it for the Sassy Skills suite: write
|
|
5
|
+
.sassywares/config.yaml, pin the skills as an npm dependency, link them where
|
|
6
|
+
harnesses look, and install the snapshot tooling in a multi-repo workspace.
|
|
7
|
+
Use when asked to set up, configure, or verify a project.
|
|
9
8
|
argument-hint: "[path] [--check]"
|
|
10
9
|
disable-model-invocation: true
|
|
11
10
|
---
|
|
@@ -23,11 +22,11 @@ disable-model-invocation: true
|
|
|
23
22
|
1. **Resolve the start.** The argument's path, else the working directory. If a `.sassywares/config.yaml` is already found walking up, this is a **verify run**: run the checks in step 7 and report, without rewriting anything.
|
|
24
23
|
2. **Detect.** Run `scripts/detect.sh --root <path>`. It prints a proposed config: topology (`repo`, `workspace`, `none`), the remote name, a probed base branch, nested repos with their bases, and which artifact paths exist.
|
|
25
24
|
3. **Ask only what detection cannot answer.** Never re-ask what the tree already said.
|
|
26
|
-
- **`workspace`** — the snapshot mirror: create a **private** GitHub repo, or connect an existing one
|
|
25
|
+
- **`workspace`** — the snapshot mirror: create a **private** GitHub repo, or connect an existing one? Creating it needs explicit approval and a named slug first.
|
|
27
26
|
- **`none`** — confirm the intent: this folder is deliberately outside git, so commit, PR, and babysit refuse here.
|
|
28
27
|
- **Artifacts** — offer the detected paths as the default; take overrides.
|
|
29
28
|
- **Knowledge** — `knowledge.read` defaults to the solutions dir plus the concepts file. Ask whether there are extra folders to read (a hand-written `notes/learnings/`, a `docs/adr/`).
|
|
30
|
-
- **Base branch** —
|
|
29
|
+
- **Base branch** — if detection printed no `default_branch`, ask; never write `main` as a guess. In `workspace` mode, show the `repos` map and get a yes on every row — a probed base is only the remote's default, so a repo that targets `dev` or `staging` reads `main` until a human corrects it.
|
|
31
30
|
- **`pr.*`** — default `babysit: true`, `merge: false`, `delete_branch: false`. Say plainly that `merge: true` authorizes merging every babysat PR in this project without asking.
|
|
32
31
|
- **Hooks** — offer, do not impose. Ask whether the project wants steps injected at `before_create`, `after_create`, `before_merge`, or `after_merge`, and write the skills they name. Leave them `[]` when they have nothing to add. **Never write a hook skill yourself** — hooks are project skills, and copying one of ours into that role is the fork this mechanism exists to prevent.
|
|
33
32
|
4. **Write the config.** Build the file from the proposal plus the answers. It is written **fully commented**: every key keeps a description and its allowed values, exactly as the detector emits them. Never strip those comments to save lines — for a teammate opening the file, the comments are the documentation. If a config already exists, show what changes and ask before writing — never silently overwrite. Keep every key; an unset key falls back to its documented default, so a short file is legal when nothing deviates.
|
|
@@ -42,21 +41,8 @@ disable-model-invocation: true
|
|
|
42
41
|
- **Write `.sassywares/README.md`** from `assets/sassywares-readme.md` when absent. Never overwrite it — it may carry project notes.
|
|
43
42
|
- **Tell the user to `/reload`.** The links are invisible to the harness until it rescans.
|
|
44
43
|
|
|
45
|
-
6. **Install the snapshot, `workspace` only.**
|
|
44
|
+
6. **Install the snapshot, `workspace` only.** Read `references/workspace.md` and follow it.
|
|
46
45
|
|
|
47
|
-
```text
|
|
48
|
-
.sassywares/
|
|
49
|
-
├── config.yaml
|
|
50
|
-
└── workspace/
|
|
51
|
-
├── snapshot the script (tracked)
|
|
52
|
-
├── .gitignore exclude patterns for the sync (tracked)
|
|
53
|
-
└── mirror/ the side clone (untracked, self-excluded)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
- Copy `assets/snapshot` to `.sassywares/workspace/snapshot` and make it executable. **If a `snapshot` file is already there, say so and ask** — it may carry hand edits. Report the version you installed (`snapshot --version`) so a later `--check` can catch a stale copy.
|
|
57
|
-
- Write `.sassywares/workspace/.gitignore` for excluded paths (vendored trees, generated dirs, `.run/`). One pattern per line, `.gitignore` style. Skip it when there is nothing to exclude; the snapshot syncs without it. The mirror itself needs no line — the script excludes it.
|
|
58
|
-
- Do **not** add a `.gitignore` at the project root, and do not modify one that exists.
|
|
59
|
-
- Do **not** run the snapshot during setup. It clones and pushes; that is the user's call. Offer `--dry-run` and run it only if they ask.
|
|
60
46
|
7. **Verify.** Run `scripts/detect.sh --root <path> --check`, then `sassy-skills check` for the links. Report every `drift:` line it prints — including an outdated `snapshot` version — or that the config matches the tree.
|
|
61
47
|
8. **Report.** The config path, the topology, the resolved artifact and knowledge paths, the skills version pinned and that `/reload` is needed, and in `workspace` mode what was installed. **Commit nothing.**
|
|
62
48
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Workspace install
|
|
2
|
+
|
|
3
|
+
Read this only when the topology is `workspace`. Everything the snapshot owns
|
|
4
|
+
lives under one directory:
|
|
5
|
+
|
|
6
|
+
```text
|
|
7
|
+
.sassywares/
|
|
8
|
+
├── config.yaml
|
|
9
|
+
└── workspace/
|
|
10
|
+
├── snapshot the script (tracked)
|
|
11
|
+
├── .gitignore exclude patterns for the sync (tracked)
|
|
12
|
+
└── mirror/ the side clone (untracked, self-excluded)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- Copy `assets/snapshot` to `.sassywares/workspace/snapshot` and make it
|
|
16
|
+
executable. **If a `snapshot` file is already there, say so and ask** — it may
|
|
17
|
+
carry hand edits. Report the version you installed (`snapshot --version`) so a
|
|
18
|
+
later `--check` can catch a stale copy.
|
|
19
|
+
- Write `.sassywares/workspace/.gitignore` for excluded paths (vendored trees,
|
|
20
|
+
generated dirs, `.run/`). One pattern per line, `.gitignore` style. Skip it when
|
|
21
|
+
there is nothing to exclude; the sync works without it. The mirror needs no
|
|
22
|
+
line — the script excludes it itself.
|
|
23
|
+
- Do **not** add a `.gitignore` at the project root, and do not modify one that
|
|
24
|
+
exists.
|
|
25
|
+
- Do **not** run the snapshot during setup. It clones and pushes; that is the
|
|
26
|
+
user's call. Offer `--dry-run` and run it only if they ask.
|
|
27
|
+
|
|
28
|
+
The mirror remote comes from `git.remote`; the script falls back to the mirror's
|
|
29
|
+
own `origin` once it exists. Never create the GitHub repository without the
|
|
30
|
+
explicit approval described in the skill.
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sassy-skill
|
|
3
3
|
description: >-
|
|
4
|
-
Create, retune, or improve an Agent Skill
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
Create, retune, or improve an Agent Skill. Asks where the skill should live —
|
|
5
|
+
inside this suite, in a project, or for one user — then writes it there with
|
|
6
|
+
the rules and release steps that location requires. Use when asked to create a
|
|
7
|
+
skill, turn a workflow into a skill, fix a description or triggering,
|
|
8
|
+
restructure a bloated skill, or retune an existing one.
|
|
8
9
|
argument-hint: "[create|retune] [name, idea, or skill path]"
|
|
9
10
|
disable-model-invocation: true
|
|
10
11
|
---
|
|
11
12
|
|
|
12
13
|
# Sassy Skill
|
|
13
14
|
|
|
14
|
-
**Outcome:** a well-formed Agent Skill
|
|
15
|
+
**Outcome:** a well-formed Agent Skill at a location the user chose, or an existing skill improved and re-verified. The harness loads it with no diagnostics.
|
|
16
|
+
|
|
17
|
+
**Locations are not interchangeable** — they decide who gets the skill, how it ships, and what it may be called. Ask before writing.
|
|
15
18
|
|
|
16
19
|
**Scope:** skills only — not extensions, packages, or prompt templates.
|
|
17
20
|
|
|
@@ -22,11 +25,26 @@ disable-model-invocation: true
|
|
|
22
25
|
- **Description:** required, ≤1024 chars. Pi advertises name + description at startup; the body loads only when the skill is used. The description decides whether the skill ever fires — write **what it does and when to use it**.
|
|
23
26
|
- **Frontmatter fields:** `name`, `description` (required); optional `license`, `compatibility`, `metadata`, `allowed-tools`, `disable-model-invocation`.
|
|
24
27
|
- Use `disable-model-invocation: true` for skills that should run only via explicit `/skill:name`.
|
|
25
|
-
- **Locations:** user `~/.agents/skills/<name>/`; project `<repo>/.agents/skills/<name>/` (discovered from cwd up to the repo root). Also the `skills` array in settings and pi packages.
|
|
26
28
|
- **Reference other skills by name, never by absolute path.** The suite can live in `~/.agents/skills/`, a project `.agents/skills/`, or inside `node_modules/`, so "load the sassy-commit skill" is portable where a `~/…` path is not. Name a bundled file as "the sassy-setup skill's `references/config.md`".
|
|
27
29
|
- Pi **validates at startup**; malformed or descriptionless skills warn. `/reload` applies changes.
|
|
28
30
|
- Pi implements the **Agent Skills specification** (agentskills.io). For the full spec, pi's own `docs/skills.md` is authoritative — read it when the rules here are not enough.
|
|
29
31
|
|
|
32
|
+
## Where the skill lives
|
|
33
|
+
|
|
34
|
+
Ask which one, unless the request already made it obvious. The answer changes the name, the sharing, and whether a release is needed.
|
|
35
|
+
|
|
36
|
+
| Location | Path | Who gets it | Extra work |
|
|
37
|
+
|---|---|---|---|
|
|
38
|
+
| **Internal** — part of this suite | `skills/<name>/` in the sassy-skills repo | Everyone, after a release | Name it `sassy-<name>`, bump `package.json`, run `scripts/sync.sh`, then tag to publish |
|
|
39
|
+
| **Project** — team workflow | `<repo>/.agents/skills/<name>/` | Everyone who clones that repo | Commit it; prefix the project (`tap2-…`) so it can't collide with a suite skill or a harness built-in |
|
|
40
|
+
| **User** — personal workflow | `~/.agents/skills/<name>/` | Only this person, every repo on this machine | None — but nothing gates it either; never put something a teammate needs here |
|
|
41
|
+
|
|
42
|
+
Recommend by audience: the team needs it → **project**; only the requester → **user**; it belongs to every project using this suite → **internal**.
|
|
43
|
+
|
|
44
|
+
Internal is the only one that implies a release. Never choose it silently: from the moment it lands, consumers see it only when they bump their pin. Say that out loud when you do.
|
|
45
|
+
|
|
46
|
+
Paths in the table are the defaults. Harnesses also read `skills` arrays in settings and installed packages, so a skill may live elsewhere — write down where it actually went.
|
|
47
|
+
|
|
30
48
|
## Shape rule — the lean rule
|
|
31
49
|
|
|
32
50
|
- **Default to one `SKILL.md`.**
|
|
@@ -36,7 +54,7 @@ disable-model-invocation: true
|
|
|
36
54
|
|
|
37
55
|
## Workflow
|
|
38
56
|
|
|
39
|
-
1. **Intake.** What the skill does, when it should trigger, and
|
|
57
|
+
1. **Intake.** What the skill does, when it should trigger, and **where it lives** — internal, project, or user (see above). Ask; do not infer from the cwd. For a retune, read the existing skill and name the specific failure (won't trigger, too long, wrong steps, stale, wrong scope).
|
|
40
58
|
2. **Choose the shape.** Single file, or `SKILL.md` + `references/` per the rule above.
|
|
41
59
|
3. **Write the frontmatter.** A description that states both what and when.
|
|
42
60
|
4. **Write the body.** Outcome, a hard-rules table, the workflow, and reference pointers. Plain English. Structured output where the skill returns a result. Match this setup's house style.
|
|
@@ -59,7 +77,7 @@ When asked to retune or improve a skill, change the **smallest** thing that fixe
|
|
|
59
77
|
- **Won't trigger** → rewrite the description (what + when, concrete verbs).
|
|
60
78
|
- **Too long / bloated** → extract conditional content to `references/`, or delete what never gets used.
|
|
61
79
|
- **Wrong or stale steps** → correct the workflow against the current tree.
|
|
62
|
-
- **Wrong scope** → move it between
|
|
80
|
+
- **Wrong scope** → move it between internal, project, and user. Moving into the suite is a release; moving out of it means the next release drops the skill for everyone.
|
|
63
81
|
|
|
64
82
|
Re-verify after any retune.
|
|
65
83
|
|