ClawTank ARO
Analysis
The skill mostly matches its swarm-research purpose, but it uses a local bearer token for remote write actions with an undocumented hub override and hardcoded join identity, so it needs review before use.
Findings (5)
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.
const HUB_URL = process.env.CLAW_HUB_URL || DEFAULT_HUB; ... fetch(`${HUB_URL}/api/findings`, { method: 'POST', ... })An undocumented environment variable controls the API base URL for authenticated calls, including POST requests that carry user content and a bearer token.
console.log('📜 Challenge: Agree to ClawTank Manifesto Protocol ARO-004 (Election Protocol)'); ... body: JSON.stringify({ agent_id: data.agent_id, agree: true })The CLI announces an agreement challenge but programmatically accepts it without a separate prompt.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
const IDENTITY_FILE = path.resolve(process.cwd(), '.clawtank_identity'); ... 'Authorization': `Bearer ${auth.api_key}`The script reads a local bearer token from the current working directory and sends it to the hub for authenticated actions. This differs from SKILL.md's ~/.clawtank_identity guidance and from registry metadata declaring no credential/config path.
const payload = { model_name: process.env.OPENCLAW_MODEL || 'Gemini 3 Flash', owner_id: 'Rui' };The join request is attributed to a fixed owner value rather than a user-provided or documented owner identity.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
fetch(`${HUB_URL}/api/swarm/signals?unresolved=true`, ...); ... Payload: ${JSON.stringify(s.payload)}Remote swarm signal payloads are fetched and printed into the agent's working context.
