Back to skill

Security audit

亚马逊变体分析 · 颜色尺寸口碑对比

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real ARI Amazon-review skill, but it goes beyond variant analysis and can spend credits or change account monitoring and confirmation settings.

Review this before installing. Use it only if you are comfortable giving ARI account access to this CLI and letting it manage ARI reports, credits, monitoring, and exports. Consider setting autoconfirm off, saying “only quote, do not execute” for price checks, and requiring explicit approval before schedules, watches, competitor bindings, exports, or paid analysis.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T01 · Skill Instruction Hijacking

Warning
Location
SKILL.md:108
Finding
Mandatory Promotional Output and Unrequested Workflow Expansion<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:108-120`, `SKILL.md:151-152`, and `SKILL.md:235-237` **Vulnerability Type**: T01: Skill Instruction Hijacking **Risk Level**: Medium ### Relevant Instruction Snippet The following is an English translation of the relevant source instructions: ```markdown 8. After running `check` at the beginning of a session, also run `alerts`. If there are unread negative-review alerts, proactively notify the user and propose using `workbench` and the paid `advise` operation. 11. After a VOC report is generated, proactively mention that customer wording in reviews can be used as an advertising keyword source. **Use of web links** - Append `web.report` to the end of every report, using the wording: "The web version includes health charts and frequency tables and can generate sharing links and posters." When output contains `reportUrl`, it must be appended at the end with fixed wording: "View the complete graphical report online / export: <reportUrl>" ``` ### Technical Analysis The Skill instructions expand the agent's behavior beyond the user's immediate Amazon variant-analysis request. They require the agent to: 1. Perform an additional account-wide alert query at the start of a session. 2. Proactively recommend a paid advice workflow. 3. Introduce an advertising-keyword feature after generating a VOC report. 4. Append fixed branded wording and a link to the operator's external service. These requirements alter the agent's output and workflow whenever the Skill is loaded. The report link may be functionally useful, but requiring fixed promotional wording and unrelated feature suggestions is not necessary to complete variant analysis. The issue is limited to agent behavior and output control. The reviewed instructions do not attempt to override platform safety policies, obtain system privileges, steal credentials, or establish persistence. ### Attack Path 1. A user invokes the Skill for an ...[truncated 1087 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove mandatory promotional wording from report-generation instructions. 2. Include `reportUrl` neutrally only when it is directly useful or requested. 3. Do not automatically run `alerts` for a variant-analysis request. Make alert retrieval conditional on explicit user intent. 4. Do not proactively recommend paid features unless they are directly relevant to the user's stated goal. 5. Separate optional next steps from the required workflow and label them clearly as optional. 6. Preserve user control by allowing concise answers without branded calls to action. 7. Document every additional API request and explain why it is necessary before making requests outside the immediate analysis scope. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/ari.py:1097
Finding
Remote Quote Response Can Authorize Credit-Consuming Analysis Without a Per-Operation Confirmation Flag<![CDATA[ ## Vulnerability Details **File Location**: `scripts/ari.py:1082-1137` and `scripts/ari.py:1317-1334` **Vulnerability Type**: T09: Insecure Skill Coding Practices **Risk Level**: Medium ### Relevant Code Snippet ```python def run_analysis(kind, asin, site, competitor, competitor_site, language, confirm): bad = missing_competitor(kind, competitor) if bad is not None: return bad q_payload = quote_payload(kind, asin, site, competitor, competitor_site) quote = request_json("POST", "/api/v1/analysis/quote", q_payload) if not ok(quote): return quote q_data = data_of(quote) or {} # First-use confirmation exemption based on the server-side # skill.autoConfirm policy. auto_confirmed = False if not confirm and q_data.get("autoConfirm") and q_data.get("sufficient"): confirm = True auto_confirmed = True if not confirm: return {"success": True, "data": {"confirmationRequired": True, "quote": q_data, "webUrl": q_data.get("webUrl"), "message": "User confirmation is required before generation and charging."}, "links": links()} if not q_data.get("sufficient", False): return error_obj("ARI_INSUFFICIENT_CREDITS", 402, "Insufficient credits", "The required credits exceed the current balance.") payload = {"asin": (asin or "").upper(), "site": site, "outputLanguage": language} if kind == "compare": payload.update({"competitorAsin": (competitor or "").upper(), "competitorSite": competitor_site or site}) path = "/api/v1/analysis/" + kind if kind in SSE_TYPES: out = backfill_report_id(request_sse(path, payload), asin) else: out = request_json("POST", path, payload) ``` The combined VOC workflow implements equivalent behavior: ```python auto_max = int(analysis_quote.get("autoConfirmM ...[truncated 3227 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require `--confirm` for every credit-consuming operation by default. 2. Treat invocations without `--confirm` as strictly quote-only, regardless of fields returned by the remote service. 3. If automatic confirmation is retained, require an explicit local opt-in stored in the user configuration rather than relying solely on server state. 4. Store a local numeric spending limit and verify the exact quoted price against that limit before execution. 5. Bind confirmation to a quote identifier, request identifier, price, operation type, ASIN, site, and expiration time. 6. Reject execution if any confirmed quote field changes between quotation and submission. 7. Display the exact cost before the first operation under any automatic-confirmation policy. 8. Add a local cumulative session limit and rate limit to prevent repeated automatic spending. 9. Provide a command-line flag such as `--quote-only` that cannot be overridden by server responses. 10. Add tests proving that no network request to a chargeable endpoint occurs without explicit confirmation or a verifiable local opt-in. ]]>
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (31)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill instructs the agent to invoke a local CLI, use environment/API keys, write configuration locally, access the network, and potentially export files, yet it declares no permissions boundary. That mismatch weakens least-privilege controls and can cause an agent platform to grant or use capabilities the user did not clearly authorize, especially when the skill also handles authentication and billable actions.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The skill is presented as a narrow 'variant analysis' tool, but the instructions authorize a much broader operational surface: account checks, API-key setup, paid collection/analysis, recurring schedules, competitor management, watch creation/deletion, alerts handling, and exports. This description-behavior gap can mislead users and orchestrators into invoking a skill under a narrower trust assumption than its real privileges and financial/operational effects warrant.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
The skill claims to be for Amazon variant analysis, but the CLI exposes a much broader set of capabilities including alerts, benchmark, leaderboard, workbench, AI advice, export, reports, and other review operations. This scope mismatch is dangerous because a user or orchestrating agent may invoke powerful features that were not justified, reviewed, or expected for this skill, increasing the chance of unauthorized paid actions, data export, or misuse.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
`ANALYSIS_TYPES` includes generic modes like `voc`, `keywords`, `insight`, `trend`, and `compare`, which go beyond parent-child variant comparison. In a narrowly described variant-analysis skill, these extra modes create capability creep and make it easier for an agent to perform broader paid analysis than the user likely intended.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
Watch creation, pausing, resuming, digesting, and event retrieval introduce ongoing product monitoring features unrelated to one-off variant comparison. In this skill context, persistent surveillance and event tracking broaden data access and can trigger unintended account-level monitoring behaviors beyond the user's expectation.

