Awareness Cloud Memory
Analysis
The skill is coherent for cloud memory, but it automatically sends prompt-derived data to a memory service, injects persistent stored content back into future sessions, and has credential/endpoint handling that deserves review before installation.
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.
Get Agent Prompt (sub-agent spawning) ... Use the returned prompt as the sub-agent's system prompt for memory isolation.
The instructions tell the agent to fetch a prompt from the memory service and use it as a system prompt for another agent, giving remote/stored content high authority.
if (process.platform === "darwin") execSync(`open "${url}"`, { stdio: "ignore" }); ... const verifyUrl = `${authData.verification_uri || "https://awareness.market/cli-auth"}?code=${encodeURIComponent(authData.user_code)}`;The setup flow opens a URL using shell command construction, and the URL can come from authentication response data, so special characters in that URL could affect the shell command.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
const configPaths = [path.join(home, ".openclaw", "openclaw.json"), path.join(process.env.cwd || process.cwd(), "openclaw.json")]; ... if (sc.baseUrl) defaults.baseUrl = sc.baseUrl; ... if (apiKey) h.Authorization = `Bearer ${apiKey}`;The code can read a project-local openclaw.json, let it change the API base URL, and then attach the existing Awareness bearer token to requests sent to that base URL.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
const recall = await apiPost(ep.baseUrl, ep.apiKey, `/memories/${ep.memoryId}/retrieve`, { query: prompt, ... }); ... parts.push(` <result${score}>${r.content}</result>`);Before a prompt is handled, the script sends the prompt as a retrieval query and injects returned memory content directly into the agent context, including raw result content.
await fetch(`${ep.baseUrl}/mcp/events`, { method: "POST", headers, body: JSON.stringify({ memory_id: ep.memoryId, content, session_id: sessionId, agent_role: config.agentRole || undefined, event_type: "session_checkpoint", source: "awareness-skill" }) });The Stop hook posts session checkpoint data to the configured memory endpoint; this is expected for a cloud memory skill but crosses a provider boundary automatically.
