Xyfcli Order Guide
Analysis
The skill mostly matches its fertilizer-ordering purpose, but it can access customer/order accounts and may expose the API token in CLI output.
Findings (4)
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
用户确认 → xyfcli order place → 展示订单地址URL
The skill is designed to invoke an order-placement command after user confirmation. This is central to the stated purpose, but it is still a high-impact business action.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
CONFIG_DIR = Path.home() / ".xyfcli"
CONFIG_FILE = CONFIG_DIR / "config.json"
...
"authorization_token": ""
...
"Authorization": f"Bearer {token}"The CLI stores a local authorization token and sends it as a Bearer token for API calls. This is purpose-aligned for an internal ordering tool, but it is sensitive account authority.
if json_output:
format_output(config, json_output)
else:
typer.echo(f" Authorization Token: {config.get('authorization_token', DEFAULT_CONFIG['authorization_token'])[:20]}...")The non-JSON path masks the token, but the JSON path prints the full loaded config, which includes the authorization token. Agents often prefer JSON output, so this can leak the token into chat or logs.
"dealerContact": dealer.get("dealerContact", ""),
"dealerTel": dealer.get("dealerTel", ""),
"dealerAddress": dealer.get("dealerAddress", ""),
"balance": dealer.get("balance", "0")The customer-list command outputs contact details, addresses, and account balances. This matches the customer-management purpose, but it is sensitive business and personal data.