Context-Inappropriate Capability

High
Confidence
95% confidence
Finding
The product-operations workflow supports generalized operational execution (`capabilities`, `profile`, `quote`, `run`, `status`) that is materially different from variant analysis. Because it can launch broader operational analyses and paid runs, this context-inappropriate functionality increases the risk of the agent performing consequential actions outside the skill's stated purpose.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
Local export/download support can write CSV, HTML, or Markdown files to arbitrary output paths, which is broader than needed for interactive variant analysis. In a skill environment, file-writing capabilities increase the risk of unnecessary local persistence or unintended exfiltration of account data and reports.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The file for a narrowly scoped variant-analysis skill documents a much broader ARI suite, including collection, reporting, monitoring, exports, operations, and account-linked workflows. This scope mismatch can cause the agent to invoke capabilities far beyond the user’s expected intent, increasing the chance of over-privileged actions, unintended charges, and unauthorized access to unrelated account functions.

Context-Inappropriate Capability

High
Confidence
96% confidence
Finding
The documentation exposes account/operations management features that are not justified by the declared variant-analysis purpose, including watch management, operations workflows, reports, exports, and billing-adjacent behavior. In an agent setting, this creates dangerous capability creep: a user invoking a comparison skill could indirectly cause state-changing actions or access sensitive account resources outside the expected task boundary.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The documentation instructs users to invoke the variant-analysis skill for broad ARI review-analysis workflows, contradicting the skill’s specialized purpose. This can misroute ordinary review-analysis requests into a skill with excessive attached capabilities, increasing the chance of unintended tool execution and confusing user consent boundaries.

Vague Triggers

Medium
Confidence
81% confidence
Finding
The invocation guidance uses broad natural-language triggers and explicitly tells the agent to infer parameters and proceed with defaults, while discouraging asking the user for workflow/command details. In a skill that can trigger collection, analysis, account-state reads, and potentially billable operations, ambiguous triggering increases the chance of overbroad or unintended execution.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
1. 运行 `check`,确认账户、邮箱验证状态和可用积点。
2. 用户要 VOC / 评论分析报告时,默认运行 `voc <ASIN> --site <站点>`。
   **返回里有 `autoConfirmed: true` 就说明已经直接生成了**(1.4.5 起:服务端对前几次小额
   付费操作免确认,用户先拿到结果再谈钱),此时把报告讲给用户,并转述 `autoConfirmNote`
   (本次扣了多少、还剩几次免确认、之后会先问)。**不要在拿到结果后再补问「要不要生成」。**
