@prowl-ai/prowl-skill 0.5.5 → 0.5.7
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 +100 -0
- package/README.md +3 -1
- package/package.json +1 -1
- package/plugins/prowl/.claude-plugin/plugin.json +1 -1
- package/plugins/prowl/.codex-plugin/plugin.json +1 -1
- package/plugins/prowl/.mcp.json +1 -1
- package/plugins/prowl/skills/prowl/SKILL.md +3 -1
- package/plugins/prowl-cli/.claude-plugin/plugin.json +1 -1
- package/plugins/prowl-cli/.codex-plugin/plugin.json +1 -1
- package/plugins/prowl-cli/skills/prowl-cli/SKILL.md +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,105 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.5.7 — 2026-08-23
|
|
4
|
+
|
|
5
|
+
Package `@prowl-ai/prowl-skill` 0.5.7 · plugins `prowl` 0.4.4, `prowl-cli` 0.2.6
|
|
6
|
+
(unchanged).
|
|
7
|
+
|
|
8
|
+
A first run with no key opened a browser and left the operator holding a callback into
|
|
9
|
+
a port that had already died. It now refuses to start, and says what to do instead.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **The MCP launcher no longer strands the operator in a half-finished OAuth flow.**
|
|
14
|
+
With no API key configured, `plugins/prowl/.mcp.json` used to hand `mcp-remote` an
|
|
15
|
+
empty `Authorization: Bearer ` header. The server rejects that, and `mcp-remote`
|
|
16
|
+
falls back to OAuth — which opens a browser and starts a `localhost` listener to
|
|
17
|
+
catch the callback. An MCP server spawned at agent startup does not survive long
|
|
18
|
+
enough to be there when consent completes: the listener is gone, the redirect hits a
|
|
19
|
+
dead port, and the operator is left holding a URL with an authorization code that
|
|
20
|
+
expires before anything can be done with it.
|
|
21
|
+
|
|
22
|
+
Measured on one machine on 2026-08-22: two such flows in a single day, both
|
|
23
|
+
stranded. The second left `~/.mcp-auth/mcp-remote-0.1.43/…_lock.json` recording
|
|
24
|
+
`{"pid": 68661, "port": 4333}` for a process that no longer existed.
|
|
25
|
+
|
|
26
|
+
The launcher now resolves the key, and **refuses to start without one** — printing
|
|
27
|
+
the two supported ways to supply it and exiting `78` (`EX_CONFIG`, `sysexits.h`)
|
|
28
|
+
rather than reaching `mcp-remote` at all. A key that is present but empty or
|
|
29
|
+
whitespace-only counts as absent.
|
|
30
|
+
|
|
31
|
+
- **The README said 22 MCP tools; the server registers 23.** `npm run check:contract`
|
|
32
|
+
reads the count off `https://prowl.chat/mcp/` and had no claim in the README to check
|
|
33
|
+
it against — the number sat one line below a heading no gate reads. The skill page
|
|
34
|
+
already said 23.
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- **`test/mcp_launch_test.js`** — 12 checks that execute the real `.mcp.json` launcher
|
|
39
|
+
rather than reading it. A fake `npx` on the launcher's own PATH captures the argv, so
|
|
40
|
+
the suite can assert both halves: that no key means `npx` is never reached, and that
|
|
41
|
+
each documented key source (`PROWL_MCP_TOKEN`, the plugin file, the Codex file)
|
|
42
|
+
reaches `mcp-remote` carrying that exact key, in that precedence.
|
|
43
|
+
|
|
44
|
+
Shadowing `npx` by PATH alone does not work here — `sh -lc` is a login shell, and on
|
|
45
|
+
macOS `/etc/profile` runs `path_helper`, which pushes an injected PATH entry to the
|
|
46
|
+
end. A `.profile` in the fake `HOME` is sourced afterwards and does win; that is what
|
|
47
|
+
the suite uses. Nothing in it touches the network.
|
|
48
|
+
|
|
49
|
+
Verified to have teeth: against the previous launcher, 6 of the 12 checks fail, and
|
|
50
|
+
the failure output is the defect itself — `'Authorization: Bearer '`. That proof is
|
|
51
|
+
now the fourteenth plant in `scripts/negative-self-test.js`, so every CI run removes
|
|
52
|
+
the refusal from `.mcp.json` and requires the suite to go red on `npx ran without a
|
|
53
|
+
key` — a suite that quietly stopped checking this would otherwise report the same
|
|
54
|
+
green as one that still does.
|
|
55
|
+
|
|
56
|
+
## v0.5.6 — 2026-08-16
|
|
57
|
+
|
|
58
|
+
Package `@prowl-ai/prowl-skill` 0.5.6 · plugins `prowl` 0.4.3 (unchanged), `prowl-cli`
|
|
59
|
+
0.2.6.
|
|
60
|
+
|
|
61
|
+
The last open item from the `/skill-audit` run, and the tail the CLI's own release left
|
|
62
|
+
behind.
|
|
63
|
+
|
|
64
|
+
### Added
|
|
65
|
+
|
|
66
|
+
- **`test/evals/`** — the audit's item 8. `triggers.json` carries twenty queries with
|
|
67
|
+
the split written down and held fixed; `scenarios.json` carries six behavioural
|
|
68
|
+
scenarios, three per skill; `fixtures/` holds the inputs.
|
|
69
|
+
|
|
70
|
+
**Ten of the twenty queries should fire nothing**, and those are the ones worth
|
|
71
|
+
having. They are near-misses against skills that actually sit beside these two: an
|
|
72
|
+
SEO audit of your *own* site, a Google Ads audit of your *own* account, competitor
|
|
73
|
+
*UI* research, building an MCP server. A skill that wins a prompt it should lose is
|
|
74
|
+
as much a defect as one that never fires, and it is the harder one to notice because
|
|
75
|
+
it produces an answer.
|
|
76
|
+
|
|
77
|
+
Four of the six scenarios encode something that already went wrong or already costs
|
|
78
|
+
money: `execution_mode` rather than `tier`, discovery before a metered call, a
|
|
79
|
+
prompt-injection fixture with the payload in an HTML comment, and a scenario that
|
|
80
|
+
hands the agent a live-looking `prowl_` key to see whether it protects it.
|
|
81
|
+
|
|
82
|
+
- **`test/evals_test.js`** — ten checks on the *shape* of that data: the negatives are
|
|
83
|
+
really half the set, the split is stated rather than inferred, both skills appear on
|
|
84
|
+
both sides of it, no fixture is named `SKILL.md`.
|
|
85
|
+
|
|
86
|
+
**It cannot tell you the skills pass, and says so.** There is no runner; the queries
|
|
87
|
+
go to a model. The README states in its own words that the evals have never been run,
|
|
88
|
+
and a test asserts that sentence is still there — because prose drifts, and the
|
|
89
|
+
pressure to delete it arrives the first time somebody wants a green.
|
|
90
|
+
|
|
91
|
+
- **`check:cli` notices a version that is no longer latest.** A **note**, never a
|
|
92
|
+
failure: the command surface may be identical, so it is not a falsehood. This
|
|
93
|
+
repository was in exactly that state an hour ago — the CLI published `0.2.1` while
|
|
94
|
+
the page still documented `0.2.0`, every check green, the page quietly pointing at a
|
|
95
|
+
version `npm install` no longer gives you.
|
|
96
|
+
|
|
97
|
+
### Fixed
|
|
98
|
+
|
|
99
|
+
- `metadata.documents_cli` and the page's own sentence now say `0.2.1`, which is what
|
|
100
|
+
npm serves as `latest`.
|
|
101
|
+
|
|
102
|
+
## v0.5.5 — 2026-08-16
|
|
3
103
|
## v0.5.5 — 2026-08-16
|
|
4
104
|
|
|
5
105
|
Package `@prowl-ai/prowl-skill` 0.5.5 · plugins `prowl` 0.4.3, `prowl-cli` 0.2.5.
|
package/README.md
CHANGED
|
@@ -97,6 +97,8 @@ Then ensure `[plugins."prowl@prowl"] enabled = true` in `${CODEX_HOME:-$HOME/.co
|
|
|
97
97
|
|
|
98
98
|
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`.
|
|
99
99
|
|
|
100
|
+
With no key in either place the server **refuses to start** — it prints the two ways to supply one and exits `78` (`EX_CONFIG`). It deliberately does not fall through to `mcp-remote`'s OAuth: that opens a browser and waits on a `localhost` callback, and an MCP server started by an agent is killed long before the consent screen comes back, leaving the operator holding a redirect into a dead port.
|
|
101
|
+
|
|
100
102
|
### Manual MCP config (any client)
|
|
101
103
|
|
|
102
104
|
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).
|
|
@@ -137,7 +139,7 @@ pruned after seven days, and the plugin never writes to your Claude Code setting
|
|
|
137
139
|
|
|
138
140
|
## What your agent gets
|
|
139
141
|
|
|
140
|
-
- **
|
|
142
|
+
- **23 MCP tools** front the whole catalog — discovery and schema lookup are free; only data calls are metered.
|
|
141
143
|
- **3 execution modes** for `prowl_analyze` — `basic` (20–100 calls, 30–90s), `deep` (40–300, 3–5 min, needs Exploit+) and `max` (60–400, 5–10 min, needs Blackops+). A key without the subscription is downgraded to `basic` rather than refused.
|
|
142
144
|
- **8 playbooks** — `geo-visibility-audit`, `competitor-teardown`, `content-engine`, `local-and-reputation`, `mobile-aso`, `amazon-marketplace`, `idea-validation`, `channel-economics-audit`.
|
|
143
145
|
- **Verified reports** — a typed evidence ledger extracts claims, attacks them adversarially, then gap-fills what survives. Contradictions and refuted claims ship inside the report.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prowl-ai/prowl-skill",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.7",
|
|
4
4
|
"description": "The Prowl plugin: install/usage skills, the hosted MCP config, and the live status widget that makes a running Prowl call, its progress and its cost visible in the terminal. This package is the installer CLI.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"prowl",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "prowl",
|
|
4
4
|
"displayName": "Prowl",
|
|
5
5
|
"description": "Prowl market-intelligence skill backed by the hosted Prowl MCP server (448 tools), with a status widget that makes a running call, its progress and its cost visible in the terminal.",
|
|
6
|
-
"version": "0.4.
|
|
6
|
+
"version": "0.4.4",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Prowl",
|
|
9
9
|
"email": "support@prowl.chat",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "prowl",
|
|
4
4
|
"displayName": "Prowl",
|
|
5
|
-
"version": "0.4.
|
|
5
|
+
"version": "0.4.4",
|
|
6
6
|
"description": "Prowl market-intelligence skill backed by the hosted Prowl MCP server (448 tools), with a status widget that makes a running call, its progress and its cost visible in the terminal.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Prowl",
|
package/plugins/prowl/.mcp.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"command": "sh",
|
|
5
5
|
"args": [
|
|
6
6
|
"-lc",
|
|
7
|
-
"TOKEN=\"${PROWL_MCP_TOKEN:-}\"; if [ -z \"$TOKEN\" ] && [ -f \"$HOME/.prowl/prowl_mcp_token\" ]; then TOKEN=\"$(
|
|
7
|
+
"TOKEN=\"$(printf %s \"${PROWL_MCP_TOKEN:-}\" | tr -d \"[:space:]\")\"; if [ -z \"$TOKEN\" ] && [ -f \"$HOME/.prowl/prowl_mcp_token\" ]; then TOKEN=\"$(tr -d \"[:space:]\" < \"$HOME/.prowl/prowl_mcp_token\")\"; fi; if [ -z \"$TOKEN\" ] && [ -f \"$HOME/.codex/prowl_mcp_token\" ]; then TOKEN=\"$(tr -d \"[:space:]\" < \"$HOME/.codex/prowl_mcp_token\")\"; fi; if [ -z \"$TOKEN\" ]; then echo 'prowl: no API key; the MCP server will not start.' >&2; echo 'prowl: store one with: npx @prowl-ai/prowl-skill token' >&2; echo 'prowl: or set PROWL_MCP_TOKEN in the environment.' >&2; echo 'prowl: not falling back to OAuth - browser consent cannot finish inside MCP startup.' >&2; exit 78; fi; exec npx -y mcp-remote https://prowl.chat/mcp --header \"Authorization: Bearer $TOKEN\" --transport http-first --silent"
|
|
8
8
|
]
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
compatibility: Requires network access to prowl.chat and a Prowl API token; speaks MCP protocol 2025-06-18 over Streamable HTTP; the bundled MCP config runs `npx mcp-remote` (needs Node.js 18+).
|
|
6
6
|
metadata:
|
|
7
7
|
author: prowl.chat
|
|
8
|
-
version: "0.4.
|
|
8
|
+
version: "0.4.4"
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Prowl — market intelligence for your agent
|
|
@@ -28,6 +28,8 @@ Prowl API keys (`prowl_...`) are billing-bearing — every metered call debits a
|
|
|
28
28
|
- a token file at `~/.prowl/prowl_mcp_token` (`mkdir -p ~/.prowl && printf '%s' "prowl_YOUR_KEY" > ~/.prowl/prowl_mcp_token && chmod 600 ~/.prowl/prowl_mcp_token`).
|
|
29
29
|
3. The bundled `.mcp.json` reads the token automatically and connects via `mcp-remote`.
|
|
30
30
|
|
|
31
|
+
Without a key the server does not start: it names both ways to supply one and exits `78`. That is deliberate — it will not fall through to OAuth, because browser consent cannot finish inside an MCP startup. If the agent reports the `prowl` server as failed, read its stderr: the remedy is in it.
|
|
32
|
+
|
|
31
33
|
For manual per-client setup (Cursor `.cursor/mcp.json`, Claude Code `claude mcp add`, Codex `config.toml`, generic MCP), see the hosted playbook: [https://prowl.chat/mcp/install.md](https://prowl.chat/mcp/install.md).
|
|
32
34
|
|
|
33
35
|
## Core tools
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "prowl-cli",
|
|
4
4
|
"displayName": "Prowl CLI",
|
|
5
5
|
"description": "Prowl CLI skill: drive the 448-tool Prowl market-intelligence catalog from the shell with @prowl-ai/cli — no MCP server required.",
|
|
6
|
-
"version": "0.2.
|
|
6
|
+
"version": "0.2.6",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Prowl",
|
|
9
9
|
"email": "support@prowl.chat",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "prowl-cli",
|
|
4
4
|
"displayName": "Prowl CLI",
|
|
5
|
-
"version": "0.2.
|
|
5
|
+
"version": "0.2.6",
|
|
6
6
|
"description": "Prowl CLI skill: drive the 448-tool Prowl market-intelligence catalog from the shell with @prowl-ai/cli — no MCP server required.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Prowl",
|
|
@@ -5,11 +5,11 @@ license: MIT
|
|
|
5
5
|
compatibility: Requires Node.js 18+, the `@prowl-ai/cli` npm package (installed globally or run via npx) and a Prowl API key; speaks MCP protocol 2025-06-18 to prowl.chat over the network.
|
|
6
6
|
metadata:
|
|
7
7
|
author: prowl.chat
|
|
8
|
-
version: "0.2.
|
|
8
|
+
version: "0.2.6"
|
|
9
9
|
# The @prowl-ai/cli release this page describes. NOT the plugin version above:
|
|
10
10
|
# they are different things that happened to both read 0.2.x, and nothing
|
|
11
11
|
# compared them until scripts/check-cli.js did.
|
|
12
|
-
documents_cli: "0.2.
|
|
12
|
+
documents_cli: "0.2.1"
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
# Prowl CLI — market intelligence from the shell
|
|
@@ -26,8 +26,8 @@ Prowl API keys (`prowl_...`) are **billing-bearing** — treat them as secrets a
|
|
|
26
26
|
npm install -g @prowl-ai/cli
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
**This page documents CLI `0.2.
|
|
30
|
-
|
|
29
|
+
**This page documents CLI `0.2.1`**, which is what npm serves as `latest`. On `0.1.1` or
|
|
30
|
+
older only `auth`, `tools`, `call`, `analyze`, `wallet` and `version` exist and
|
|
31
31
|
everything else answers `Unknown command` — `prowl version` says which you have.
|
|
32
32
|
|
|
33
33
|
Every command, flag, exit code and default below was read out of the published
|