[Unit] Description=pi mail-bridge (AgentMail ↔ @earendil-works/pi-coding-agent) After=network-online.target agentmail-gateway.service Wants=network-online.target [Service] Type=simple # 桥自己不需要工作目录 —— 每条会话的 cwd 来自邮件寻址的 path 位。 # 但 systemd 要求一个存在的目录,且 pi 的 SettingsManager 会在这里找 # 项目级配置,因此指向仓库而不是 /。 WorkingDirectory=/home/program/agentmail/plugins/pi-mail-bridge ExecStart=/usr/bin/node /home/program/agentmail/plugins/pi-mail-bridge/src/index.mjs # pi 靠 HOME 定位 ~/.pi/agent(settings.json、auth.json、models.json、sessions/)。 # systemd 不会自动注入 HOME,不显式给就: # - 读不到 provider 凭证 → 每封邮件都"没有可用模型" # - 会话落到 /.pi 或直接失败 → C-8 的会话快照永远是空的 Environment=HOME=/root # pi 的全局扩展 pi-a2a / pi-acp 绑死 127.0.0.1:12010 / 12011。 # 桥用 noExtensions:true 起会话,本进程不会去 bind 那两个端口; # 这两个变量是给「同机还跑着 pi CLI」的情况留的隔离位, # 万一将来放开扩展加载,端口也不会和交互式 pi 撞。 Environment=PI_A2A_PORT=13010 Environment=PI_ACP_PORT=13011 EnvironmentFile=/etc/agentmail/pi.env Restart=always RestartSec=10 # 桥是长驻守护进程,启动即注册 + 立刻打一次心跳 + 订阅 SSE(B-1), # 不像 opencode 那样惰加载,因此不需要 ExecStartPost 预热。 [Install] WantedBy=multi-user.target