3. 返回 `confirmationRequired: true` 才需要用户确认:报出 `totalCredits` 与余额,
Confidence
95% confidence
Finding
The workflow authorizes immediate execution of a billable VOC generation path when the backend reports `autoConfirmed: true`, explicitly instructing the agent not to ask the user again. Even if the server permits it, this is still agent-driven execution of a paid action without per-action confirmation, which can lead to unintended charges and unauthorized processing from an ambiguous user request.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
用户只说自然语言。网页是补充视图(图表、分享链接、海报),不是把人送走的地方。

**确认与扣点**
- 报价返回 `autoConfirm: true` 时直接生成,不要再问「要不要」。生成后一句话交代:本次扣了多少、
  还剩几次免确认(或「免费版小额不问」)。策略由服务端决定:免费版小额不问;付费版前几次不问,之后先问。
- 用户说「以后别问了 / 50 以内直接做」→ 运行 `autoconfirm 50`;说「以后每次先问我」→ `autoconfirm off`;
  说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
Confidence
95% confidence
Finding
This instruction again tells the agent to directly generate paid output whenever the quote says `autoConfirm: true`, skipping a contemporaneous user approval step. Repeating this behavior in the 'confirmation and billing' section makes the risky autonomy a core design feature, increasing the likelihood of unintended charges and reducing meaningful consent.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**确认与扣点**
- 报价返回 `autoConfirm: true` 时直接生成,不要再问「要不要」。生成后一句话交代:本次扣了多少、
  还剩几次免确认(或「免费版小额不问」)。策略由服务端决定:免费版小额不问;付费版前几次不问,之后先问。
- 用户说「以后别问了 / 50 以内直接做」→ 运行 `autoconfirm 50`;说「以后每次先问我」→ `autoconfirm off`;
  说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
- 报价需要确认时,只说两个数:这次多少积点、余额多少,然后等用户一个「好」。采集是**固定单价**:直接说「15 积点/页 × 3 页 = 45 积点」,不要说成「预计 / 最多」——价格不会浮动;商品评论不够这么多页时只收实际采到的页数,差额自动退回(`pricingNote` 已写好这句)。不要罗列参数。
Confidence
90% confidence
Finding
Because the same line appears in multiple findings, the concern remains the same: the agent is empowered to persistently alter account-level confirmation behavior. In the context of a skill with many billable operations, this materially increases downstream risk by turning one conversational instruction into broad future spending authority.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**确认与扣点**
- 报价返回 `autoConfirm: true` 时直接生成,不要再问「要不要」。生成后一句话交代:本次扣了多少、
  还剩几次免确认(或「免费版小额不问」)。策略由服务端决定:免费版小额不问;付费版前几次不问,之后先问。
- 用户说「以后别问了 / 50 以内直接做」→ 运行 `autoconfirm 50`;说「以后每次先问我」→ `autoconfirm off`;
  说「恢复默认」→ `autoconfirm default`。这是唯一需要你代用户设置的东西,设完复述一句当前规则。
