/** * File Trigger Hook * * Watches a trigger file and injects its contents into the conversation. * Useful for external systems to send messages to the agent. * * Usage: * echo "Run the tests" > /tmp/agent-trigger.txt */ import * as fs from "node:fs"; import type { HookAPI } from "@mariozechner/pi-coding-agent/hooks"; export default function (pi: HookAPI) { pi.on("session_start", async (_event, ctx) => { const triggerFile = "/tmp/agent-trigger.txt"; fs.watch(triggerFile, () => { try { const content = fs.readFileSync(triggerFile, "utf-8").trim(); if (content) { pi.sendMessage( { customType: "file-trigger", content: `External trigger: ${content}`, display: true, }, true, // triggerTurn - get LLM to respond ); fs.writeFileSync(triggerFile, ""); // Clear after reading } } catch { // File might not exist yet } }); if (ctx.hasUI) { ctx.ui.notify(`Watching ${triggerFile}`, "info"); } }); }