@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 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
+ [![Live](https://img.shields.io/badge/prowl.chat-live-00c853?style=flat-square)](https://prowl.chat)
6
+ [![MCP](https://img.shields.io/badge/MCP-prowl.chat%2Fmcp-6e40c9?style=flat-square)](https://prowl.chat/mcp)
7
+ [![Tools](https://img.shields.io/badge/tools-448-0969da?style=flat-square)](https://prowl.chat/mcp/skill.md)
8
+ [![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](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).