@prowl-ai/prowl-skill 0.4.0
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/CHANGELOG.md +120 -0
- package/LICENSE +21 -0
- package/README.md +152 -0
- package/bin/prowl-skill.js +402 -0
- package/package.json +49 -0
- package/plugins/prowl/.claude-plugin/plugin.json +13 -0
- package/plugins/prowl/.codex-plugin/plugin.json +44 -0
- package/plugins/prowl/.mcp.json +11 -0
- package/plugins/prowl/hooks/hooks.json +42 -0
- package/plugins/prowl/hooks/post-tool-use.js +94 -0
- package/plugins/prowl/hooks/pre-tool-use.js +45 -0
- package/plugins/prowl/hooks/session-start.js +33 -0
- package/plugins/prowl/lib/osc.js +87 -0
- package/plugins/prowl/lib/prowl.js +260 -0
- package/plugins/prowl/lib/render.js +180 -0
- package/plugins/prowl/lib/state.js +237 -0
- package/plugins/prowl/skills/prowl/SKILL.md +136 -0
- package/plugins/prowl/statusline/prowl-statusline.js +107 -0
- package/plugins/prowl-cli/.claude-plugin/plugin.json +13 -0
- package/plugins/prowl-cli/.codex-plugin/plugin.json +44 -0
- package/plugins/prowl-cli/skills/prowl-cli/SKILL.md +96 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v0.4.0 — 2026-08-13
|
|
4
|
+
|
|
5
|
+
Package `@prowl-ai/prowl-skill` 0.4.0 · plugins `prowl` 0.3.0, `prowl-cli` 0.1.1
|
|
6
|
+
(unchanged — the package gained an installer, the plugins did not change).
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- **`npx @prowl-ai/prowl-skill`** — one command that adds the marketplace, installs
|
|
11
|
+
both plugins and says what to do next. Verbs: `install`, `update`, `statusline`,
|
|
12
|
+
`token`, `status`, `plain`. Every one takes `--dry-run`, which prints what it would
|
|
13
|
+
do and changes nothing. Zero dependencies: it runs through `npx` on a machine that
|
|
14
|
+
has agreed to nothing yet.
|
|
15
|
+
|
|
16
|
+
**It installs the plugin rather than copying the skill**, and that is the design
|
|
17
|
+
decision worth stating. The obvious shape — copy `skills/prowl/` into
|
|
18
|
+
`~/.claude/skills/` — delivers the text and silently drops everything the text is
|
|
19
|
+
about: the hooks and the MCP server. Worse, a plain copy of the same name shadows an
|
|
20
|
+
installed plugin and serves its frozen version forever. `plain` exists for agents
|
|
21
|
+
with no plugin channel and refuses to run where the plugin is installed.
|
|
22
|
+
|
|
23
|
+
Two things it will not do quietly: it never replaces a `statusLine` somebody else
|
|
24
|
+
set without `--force`, and it never writes to `~/.claude/settings.json` without
|
|
25
|
+
taking a backup first and reading it back — a copy that cannot be verified cancels
|
|
26
|
+
the write.
|
|
27
|
+
|
|
28
|
+
- **`release.yml`** — tag-driven publication, off by default behind the repository
|
|
29
|
+
variables `RELEASE_ENABLED` and `PUBLISH_NPMJS`. A `v*` tag runs the suite and every
|
|
30
|
+
guard **on the tag**, validates both plugins and the marketplace with
|
|
31
|
+
`claude plugin validate --strict`, checks that the tag matches `package.json`,
|
|
32
|
+
extracts the CHANGELOG section, cuts the GitHub release, packs the tarball and runs
|
|
33
|
+
the installer out of it the way `npx` would, then publishes with provenance.
|
|
34
|
+
|
|
35
|
+
A tag rather than a push to main: every commit publishing would make every
|
|
36
|
+
work-in-progress state a release somebody's `npx` picks up.
|
|
37
|
+
|
|
38
|
+
- **`test/version_sync_test.js`** — the version lives in seven places. The two plugins
|
|
39
|
+
are versioned independently, so the rule is agreement *within* a plugin plus
|
|
40
|
+
`package.json` matching the tag. It also asserts both marketplace manifests list
|
|
41
|
+
exactly the plugin directories on disk, and that the CHANGELOG has a heading the
|
|
42
|
+
release workflow's pattern can find.
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- **The CHANGELOG heading could not be extracted**, and nothing would have said so
|
|
47
|
+
until after the tag was public — the class that cost a sibling project three
|
|
48
|
+
releases. Found offline by the new check, before any tag existed.
|
|
49
|
+
|
|
50
|
+
- **`scripts/` shipped inside the npm tarball.** `negative-self-test.js` rewrites
|
|
51
|
+
source files by design; inside a published package that is a script capable of
|
|
52
|
+
mangling somebody's `node_modules`, and no consumer has any use for it.
|
|
53
|
+
|
|
54
|
+
## v0.3.0 — 2026-08-13
|
|
55
|
+
|
|
56
|
+
Package `@prowl-ai/prowl-skill` 0.3.0 · plugins `prowl` 0.3.0, `prowl-cli` 0.1.1.
|
|
57
|
+
|
|
58
|
+
### Added
|
|
59
|
+
|
|
60
|
+
- **The status widget.** A `prowl_analyze` call runs 30 seconds to 5 minutes and an
|
|
61
|
+
async session runs longer; until now the terminal showed a spinner and the cost
|
|
62
|
+
appeared only inside a response body nobody reads.
|
|
63
|
+
|
|
64
|
+
The plugin now ships three observing hooks. A call opens a record keyed by its
|
|
65
|
+
`tool_use_id` and closes it when the response arrives, carrying the debit the server
|
|
66
|
+
reported in `billing.actual_cost_usd`. A fraction from `prowl_session_status` becomes
|
|
67
|
+
a dock/taskbar progress bar, taken down when the session reports a terminal status
|
|
68
|
+
rather than when a poll happens to end. A failed call and a wallet gate are said
|
|
69
|
+
once per kind of failure — an agent retrying five times must not produce five
|
|
70
|
+
notices — to the operator as a message and to the agent as context, so it stops
|
|
71
|
+
retrying.
|
|
72
|
+
|
|
73
|
+
**It calls no API.** Every figure was already in a response the agent received.
|
|
74
|
+
|
|
75
|
+
- **An opt-in status line**, wired by the operator in two documented commands, showing
|
|
76
|
+
the in-flight call and its elapsed time, calls / ok / failed, spend, context usage,
|
|
77
|
+
and the last five tools with their verdicts. A plugin cannot ship one: no plugin
|
|
78
|
+
manifest declares `statusLine`. The script finds its library whether it runs inside
|
|
79
|
+
the plugin or copied to a stable path, and prints nothing when it finds neither.
|
|
80
|
+
|
|
81
|
+
- **Tests and CI**, which this repository had none of. 89 checks across six suites,
|
|
82
|
+
including end-to-end fixtures that run the real hook scripts as processes against
|
|
83
|
+
empty, malformed and absent payloads — a hook that throws breaks the turn of every
|
|
84
|
+
session that installed the plugin. Plus `scripts/negative-self-test.js`: six guards,
|
|
85
|
+
each disarmed in turn, with the suite required to go red and the tree byte-compared
|
|
86
|
+
on restore.
|
|
87
|
+
|
|
88
|
+
### Fixed
|
|
89
|
+
|
|
90
|
+
- **The tool count was 408 in eight files while the server served 448** — restated
|
|
91
|
+
twenty times and with nothing keeping it true. Corrected, and
|
|
92
|
+
`scripts/check-tool-count.js` now compares the repository's figure against
|
|
93
|
+
`prowl.chat/mcp/skill.md` on every CI run. A network failure is reported as
|
|
94
|
+
*unknown*, never as drift: a check that could not reach the server has learned
|
|
95
|
+
nothing, and saying otherwise trains people to ignore it.
|
|
96
|
+
|
|
97
|
+
- **The adapter could not have found a single debit.** The live server double-encodes:
|
|
98
|
+
`prowl_get_stats` and `prowl_list_tools` both answer `{"result": "<a JSON string>"}`.
|
|
99
|
+
The walker treated `result` as a leaf and stopped there, so every metered call would
|
|
100
|
+
have rendered `$—` forever — with the whole suite green, because the fixtures were
|
|
101
|
+
written from the documentation and the documentation describes the inner shape.
|
|
102
|
+
Found by calling a free tool and reading the response. `test/live_shapes_test.js` now
|
|
103
|
+
holds the captured bodies, and the envelope-following is planted against.
|
|
104
|
+
|
|
105
|
+
- **A negative self-test that fired on a coin flip.** The lock guard proved itself on
|
|
106
|
+
Node 18 and not on Node 22, and CI is what said so: the fixture detected the lost
|
|
107
|
+
update probabilistically, because eight processes launched in sequence can also
|
|
108
|
+
finish in sequence. A start barrier and five writes per writer make it deterministic
|
|
109
|
+
— verified three times in each direction.
|
|
110
|
+
|
|
111
|
+
- **The widget said `1 calls`.** Eighteen render fixtures, every one of them using a
|
|
112
|
+
plural count. Found by driving the installed plugin by hand and reading the line.
|
|
113
|
+
|
|
114
|
+
### Notes
|
|
115
|
+
|
|
116
|
+
- State lives in `~/.prowl/status/<session_id>.json`, beside the token file, and is
|
|
117
|
+
pruned after seven days. The plugin writes nothing to `~/.claude/settings.json`.
|
|
118
|
+
- Known gap, recorded rather than hidden: this repository states `22 MCP tools` and
|
|
119
|
+
tabulates 20 of them. `prowl_list_sessions`, `prowl_test_tool` and the
|
|
120
|
+
`prowl_get_tool_info` alias are served but appear in no table here.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Prowl
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Prowl Plugin
|
|
2
|
+
|
|
3
|
+
**One MCP. 448 market-intelligence tools for your agent.**
|
|
4
|
+
|
|
5
|
+
[](https://prowl.chat)
|
|
6
|
+
[](https://prowl.chat/mcp)
|
|
7
|
+
[](https://prowl.chat/mcp/skill.md)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
10
|
+
[Prowl](https://prowl.chat) is a single MCP endpoint that gives any AI agent (Cursor, Claude Code, Codex, or your own stack) **448 market-intelligence tools across 15 providers** — SEO & backlinks, 60+ SERP engines, ad libraries, web scraping, reviews, AI/LLM mention tracking — plus the full Prowl research pipeline. Your agent calls real data instead of guessing, billed pay-as-you-go from a USD wallet.
|
|
11
|
+
|
|
12
|
+
This repo is the **installable plugin**: a namespaced `/prowl:*` skill plus a ready-made MCP config. Install it and your coding agent wires up the rest itself.
|
|
13
|
+
|
|
14
|
+
- MCP URL: `https://prowl.chat/mcp` (Streamable HTTP)
|
|
15
|
+
- Auth: `Authorization: Bearer prowl_<your_key>`
|
|
16
|
+
- Hosted install playbook: <https://prowl.chat/mcp/install.md>
|
|
17
|
+
- Full tool reference: <https://prowl.chat/mcp/skill.md>
|
|
18
|
+
|
|
19
|
+
## Plugins included
|
|
20
|
+
|
|
21
|
+
| Plugin | Skill | What it covers |
|
|
22
|
+
|--------|-------|----------------|
|
|
23
|
+
| `prowl` | `/prowl` | Install and use the Prowl **MCP**: token setup, core tools (`prowl_list_tools`, `prowl_search_tools`, `prowl_tool_info`, `prowl_call_tool`, `prowl_analyze`, async sessions, schedules), tiers, playbooks, verification, and billing. Ships the `.mcp.json`. |
|
|
24
|
+
| `prowl-cli` | `/prowl-cli` | Drive the same catalog from the **shell** with [`@prowl-ai/cli`](https://github.com/PROWL-AI/prowl-cli): catalog commands, metered calls, `analyze` tiers and their cost caps, playbooks, `--json` output, exit codes. No MCP server required. |
|
|
25
|
+
|
|
26
|
+
Install either or both — the MCP plugin for agent tool calls, the CLI plugin for scripts, CI and terminal work.
|
|
27
|
+
|
|
28
|
+
## Setup
|
|
29
|
+
|
|
30
|
+
### 1. Get a token (human, one time)
|
|
31
|
+
|
|
32
|
+
1. Sign up at <https://prowl.chat> ($5 starter credit, no card).
|
|
33
|
+
2. Optionally top up the wallet.
|
|
34
|
+
3. Generate a `prowl_...` API key under **MCP Home → API keys & config** (shown once).
|
|
35
|
+
|
|
36
|
+
### 2. Provide the token to the plugin
|
|
37
|
+
|
|
38
|
+
Either export `PROWL_MCP_TOKEN`, or write a token file:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
mkdir -p ~/.prowl
|
|
42
|
+
printf '%s' "prowl_YOUR_KEY" > ~/.prowl/prowl_mcp_token
|
|
43
|
+
chmod 600 ~/.prowl/prowl_mcp_token
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 3. Install the plugin
|
|
47
|
+
|
|
48
|
+
**One command, any machine with Node 18+:**
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npx @prowl-ai/prowl-skill
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
It adds the marketplace, installs both plugins, and tells you what to do next. Then:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx @prowl-ai/prowl-skill update # refresh after a new release
|
|
58
|
+
npx @prowl-ai/prowl-skill statusline # wire the status line (backs up settings first)
|
|
59
|
+
npx @prowl-ai/prowl-skill status # what is installed, what is missing
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Pipe the key in so it never reaches your shell history:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
printf %s "prowl_YOUR_KEY" | npx @prowl-ai/prowl-skill token
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Every command takes `--dry-run`, which prints what it would do and changes nothing.
|
|
69
|
+
|
|
70
|
+
**By hand, if you prefer:**
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
claude plugin marketplace add https://github.com/PROWL-AI/prowl-skill
|
|
74
|
+
claude plugin install prowl@prowl
|
|
75
|
+
claude plugin install prowl-cli@prowl # optional: the shell client skill
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Agents with no plugin channel** (Cursor, and others that read plain skills):
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npx @prowl-ai/prowl-skill plain
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
That copies the skills and nothing else — no hooks, no status widget, no MCP server.
|
|
85
|
+
It refuses to run where the plugin is installed, because a plain copy of the same name
|
|
86
|
+
shadows a plugin and serves its frozen version forever.
|
|
87
|
+
|
|
88
|
+
**Codex**
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
codex plugin marketplace add https://github.com/PROWL-AI/prowl-skill
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Then ensure `[plugins."prowl@prowl"] enabled = true` in `${CODEX_HOME:-$HOME/.codex}/config.toml` and restart.
|
|
95
|
+
|
|
96
|
+
The bundled `.mcp.json` connects to `https://prowl.chat/mcp` via `mcp-remote`, reading the token from `PROWL_MCP_TOKEN` or `~/.prowl/prowl_mcp_token`.
|
|
97
|
+
|
|
98
|
+
### Manual MCP config (any client)
|
|
99
|
+
|
|
100
|
+
Configure a Streamable HTTP MCP server at `https://prowl.chat/mcp` with header `Authorization: Bearer prowl_YOUR_KEY`. See <https://prowl.chat/mcp/install.md> for per-client snippets (Cursor, Claude Code, Codex, generic).
|
|
101
|
+
|
|
102
|
+
## Verify
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
curl https://prowl.chat/mcp/health
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Then, from your agent, run `prowl_list_tools` (free) → 448 tools grouped by category.
|
|
109
|
+
|
|
110
|
+
## The status widget
|
|
111
|
+
|
|
112
|
+
A `prowl_analyze` call runs 30 seconds to 5 minutes and an async session runs longer.
|
|
113
|
+
For all of that time the terminal shows a spinner, and what it cost appears only
|
|
114
|
+
inside a response body nobody reads. The `prowl` plugin ships hooks that fix both.
|
|
115
|
+
|
|
116
|
+
**It calls no API.** Every figure it shows was already in a response your agent
|
|
117
|
+
received, so the widget costs nothing and cannot spend your wallet to draw itself.
|
|
118
|
+
|
|
119
|
+
On by default, once the plugin is installed:
|
|
120
|
+
|
|
121
|
+
- a **progress bar in the dock/taskbar** when `prowl_session_status` reports a
|
|
122
|
+
fraction, taken down when the session reports a terminal status
|
|
123
|
+
- a **one-time notice** when a call fails or the wallet blocks one — once per kind of
|
|
124
|
+
failure, so an agent retrying five times does not produce five notices
|
|
125
|
+
|
|
126
|
+
Opt-in, one edit to `~/.claude/settings.json` (a plugin cannot ship a status line):
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
prowl · ⟳ analyze 1:12 · 12 calls 11✓ 1✗ · $0.31 · ctx 42% · ▸ call_tool✓ tool_info✓ search_tools✓
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
See the [`prowl` skill](plugins/prowl/skills/prowl/SKILL.md#the-status-widget) for the
|
|
133
|
+
two commands. State lives in `~/.prowl/status/<session_id>.json` beside your token, is
|
|
134
|
+
pruned after seven days, and the plugin never writes to your Claude Code settings.
|
|
135
|
+
|
|
136
|
+
## What your agent gets
|
|
137
|
+
|
|
138
|
+
- **22 MCP tools** front the whole catalog — discovery and schema lookup are free; only data calls are metered.
|
|
139
|
+
- **3 tiers** for `prowl_analyze` — `basic` / `deep` / `max`, each with a hard provider-cost cap ($2.50 / $8.00 / $18.00). You are never billed more than the reserved hold.
|
|
140
|
+
- **8 playbooks** — `geo-visibility-audit`, `competitor-teardown`, `content-engine`, `local-and-reputation`, `mobile-aso`, `amazon-marketplace`, `idea-validation`, `channel-economics-audit`.
|
|
141
|
+
- **Verified reports** — a typed evidence ledger extracts claims, attacks them adversarially, then gap-fills what survives. Contradictions and refuted claims ship inside the report.
|
|
142
|
+
- **Exports** — Markdown, PDF, PPTX, audio brief, video.
|
|
143
|
+
|
|
144
|
+
Prefer a terminal? Install the `prowl-cli` plugin above, or use [`@prowl-ai/cli`](https://github.com/PROWL-AI/prowl-cli) directly.
|
|
145
|
+
|
|
146
|
+
## Security
|
|
147
|
+
|
|
148
|
+
`prowl_...` keys are billing-bearing — every metered tool call debits your USD wallet. Treat the key as a secret. Token files and `.env` are git-ignored; never commit a key to a public repo.
|
|
149
|
+
|
|
150
|
+
## License
|
|
151
|
+
|
|
152
|
+
MIT — see [LICENSE](LICENSE).
|