summaryrefslogtreecommitdiff
path: root/config/pi
AgeCommit message (Collapse)Author
10 hourspi compact-tools: let the forum tool draw its own rowsHEADmasterIgor Soarez
Compacted, a forum send showed only its name; its own renderer shows the message, folded to 10 lines.
10 hourspi forum: give a fresh session its notice with the first runIgor Soarez
Appended to a session with no conversation yet -- a new pi, or just after /new -- the join notice sat ahead of the system message pi records at the first run, and pi then sent that message without its content: the provider refused every request with a 400. Queue it for the next turn instead, which pi places after the system message.
10 hourspi forum: fold long messages in the transcript, whole on expandIgor Soarez
A message of up to 4000 characters printed in full in both panes; show its first 10 lines, or 1000 characters, and how much more there is, as pi does for tool output. The model still gets the whole text.
2 dayspi forum: let agents the user puts in a forum find and message each otherIgor Soarez
/forum <name> puts this pi in a forum; its members can list each other, post to it (waking only those mentioned), read its history, set its pin, and send each other direct messages, delivered the way alarm.ts delivers alarms. Only the user adds an agent; any pane can remove one. Forums and their posts live in ~/.pi/forum until /forum delete; membership lasts as long as the pi process.
7 dayspi alarm: keep pending alarms across /reloadIgor Soarez
/reload dropped every pending alarm and stopped its when_done command, without a word. An agent that had ended its turn to wait for one was never woken -- nor a pi-goal goal_wait counting on it. The old copy of the extension now leaves what is pending on globalThis instead: each alarm as plain data, the due queue, the next id, and a when_done command's ChildProcess with its own listeners removed. The copy pi loads next arms fresh timers from each alarm's absolute time, listens on the command again (one that exited meanwhile still holds its status), and resumes polling PIDs. Nothing crosses that would reach the old, stale pi or ctx. A handoff from another session or another HANDOFF_VERSION is refused and its commands stopped, with a notice. If nothing takes it within 30s -- the file failed to load, or was removed -- the old copy stops its commands. Quitting, /new, /resume and /fork still drop everything.
11 dayspi alarm: fire when a command exits or when processes exitIgor Soarez
when_done runs a command (bash -c, in pi's cwd, output to a log file) and fires when it exits, with its exit status; cancelling the alarm or ending the session stops it. when_exits polls PIDs already running and fires once all are gone. Either takes an optional deadline, 24 hours by default, at which the alarm fires anyway and a still-running command is stopped. A process exiting is a signal any condition can be turned into -- gh run watch, sz-wait-for, an until-curl loop -- so the agent can start something long, end its turn and be woken, instead of blocking on it. The delivery path is the existing one, unchanged. pi-subagent: ยง5 sets an alarm on the runs' PIDs instead of waiting.
13 dayspi: track pirc-extension default branch instead of pinning v0.1.1Igor Soarez
2026-10-23pi alarm: steer a due alarm into a running taskIgor Soarez
An alarm that fell due mid-task used to wait in the extension until the run settled. Now it is steered in: pi adds it after the tool calls in progress finish, before the next model call, and the model weighs it against the task. The alarm text tells it to say which it chose. pi's Esc empties its queue and drops queued extension messages without a word, so an alarm stays listed until message_end shows it in the conversation. One not seen by the end of a stopped run is held and sent again after the next run completes; resending into that run could deliver it twice, since pi takes one queued steer per turn and other aborts leave the original queued.
2026-10-22pi: alarm extension, timed notes the agent sets for itselfIgor Soarez
An `alarm` tool sets, lists and cancels alarms: after a delay, at a wall-clock time, or repeating (at most 12 fires, the last within 24 hours). A fired alarm is a pi.sendMessage custom message, customType "alarm", rendered as set by the agent rather than typed by the user, and wrapped in fixed text the agent cannot drop: it is the agent's own earlier note, not the user's, and grants no permission -- outward actions still need the user's approval. /alarms lists and cancels. An alarm due while pi is busy waits for the task to finish, held here rather than in pi's queue, which drops a custom message on Esc. A run that ended stopped -- Esc, an error, or the abort before /compact, /new, /resume and /fork -- holds due alarms until a later run completes. Timers die with the session; the tool is withdrawn outside the TUI. Reviewed by Fable and GLM 5.3 Flash. Fixed from the review: unbounded every_minutes overflowed setTimeout into 1 ms fires; a due alarm ran right after Esc, or unseen on a session being replaced; stale repeat fires piled up; the session_compact delivery never ran; impossible dates and times skipped by a clock change were accepted; the note could forge the wrapper's delimiters. Declines dot request 20261021-220352-work-laptop-c46033 (sz-agent-alarm, a skill typing into the agent's tmux pane) in favour of this: a custom message is recorded and shown as the agent's, needs no screen-scraping, and loads only in pi.
2026-10-05pi: the session name in herdr's Agent sidebarIgor Soarez
herdr labels every pi pane "pi", so with several open the rows cannot be told apart. herdr 0.9.3's socket API has pane.report_metadata, whose display_agent replaces that label without touching lifecycle state; this reports the session name there on start and on every rename, auto-named titles included. Interactive sessions only: a pi -p or subagent run from inside a pane inherits its HERDR_* variables and would otherwise rename the pane after itself. Checked against a fake herdr socket: a print-mode run sends nothing, while the socket accepted a control message. Outside herdr it returns at once. The pi APIs it uses -- ctx.mode "tui", getSessionName, session_info_changed's name -- are as in pi 1.0.0, and link/pi.sh links it in like any tracked extension. From change request e053eb.
2026-10-05pi: compact tool output, pinned, 3-line previews for every toolIgor Soarez
pi-compact-tools draws each tool call as a short, expandable row; Ctrl+O shows the whole result. Every built-in and every custom tool, MCP ones included, is compacted and starts as a 3-line preview -- previewLines only applies to rows that do not start hidden, so nothing does. Pinned to the v0.14.0 commit, byte-identical to the npm tarball: the package had 32 releases in its first three weeks, and unpinned that would be new code across the fleet nearly every day. The config is linked rather than generated so it is the same everywhere, and /compact-tools saves through the link by design. AGENTS.md now says which linked files their tools rewrite, and that such a change is not an agent's to commit or revert. From change request 4d685a.
2026-10-03pi: auto-named sessions, pinned to a commitIgor Soarez
pi --resume listed each session by its raw first message, often blank or a system-reminder blob. pi-auto-session-name has the active model write a short title instead, through pi's own model call, and never overwrites a name set by hand. Pinned to the repo's commit rather than the npm version: the package is days old with one maintainer and runs inside every pi on every machine, so an update should arrive only when chosen. npm refuses to reuse a version number, but a commit hash does not depend on npm's policy at all. The commit's extension is byte-identical to the published 1.0.0 tarball, and needs no build. From change request 161e51.
2026-10-02pi: drop pi-mcp-adapter, MCP is native nowIgor Soarez
pi 1.0.0 has MCP built in, and while the adapter is installed it suppresses that and prints a warning at every start. The browser gates that answered the adapter's approval event now hook pi's own tool_call as well. From change request 562974.
2026-09-28pi: the siliconflow key is a reference, not a nameIgor Soarez
models.json gave the provider an apiKey of "SILICONFLOW_API_KEY", which pi sends verbatim as the credential: it interpolates "$NAME" and "${NAME}", runs "!command", and treats anything else as a literal. So that provider has been authenticating with the 19-character string "SILICONFLOW_API_KEY" and getting a 401 for as long as it has existed. Confirmed by calling pi's own resolver: "SILICONFLOW_API_KEY" resolves to itself, "$SILICONFLOW_API_KEY" to the value. Nothing catches this -- isConfigValueConfigured returns true for both and reports no missing variables, so `pi auth check` says ready either way, and only a real request fails. Hence the note in CLAUDE.md beside the models.d row: the rule is invisible in the file, and the next provider added would repeat it. Reported as a change request from the machine that hit it; the sweep for other instances found none.
2026-09-17dotfilesIgor Soarez
Shell, editor and terminal configuration, the tools that go with them, and szecret, an age-based secret manager whose store lives elsewhere. History restarts here. What came before was not written to be read by anyone else, and carried machine names, addresses and an encrypted secret store; it is kept privately instead. What is left is meant to be safe on any machine, including one whose owner is not me: see CLAUDE.md for the rule it is written to.