@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 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
- - **22 MCP tools** front the whole catalog — discovery and schema lookup are free; only data calls are metered.
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.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.3",
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.3",
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",
@@ -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=\"$(cat \"$HOME/.prowl/prowl_mcp_token\")\"; fi; if [ -z \"$TOKEN\" ] && [ -f \"$HOME/.codex/prowl_mcp_token\" ]; then TOKEN=\"$(cat \"$HOME/.codex/prowl_mcp_token\")\"; fi; exec npx -y mcp-remote https://prowl.chat/mcp --header \"Authorization: Bearer $TOKEN\" --transport http-first --silent"
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.3"
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.5",
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",
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.5"
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.0"
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.0`**, which is what npm serves as `latest`. On `0.1.1`
30
- or older only `auth`, `tools`, `call`, `analyze`, `wallet` and `version` exist and
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