SQ Memory
Analysis
SQ Memory is mostly aligned with its stated memory purpose, but it deserves review because it persists sensitive agent memory and the implementation can list more memory entries than the requested scope.
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.
async list_memories(prefix) { ... const response = await this._request('GET', `/api/v2/toc?p=${encodeURIComponent(this.phext)}`); ... return lines; }The prefix argument is expanded but not used in the request or filtered locally, so the tool can return all memory coordinates in the phext instead of only those matching the requested prefix.
Add to your agent's system prompt: ... When users mention preferences, remember them. When answering questions, check memory first.
This is user-directed setup guidance, but it changes the agent’s default behavior to proactively store and consult persistent memory.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
"api_key": { "description": "SQ Cloud API key (leave empty for self-hosted)", "required": false, "secret": true }The skill can use an SQ Cloud bearer token; this is expected for hosted storage and is declared as a secret in the manifest.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
const s = encodeURIComponent(text); await this._request('GET', `/api/v2/update?p=${encodeURIComponent(this.phext)}&c=${encoded}&s=${s}`);The arbitrary memory text is placed directly into a URL query string when storing memories.
async function sendMessage(fromAgent, toAgent, message) { ... await remember(coordinate, JSON.stringify({ from: fromAgent, to: toAgent, message: message, ... })); }The examples show inter-agent messages and task coordination using shared memory with self-declared sender and recipient fields.
