Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
48c8d08
chore: ignore the local .superpowers agent workspace
ArtemKosolap Jul 30, 2026
a98c89e
feat: skills pack registry and dependency resolution
ArtemKosolap Jul 30, 2026
dd199ab
feat: skills host registry for six assistants
ArtemKosolap Jul 30, 2026
4930462
feat: detect installed assistants by config dir and binary
ArtemKosolap Jul 30, 2026
079837e
fix: correct glob_first parent computation and add real-filesystem tests
ArtemKosolap Jul 30, 2026
05415f8
feat: installer journal for flat-directory skill hosts
ArtemKosolap Jul 30, 2026
0e28c96
fix: journal error handling and atomic writes per review
ArtemKosolap Jul 30, 2026
1eb2bec
feat: native plugin adapter for Claude Code and Codex
ArtemKosolap Jul 30, 2026
71e0b43
fix: pin marketplace registration behavior in update test
ArtemKosolap Jul 30, 2026
c1a252a
fix: correctness issues in native adapter
ArtemKosolap Jul 30, 2026
9999c3e
feat: flat-directory adapter for SKILL.md hosts
ArtemKosolap Jul 30, 2026
58f0af2
fix: scope-aware skills journal and safer flat-adapter deletion/copy
ArtemKosolap Jul 30, 2026
83095ac
fix: block dependent packs when a flat-host install fails
ArtemKosolap Jul 30, 2026
9fdffe4
fix: mark incomplete flat-adapter installs so repair actually re-runs
ArtemKosolap Jul 30, 2026
3a36167
feat: per-host reporting and exit-code mapping for skills
ArtemKosolap Jul 31, 2026
d70880c
fix: surface pack names in failed-pack detail lines and improve test …
ArtemKosolap Jul 31, 2026
9abfe4d
feat: orchestrate skills install across detected assistants
ArtemKosolap Jul 31, 2026
4093eaa
fix: isolate per-host adapter failures and stop misattributing instal…
ArtemKosolap Jul 31, 2026
c2e6a2b
feat: add reply skills install/list/update/remove
ArtemKosolap Jul 31, 2026
e4f809b
fix: distinguish available-update from applied-update in skills list
ArtemKosolap Jul 31, 2026
4455ec8
fix: make skills summary.installed action-aware for list
ArtemKosolap Jul 31, 2026
b55f74d
test: real-host smoke check for skills install
ArtemKosolap Jul 31, 2026
1b1648d
test: fix sandbox isolation for flat hosts with post-run verification
ArtemKosolap Jul 31, 2026
41b8b84
test: replace name-based post-run assertion with snapshot comparison
ArtemKosolap Jul 31, 2026
d226b55
test: run post-run assertion unconditionally, never skip via process.…
ArtemKosolap Jul 31, 2026
d8fe6a0
test: watch host root directories, not just their skills leaf
ArtemKosolap Jul 31, 2026
f9d17c7
test: prove real isolation directly, make native detection honest, pi…
ArtemKosolap Jul 31, 2026
36ae3a7
fix(skills): protect the core-before-dependents invariant on remove
ArtemKosolap Jul 31, 2026
55bfe40
fix(skills): send list data to stdout and word the exit-1 error per o…
ArtemKosolap Jul 31, 2026
17e1bc7
feat(skills): tell the user which assistants have unverified paths
ArtemKosolap Jul 31, 2026
c3f8867
fix(skills): advise a new session when a re-copy rewrote files at the…
ArtemKosolap Jul 31, 2026
5fa402f
fix: assert case sensitivity per platform, not Windows everywhere
ArtemKosolap Jul 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ node_modules/
dist/
*.tgz
coverage/
.superpowers/
13 changes: 13 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,19 @@ server. `fetch` is stubbed, and the OAuth loopback flow is exercised against a
local `127.0.0.1` listener with an injected browser stub. CI runs the build and
tests on Linux and Windows.

`npm run smoke:hosts` is a separate check that runs `reply skills install`
entirely inside a throwaway `HOME`/`USERPROFILE` sandbox, and proves your real
home is untouched with a before/after filesystem snapshot. Native hosts
(Claude Code, Codex) are only genuinely exercised when actually installed —
each is additionally pointed at a throwaway config directory
(`CLAUDE_CONFIG_DIR`, `CODEX_HOME`) so its real plugin state is untouched
either way. Flat-directory hosts (Cursor, Gemini CLI, GitHub Copilot) are
always *simulated* inside the sandbox, regardless of what is really on your
machine — that's deliberate, since it's the only way the flat-directory
install path gets exercised at all. It is not part of `npm test` because it
clones from GitHub and, for native hosts, needs a real assistant installed to
exercise for real.

## Conventions

- Data is written to stdout; status and error messages go to stderr.
Expand Down
62 changes: 62 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,68 @@ It prints `{ "code": <status>, "data": <body> }` and exits non-zero on HTTP
stderr. Add `--verbose` for a full request/response trace on stderr with
credentials redacted; stdout stays the plain JSON, so pipes keep working.

## Skills

Reply's outbound expertise ships as three markdown skill packs in
[reply-skills](https://github.com/reply-team/reply-skills). One command installs
them into every AI assistant on your machine, dependencies resolved:

```sh
reply skills install
```

```
✓ detected Claude Code, Codex
✓ Claude Code · ai-sdr-core, reply-adapter, agentic-runtime installed
✓ Codex · ai-sdr-core, reply-adapter, agentic-runtime installed
Start a new session in each assistant so the skills load.
```

| Pack | Alias | What it gives your agent |
|---|---|---|
| `ai-sdr-core` | `core` | Vendor-neutral SDR operations, playbooks and guardrails |
| `reply-adapter` | `adapter` | Executing those operations against Reply.io |
| `agentic-runtime` | `runtime` | Durable multi-session work: plans, checkpoints, reports |

Install a subset — dependencies come along automatically, so `adapter` pulls
`core`:

```sh
reply skills install core
reply skills install adapter runtime
reply skills install --agent codex # only this assistant
reply skills install --project # into this repository, not your home
```

Then manage them:

```sh
reply skills list # what's installed where (notes packs with an update available)
reply skills update # bring installed packs to the latest version
reply skills remove runtime # remove one pack
reply skills remove # remove all of them
```

On Claude Code and Codex the packs are installed through the assistant's own
plugin mechanism, so they keep updating through it. Other `SKILL.md` hosts
receive the skills as files. Add `--json` for a machine-readable report, and
`--dry-run` to see the plan without changing anything.

| Assistant | How it receives the packs | Paths verified |
|---|---|---|
| Claude Code | its own plugin CLI | yes |
| Codex | its own plugin CLI (`--project` copies files instead) | yes |
| Cursor · Gemini CLI · GitHub Copilot · Windsurf | copied files | not yet |

"Not yet" means the skills directory for that assistant comes from its
documentation and has not been confirmed by a verification run of our own
(REPLY-51268): the install works, but we cannot promise the assistant reads
from where we put the files. Those hosts are marked `(paths not yet verified)`
in the report and carry `"verified": false` in `--json`.

Installing skills is not the same as connecting Reply: `reply-adapter` needs a
Reply.io login (`reply auth login`) to actually do anything.

## Environment variables

| Variable | Description |
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"clean": "rm -rf dist",
"test": "vitest run",
"test:watch": "vitest",
"smoke:hosts": "node scripts/smoke-hosts.mjs",
"prepare": "husky"
},
"author": "Reply.io",
Expand Down
Loading
Loading