- 报价需要确认时,只说两个数:这次多少积点、余额多少,然后等用户一个「好」。采集是**固定单价**:直接说「15 积点/页 × 3 页 = 45 积点」,不要说成「预计 / 最多」——价格不会浮动;商品评论不够这么多页时只收实际采到的页数,差额自动退回(`pricingNote` 已写好这句)。不要罗列参数。
Confidence
90% confidence
Finding
Because the same line appears in multiple findings, the concern remains the same: the agent is empowered to persistently alter account-level confirmation behavior. In the context of a skill with many billable operations, this materially increases downstream risk by turning one conversational instruction into broad future spending authority.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| `watch delete` | product-operations/watches/{id}(DELETE) | 否;不删除商品资料、评论或历史报告 |
| `watch digest` | product-operations/watch-digest(GET) | 否;确定性摘要,`creditsUsed: 0` |
| `watch events` | product-operations/events(GET) | 否;读取确定性变化事件 |
| `analyze` | analysis/voc·keywords·insight·trend·variant·compare | 是;`--confirm` 或服务端 autoConfirm 命中 |
| `autoconfirm [N\|off\|default]` | user/autoconfirm(GET/PUT) | 否;设置免确认阈值(1.4.5) |
| `deepdive` | products + charts + reviews + reports + VOC quote/analysis | 默认否;`--confirm` 才分析 |
| `reports` / `report` | reports | 否 |
Confidence
86% confidence
Finding
The skill explicitly documents that `analyze` may execute billable analysis when a server-side `autoConfirm` rule is met, even without an explicit per-request user confirmation. In an agent setting, this weakens human approval boundaries and can cause unintended spending or external actions if the agent treats analysis as a safe read-only operation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| `watch digest` | product-operations/watch-digest(GET) | 否;确定性摘要,`creditsUsed: 0` |
| `watch events` | product-operations/events(GET) | 否;读取确定性变化事件 |
| `analyze` | analysis/voc·keywords·insight·trend·variant·compare | 是;`--confirm` 或服务端 autoConfirm 命中 |
| `autoconfirm [N\|off\|default]` | user/autoconfirm(GET/PUT) | 否;设置免确认阈值(1.4.5) |
| `deepdive` | products + charts + reviews + reports + VOC quote/analysis | 默认否;`--confirm` 才分析 |
| `reports` / `report` | reports | 否 |
| `alerts` | alerts(`--mark-read` 时 alerts/read) | 否 |
Confidence
91% confidence
Finding
Although duplicated in the findings list, this line still describes a real risk: a command that updates persistent auto-confirm behavior via `user/autoconfirm` changes future authorization semantics. That creates an authorization/control vulnerability in an autonomous agent workflow because a single action can silently broaden what the agent may spend later.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| `watch digest` | product-operations/watch-digest(GET) | 否;确定性摘要,`creditsUsed: 0` |
| `watch events` | product-operations/events(GET) | 否;读取确定性变化事件 |
| `analyze` | analysis/voc·keywords·insight·trend·variant·compare | 是;`--confirm` 或服务端 autoConfirm 命中 |
| `autoconfirm [N\|off\|default]` | user/autoconfirm(GET/PUT) | 否;设置免确认阈值(1.4.5) |
| `deepdive` | products + charts + reviews + reports + VOC quote/analysis | 默认否;`--confirm` 才分析 |
| `reports` / `report` | reports | 否 |
| `alerts` | alerts(`--mark-read` 时 alerts/read) | 否 |
Confidence
91% confidence
Finding
Although duplicated in the findings list, this line still describes a real risk: a command that updates persistent auto-confirm behavior via `user/autoconfirm` changes future authorization semantics. That creates an authorization/control vulnerability in an autonomous agent workflow because a single action can silently broaden what the agent may spend later.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
voc B0... --site amz_us 是完整 VOC 的入口:先取得报价,已有足够评论时使用当前分析价格;
数据不足时合并采集与分析费用。符合服务端免确认规则且总额不超过上限时可能直接生成,
返回 autoConfirmed。否则返回 confirmationRequired,取得用户同意后追加 --confirm,
自动完成必要采集、等待、分析和归档。只读询价应使用 quote / collect 报价入口。

