···8181- \`read_file\`: read a file efficiently without shell+cat
8282- \`edit_file\`: edit a file by replacing exact text
8383- \`memory_search\`: search your indexed long-term memories from core notes, journal entries, and people files
8484+- \`memory_alias\`: link a Discord/Bluesky handle to a canonical person name (e.g. \`@meowskullz\` → \`ana\`). Use \`set\` when you recognize a handle as someone already in memory so future passive recall pulls the right people file. Use \`list\` to see existing aliases, \`remove\` to undo.
8485- \`image_tool\`: attach an image from \`${imageRoot}\` for next-turn vision input
8586- \`wait_then_continue\`: wait for a short delay or until the next event arrives, then continue to another turn. accepts \`timeout_ms\` (default 10000, max 600000). use this after a timeout or recoverable error when you still want to keep working — an incoming event (like a DM) will wake you early.
8687- \`rest\`: go to sleep and end the session. use this when you're truly done \
···238238 {
239239 type: "function",
240240 function: {
241241+ name: "memory_alias",
242242+ description:
243243+ "Manage handle aliases used for memory recall. When you see someone using a Discord/Bluesky handle that you recognize as an existing person in memory, set an alias so future messages from that handle pull the right people/core memories. Example: set @meowskullz = ana so DMs from meowskullz recall ana's people file.",
244244+ parameters: {
245245+ type: "object",
246246+ properties: {
247247+ action: {
248248+ type: "string",
249249+ enum: ["set", "remove", "list"],
250250+ description: "set links a handle to a canonical name; remove unlinks; list returns all current aliases.",
251251+ },
252252+ handle: {
253253+ type: "string",
254254+ description: "The handle to alias, e.g. \"meowskullz\" or \"@meowskullz\". Required for set/remove.",
255255+ },
256256+ canonical: {
257257+ type: "string",
258258+ description: "The canonical name the handle maps to, e.g. \"ana\". Required for set; optional for remove (omit to clear all aliases for the handle).",
259259+ },
260260+ },
261261+ required: ["action"],
262262+ },
263263+ },
264264+ },
265265+ {
266266+ type: "function",
267267+ function: {
241268 name: "image_tool",
242269 description:
243270 `Attach an image from ${IMAGE_ROOT_HINT} so it is injected as a multimodal user message on the next model turn. Use this after creating/downloading an image with shell.`,