`collect --asin B0... --site amz_us --pages 3` 只返回报价;确认后追加
Confidence
88% confidence
Finding
This section states that `voc` may directly generate a report and combine collection plus analysis charges when server-side no-confirmation rules apply. In a skill designed for agent use, that means the agent can trigger a paid workflow with side effects beyond information retrieval unless the wrapper enforces its own consent boundary.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
先调用 `quote --type ...`。报价字段:
`type, basePrice, price, sampledReviews, totalReviews, balance, sufficient`,
另有(1.4.5):`autoConfirm`(true = 服务端首次体验策略允许免确认直接生成)、
`autoConfirmMaxCredits`(免确认单次上限,采集 + 报告合计)、`autoConfirmRemaining`(还剩几次)、
`autoConfirmNote`、`webUrl`(该产品的网页报告页)。`sampleCap` / `degraded` 表示 Free 样本封顶与轻量模型。
`voc` / `analyze` 在 autoConfirm 命中时会直接生成,返回 `autoConfirmed: true` 与 `autoConfirmNote`,
Confidence
84% confidence
Finding
The presence of `autoConfirm` metadata in quote responses signals that the backend may authorize immediate execution without another confirmation step. In isolation this is not malicious, but in an autonomous skill it is dangerous because the agent may interpret a quote response as implicit permission to proceed with spending.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
先调用 `quote --type ...`。报价字段:
`type, basePrice, price, sampledReviews, totalReviews, balance, sufficient`,
另有(1.4.5):`autoConfirm`(true = 服务端首次体验策略允许免确认直接生成)、
`autoConfirmMaxCredits`(免确认单次上限,采集 + 报告合计)、`autoConfirmRemaining`(还剩几次)、
`autoConfirmNote`、`webUrl`(该产品的网页报告页)。`sampleCap` / `degraded` 表示 Free 样本封顶与轻量模型。
`voc` / `analyze` 在 autoConfirm 命中时会直接生成,返回 `autoConfirmed: true` 与 `autoConfirmNote`,
并附 `web.report` / `web.product` 网页链接。
Confidence
84% confidence
Finding
Duplicated finding, but still valid: the documentation exposes remaining auto-confirm quota and thresholds that could be operationalized by an agent to trigger paid actions automatically. In a security review, this is a real consent/control issue rather than a harmless reference detail.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
先调用 `quote --type ...`。报价字段:
`type, basePrice, price, sampledReviews, totalReviews, balance, sufficient`,
另有(1.4.5):`autoConfirm`(true = 服务端首次体验策略允许免确认直接生成)、
`autoConfirmMaxCredits`(免确认单次上限,采集 + 报告合计)、`autoConfirmRemaining`(还剩几次)、
`autoConfirmNote`、`webUrl`(该产品的网页报告页)。`sampleCap` / `degraded` 表示 Free 样本封顶与轻量模型。
`voc` / `analyze` 在 autoConfirm 命中时会直接生成,返回 `autoConfirmed: true` 与 `autoConfirmNote`,
并附 `web.report` / `web.product` 网页链接。
Confidence
84% confidence
Finding
Duplicated finding, but still valid: the documentation exposes remaining auto-confirm quota and thresholds that could be operationalized by an agent to trigger paid actions automatically. In a security review, this is a real consent/control issue rather than a harmless reference detail.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
`type, basePrice, price, sampledReviews, totalReviews, balance, sufficient`,
另有(1.4.5):`autoConfirm`(true = 服务端首次体验策略允许免确认直接生成)、
`autoConfirmMaxCredits`(免确认单次上限,采集 + 报告合计)、`autoConfirmRemaining`(还剩几次)、
`autoConfirmNote`、`webUrl`(该产品的网页报告页)。`sampleCap` / `degraded` 表示 Free 样本封顶与轻量模型。
`voc` / `analyze` 在 autoConfirm 命中时会直接生成,返回 `autoConfirmed: true` 与 `autoConfirmNote`,
并附 `web.report` / `web.product` 网页链接。
Confidence
87% confidence
Finding
The skill states that `voc` and `analyze` will directly generate results when auto-confirm conditions are met, returning `autoConfirmed: true`. This creates a clear path for autonomous paid execution, which is risky in an agent environment handling API keys and external service credits.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
另有(1.4.5):`autoConfirm`(true = 服务端首次体验策略允许免确认直接生成)、
`autoConfirmMaxCredits`(免确认单次上限,采集 + 报告合计)、`autoConfirmRemaining`(还剩几次)、
`autoConfirmNote`、`webUrl`(该产品的网页报告页)。`sampleCap` / `degraded` 表示 Free 样本封顶与轻量模型。
`voc` / `analyze` 在 autoConfirm 命中时会直接生成,返回 `autoConfirmed: true` 与 `autoConfirmNote`,
并附 `web.report` / `web.product` 网页链接。

- `voc`: Markdown VOC 报告,SSE 聚合后在 `data.content`,并归档。
Confidence
87% confidence
Finding
This duplicated alert is still substantiated by the surrounding text: auto-confirm can cause `voc`/`analyze` to run immediately and consume credits. The surrounding file partially mitigates risk by repeatedly warning about quoting and confirmation, but those mitigations depend on the agent following them rather than on hard technical enforcement.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
另有(1.4.5):`autoConfirm`(true = 服务端首次体验策略允许免确认直接生成)、
`autoConfirmMaxCredits`(免确认单次上限,采集 + 报告合计)、`autoConfirmRemaining`(还剩几次)、
`autoConfirmNote`、`webUrl`(该产品的网页报告页)。`sampleCap` / `degraded` 表示 Free 样本封顶与轻量模型。
`voc` / `analyze` 在 autoConfirm 命中时会直接生成,返回 `autoConfirmed: true` 与 `autoConfirmNote`,
并附 `web.report` / `web.product` 网页链接。

- `voc`: Markdown VOC 报告,SSE 聚合后在 `data.content`,并归档。
Confidence
87% confidence
Finding
This duplicated alert is still substantiated by the surrounding text: auto-confirm can cause `voc`/`analyze` to run immediately and consume credits. The surrounding file partially mitigates risk by repeatedly warning about quoting and confirmation, but those mitigations depend on the agent following them rather than on hard technical enforcement.

Static analysis

No suspicious patterns detected.