Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

docs: refresh extension catalog and changelog

bbac0167128f25eeee231f9a4029006d15a0c94b

Oliver Jan Krylow <oliver@bugabinga.net> · 2026-09-14 09:32 UTC

unverifiable SSH 1 parent

Changed files (2)

CHANGELOG.md

ready
@@ -2,7 +2,42 @@
# Changelog
## Unreleased
+- Let IQ counter judging fall back to the next pool member when the assigned counter rejects a request (rate limits), rotating deterministically, since a lost agreement pair never returns once the session is scored; report exhausted pools separately as "counter pairs lost" instead of counting already-scored sessions as failed, and keep primary-judge failures failing so unscored sessions retry on the next scan
+- Replace `/iq export` and its `iq.exportDir`/`iq.exportName` settings with `iq.stateDir`: one shared, synced directory for records, telemetry, and checks; the first use with an empty shared directory copies local state in once, records carry a `host` field for provenance, the leaderboard merges all hosts, and the scan lock moves to the OS temp directory so synced folders never carry lock files; unreadable IQ settings fall back to the local state directory with a warning instead of blocking commands
+- Add `telemetry` and `checks` tabs to the IQ dashboard, bringing it to five tabs: telemetry shows measured per-model behavior (turns, tool calls, edit share, output volume, cache share, latency, speed) and checks shows each model's latest check result with task states, acceptance, estimate, and check-versus-history deltas
+- Add PFUI benchmark and CPU-profile tasks, with benchstat managed by Mise
+- Add `/iq check <provider/model>` for check-suite scoring: three frozen fixture tasks (fix-and-document, refactor-with-correction, feature-with-trap) with content hashes are materialized as git workspaces and solved by child Pi sessions; step and final-state judging reuse the IQ judge machinery with repair and retries, acceptance results are executed for real, and runs are stored separately under `checks/`; until a reference check exists on a rated model, results show raw 1-5 ratings only, then add leave-one-out calibration against real scores
+- Let IQ check acceptance use tamper-proof Node verifier scripts (`checks/*.mjs`) stored in the fixture directory outside the workspace, running with the candidate workspace as cwd, so candidates cannot tamper with their own grading; the fixture hash covers the whole fixture directory including verifier scripts, and fixtures referencing missing scripts are rejected at load
+- Fix IQ check failure handling: a failed final evaluation now persists an incomplete record with all judged evidence, unreadable sessions are reported as unreadable instead of blaming the candidate for no work, cancellation before delivery stops without recording undelivered instructions as work, and nonzero-exit details keep the head of stderr so error headers are not truncated
+- Fix IQ check step resume: pass the session file path to `--session` instead of the filename stem, since Pi matches by id or path and session files are named `<timestamp>_<uuid>.jsonl`
+- Add an IQ dashboard `c` shortcut and tab completion for `check` model refs from the live registry
+- Exclude IQ check fixtures from Biome via folder ignores that work from both repo and extension working directories
+- Add PFUI with a fallback system identity, installed Pi context variables, and an on-demand skill for consulting Pi documentation; report each distinct warning once and retain valid skills with warning-only diagnostics
+- Serve `/system board` pages from a live snapshot that re-renders whenever `.system` changes, so refreshes show persisted state and open boards follow disk edits; board changes patch the page in place while document changes reload it and restore open disclosures
+- Toggle plan `status` between `draft` and `approved` and spec board state directly from the rendered metadata box
+- Fix `/system board` controls failing when clicked during page load by making the board and ledger scripts self-contained instead of depending on load order
+- Let `iq.counterJudgeModel` take a list of judges that rotate per session, assigned deterministically from session content, so cost stays flat while calibration broadens; the confirm dialog lists the rotating counters and the IQ method view reports agreement and per-model bias for each counter separately
+- Add `iq.counterSampleRate` (0-1) to counter-judge that share of every normal IQ scan, sampled deterministically from session content so the same sessions are picked on every host and rerun; the confirm dialog shows the counter judge, sampled session count, and combined cost estimate, progress marks counter passes, and the summary reports counter-judged sessions
+- Show per-model judge bias in the IQ method view, making a judge's favouritism toward its own model family visible
+- Add the `ask` extension with an `ask_user_question` tool for 1-4 structured multiple-choice questions: option lists with a recommended option, multi-select support, optional stable answer IDs, free-form `Other…` input, TUI overlays with Tab notes and Esc cancel-all, Pi dialogs in RPC mode, and immediate `unavailable` results in print/JSON modes
+- Wrap Ask questions, options, answers, and notes to the available width; fullscreen TUI mode also supports mouse selection, toggling, wheel navigation, and text cursor positioning
+- Fix concurrent web tool calls crashing on first use by sharing one lazy import promise per implementation module, so parallel calls never receive a partially loaded module
+- Memoize per-call dynamic implementation imports in Angel consultations, git-safe clones, and Strata command/GitHub review paths so concurrent calls share one module evaluation instead of racing Pi's module-cache-free jiti loader
+- Extend the shared lazy-import memo to The System (centralized loaders for system, renderer, board server, startup notice, bundle slot, and command modules), IQ, and usage command paths so all concurrent entry points share one module evaluation
+- Let `/system exec` apply verified board states directly through `system_board_update` with `source: agent` and an evidence note, keeping `/system assess` proposal-only; invalid batches are rejected whole and humans can override any entry
+- Show board entry notes in `/system board` and inject a board state block with counts and unfinished items into every `/system` lifecycle prompt
+- Add a `/klaus-setup-token` command that mints a long-lived Claude OAuth token natively inside Pi through the Claude Code PKCE sign-in flow, without spawning the Claude binary: it opens the sign-in page in the browser, rejects state mismatches, accepts `code#state`, a redirect URL, a query string, or a bare code, copies the token to the clipboard with platform fallbacks, and shows the token when no clipboard tool exists; RPC mode uses a plain input dialog without opening a browser, and there is no `--klaus-setup-token` CLI flag
+- Run the whole `/klaus-setup-token` TUI flow in one animated Bureau of Tokens counter: a block-art snail clerk and clerical form type themselves in above a sign-in link (`c` copies it) and code field that are live from the first frame, a status row spins through sign-in and exchange, and the outcome stamps `APPROVED` with the token's validity date or `DENIED` with the failure reason in place; `r` retries a denial with a fresh sign-in, the first key skips a running stamp, the next closes, Esc cancels at any point, and the counter sizes itself to the terminal in full, compact, and tiny width tiers with wrapping instead of truncation
+- Repair sloppy IQ judge output instead of discarding whole chunks: keep only cited in-chunk evidence, clamp ratings, default missing fields, count repairs alongside retries, and report why sessions failed to score
+- Treat System plans as the required outcome rather than an implementation order: re-sequence layered plans into vertical slices, implement them fully, and stop treating slice boundaries as human approval points
+- Make visual models the System Markdown default, require at least one diagram, mockup, or state model in specs, require structure or sequence diagrams and visual dependencies in plans, and use sequence diagrams for cross-component issue reproduction
+- Decompose System plans by observable behavior instead of architectural layer, naming touched modules without a layer-by-layer build order
+- Show Anthropic subscription quota while a klaus model is active by mapping klaus to Pi's Anthropic OAuth token
+- Display klaus usage as `anthropic (klaus)` in the usage dashboard
+- Honor Pi `maxTokens` in Klaus through the child runtime's `CLAUDE_CODE_MAX_OUTPUT_TOKENS` environment variable: validate it as a positive safe integer, set it only when Pi supplies it, never inherit it from the host environment, and treat a cap change across a tool-boundary continuation as an incompatibility that replays canonically
+- Keep Klaus adaptive-thinking models (Fable, Opus, Sonnet) always adaptive with an effort level, never pinning them into fixed-budget thinking from a Pi thinking budget; apply budgets only to budget-based models such as Haiku
+- Align Klaus Haiku fallback thinking budgets with Pi's defaults (1024/2048/8192/16384) so unset Pi budgets behave like native Pi usage
- Redesign Angel with persistent investigative child sessions, inherited tools, bounded on-demand access to pinned parent context, automatic failure analysis, cancellable live progress, and stale-session delivery protection
- Shorten model labels consistently in model status displays, including family-specific speed and release qualifiers
- Remove the cmprss, Leaks, and Verboten extensions and the dedicated Leaks fuzz task
@@ -29,7 +64,7 @@
- Add optional Strata GitHub PR reviews with confirmed checkout switching, attributed read-only discussions, and PR-aware feedback; keep saved plans and drafts separate across PRs and forge hosts
- Add Strata Vim-style line, hunk, layer, and pane navigation, literal diff search, keyboard review actions, whole-layer review toggles, and contextual shortcut guides
- Keep Strata draft saves from overwriting newer edits, preserve focus when toggling review status, confirm submission and close, and keep unavailable workspaces read-only
-- Add Strata for browser-based Git review with model-organized layers, layer questions, line comments, resumable drafts, stale-snapshot checks, and feedback sent back to Pi
+- Add Strata for browser-based Git review with model-organized layers, layer questions, resumable drafts, stale-snapshot-checks, and feedback sent back to Pi
- Add independently collapsible Strata side panels and keyboard-accessible Details, Ask, and Feedback tabs; keep selected tabs readable on hover
- Keep Strata's layer and All changes conversations and drafts separate, preserve hunk focus, and restore question input focus after answers when appropriate
- Let Strata Ask inspect installed packages and external docs with bounded read, literal grep, and ls tools, enforce protected-path checks, and label live evidence separately from the review snapshot
@@ -80,13 +115,11 @@
- Keep Pi authoritative for Klaus tool execution, including permissions, UI, events, and transcripts; forward only model-facing text, images, and error status from tool results, and support tools added or removed by extensions during active turns
- Preserve Pi tool schema validation in Klaus; reject required JSON-schema constrained sampling and fall back for preferred or unsupported grammar constraints
- Preserve Pi provider hooks in Klaus through transformable logical requests and virtual `x-klaus-*` response metadata that never reaches Anthropic
-- Treat Klaus request timeouts as sliding Claude-activity timeouts, paused while Pi tools run; ignore unsupported output-token limits
+- Treat Klaus request timeouts as sliding Claude-activity timeouts, paused while Pi tools run
- Make Klaus discover available Claude models with Pi's OAuth and never auto-probe undiscovered models that could consume usage credits
- Advertise one current Klaus model per Claude family and map each explicit Pi model ID to Fable, Opus, Sonnet, or Haiku without silently upgrading it
- Target Fable 5.1 with verified routing and API-equivalent pricing; let it proceed when absent from authenticated discovery, with a usage-credit warning shown once per Pi session
-- Support Pi thinking in Klaus, mapping `minimal` to `low`, preserving supported levels, disabling it for `off`, and warning when unsupported levels are reduced
-- Preserve Pi steering and follow-up order across Klaus provider turns and pending-tool boundaries
-- Fix Klaus parallel tool continuations, sessionless tool-call failures, and aborted requests
+- Support Pi thinking in Klaus, mapping `minimal` to `low`, preserving supported levels, silently clamping unsupported levels down, and disabling it for `off`
- Prevent Klaus from replaying full context after generic resume failures; retry only when the SDK explicitly rejects the resume point
- Fix Klaus cached resumes with branch-bounded history validation, safe corrupt-cache recovery, reapplied payload transformations on cold replay, and reliable checkpoint publication
- Fix Klaus lifecycle cleanup so concurrent completion and session teardown await one Agent SDK shutdown
@@ -107,7 +140,7 @@
- Fix Continuity so it resumes user intent only when actionable work remains and stops instead of rerunning completed checks, retrying known blockers, or inventing follow-up work
- Fix The System README bundle path docs to show plural directories
- Make `/system init` deterministic with confirmation; it creates schema 0 config, board state, plural bundle directories, and core files directly
-- Add an optional project title to The System config; `/system init` writes it from the project directory name and rendered books use it
+- Add an optional project title to The System config; `/system init` writes it from the project directory name and rendered books make it
- Require one-shot human approval before mutating existing System core documents or spec and phase files, and reject oversized core documents before approval
- Seed `/system init` core files with concise SYSTEM, MISSION, and RULES role guidance while preserving existing core content on rerun
- Fix `/system init` so rerunning in an initialized project reuses the existing prefix instead of asking again

README.md

ready
@@ -1,7 +1,6 @@
# pi-ext
-Personal Pi extension pack: tools, footers, shell bridges, workflow hacks, small
-demons.
+Personal Pi extension pack: tools, telemetry, shell bridges, workflow hacks, small demons.
## Install
@@ -35,7 +34,7 @@
### Filtering
-Load only one extension via `~/.pi/agent/settings.json`:
+Load one extension via `~/.pi/agent/settings.json`:
```json
{
@@ -53,66 +52,77 @@
Filter rules:
-- `extensions`: load only matching extension entrypoints.
-- `skills`: load only matching exported skills; `[]` loads none.
-- `prompts`: load only matching prompt templates; `[]` loads none.
-- `themes`: load only matching themes; `[]` loads none.
-- Omit a key to load all resources of that type exported by the package
- manifest.
-- Values are package-root paths/globs.
+- `extensions` selects package extension entrypoints.
+- `skills` independently selects extension-owned skills; `[]` loads none.
+- `prompts` and `themes` work the same way; `[]` loads none.
+- Omit a key to load every resource of that type exported by the package.
+- Values are package-root paths or globs.
- `!pattern` excludes.
-- `+path` and `-path` force exact include/exclude.
-- Filters narrow the root manifest. They do not resurrect junk outside it.
+- `+path` and `-path` force exact inclusion or exclusion.
+- Filters only narrow package exports. They do not resurrect unexported junk.
## Extensions
-| Extension slug | Short explanation | README |
-| ---------------- | ----------------------------------------------------------------------- | --------------------------------------------- |
-| `angel` | Structured advisor and command guardrail for configured Pi model pairs. | [README](extensions/angel/README.md) |
-| `context-size` | Context-window usage telemetry for Pi. | [README](extensions/context-size/README.md) |
-| `continuity` | Continue Pi tasks after context compaction. | [README](extensions/continuity/README.md) |
-| `cost` | Token and spend telemetry for Pi. | [README](extensions/cost/README.md) |
-| `fast` | OpenAI Codex priority service tier for Pi. | [README](extensions/fast/README.md) |
-| `footer` | Shared stable footer renderer for Pi. | [README](extensions/footer/README.md) |
-| `git-safe` | Hardened git clone tool for Pi. | [README](extensions/git-safe/README.md) |
-| `intellij` | Connect Pi to IntelliJ MCP on demand. | [README](extensions/intellij/README.md) |
-| `iq` | Personal model work-ability scoring from real Pi sessions. | [README](extensions/iq/README.md) |
-| `masks` | Named model and thinking combinations for Pi. | [README](extensions/masks/README.md) |
-| `model-info` | Model and thinking telemetry for Pi. | [README](extensions/model-info/README.md) |
-| `neko` | Tiny animated editor cat for Pi. Pointless. Correct. | [README](extensions/neko/README.md) |
-| `notes` | Session-backed pending prompt notes for Pi. | [README](extensions/notes/README.md) |
-| `nu-bang` | Nushell bang-command bridge for Pi. | [README](extensions/nu-bang/README.md) |
-| `open` | Open mentioned files in Neovim beside Pi. | [README](extensions/open/README.md) |
-| `prompt-autopsy` | System-prompt autopsy command for Pi. | [README](extensions/prompt-autopsy/README.md) |
-| `pulse` | Living documentation sync for Pi. | [README](extensions/pulse/README.md) |
-| `quota` | Subscription quota dashboard for Pi providers. | [README](extensions/quota/README.md) |
-| `runtime` | Runtime detection telemetry for Pi footer/status. | [README](extensions/runtime/README.md) |
-| `rtk` | RTK bash command rewrite hook for Pi. | [README](extensions/rtk/README.md) |
-| `session-rename` | Automatic short session names for Pi. | [README](extensions/session-rename/README.md) |
-| `the-system` | Project governance through one `/system` command. | [README](extensions/the-system/README.md) |
-| `os-notifier` | Native-first OS notifications for interactive Pi completion. | [README](extensions/os-notifier/README.md) |
-| `tldr` | Live TLDR widget above Pi editor. | [README](extensions/tldr/README.md) |
-| `tps` | Tokens-per-second footer segment for Pi. | [README](extensions/tps/README.md) |
-| `tune` | Autonomous experiment loops for tuning code with benchmarks. | [README](extensions/tune/README.md) |
-| `usage` | Local usage statistics dashboard for Pi. | [README](extensions/usage/README.md) |
-| `uv` | Route Python package tooling through `uv`. | [README](extensions/uv/README.md) |
-| `vcs-status` | Pi workspace VCS telemetry for Git and Jujutsu. | [README](extensions/vcs-status/README.md) |
-| `web` | Web fetch, search, site-map, and image-analysis tools for Pi. | [README](extensions/web/README.md) |
+| Extension slug | Short explanation | README |
+| --- | --- | --- |
+| `angel` | Tool-using investigative advisor backed by a configured model. | [README](extensions/angel/README.md) |
+| `ask` | Structured single- and multiple-choice questions for humans. | [README](extensions/ask/README.md) |
+| `btw` | Side-chat overlay for tangents outside the main conversation. | [README](extensions/btw/README.md) |
+| `context-size` | Context-window usage telemetry. | [README](extensions/context-size/README.md) |
+| `continuity` | Continues unfinished work after context compaction. | [README](extensions/continuity/README.md) |
+| `cost` | Token and spend telemetry. | [README](extensions/cost/README.md) |
+| `decay` | Recency-weighted structured context compaction. | [README](extensions/decay/README.md) |
+| `fast` | OpenAI Codex priority service tier. | [README](extensions/fast/README.md) |
+| `footer` | Shared stable footer renderer. | [README](extensions/footer/README.md) |
+| `git-safe` | Hardened Git operations and clone tooling. | [README](extensions/git-safe/README.md) |
+| `good-job` | Turns praise into durable, evidence-backed learnings. | [README](extensions/good-job/README.md) |
+| `intellij` | Connects to IntelliJ's MCP server on demand. | [README](extensions/intellij/README.md) |
+| `iq` | Scores model work ability from real Pi sessions. | [README](extensions/iq/README.md) |
+| `klaus` | Runs Claude models through the Claude Agent SDK. | [README](extensions/klaus/README.md) |
+| `masks` | Switches model and thinking level together. | [README](extensions/masks/README.md) |
+| `model-info` | Executor, transport, and advisor telemetry. | [README](extensions/model-info/README.md) |
+| `mockup` | Browser-based review of generated HTML mockups. | [README](extensions/mockup/README.md) |
+| `neko` | Tiny animated editor cat. Pointless. Correct. | [README](extensions/neko/README.md) |
+| `notes` | Session-backed pending prompt notes. | [README](extensions/notes/README.md) |
+| `nu-bang` | Routes bang commands through Nushell. | [README](extensions/nu-bang/README.md) |
+| `open` | Opens mentioned files in an editor beside Pi. | [README](extensions/open/README.md) |
+| `os-notifier` | Native notifications when interactive work completes or blocks. | [README](extensions/os-notifier/README.md) |
+| `pfui` | Pain-Free User Interface fallback identity and Pi context discovery. | [README](extensions/pfui/README.md) |
+| `prompt-autopsy` | Writes and groups Pi's generated system prompt for inspection. | [README](extensions/prompt-autopsy/README.md) |
+| `pulse` | Keeps configured documentation synchronized with workspace changes. | [README](extensions/pulse/README.md) |
+| `quota` | Subscription quota dashboard for supported providers. | [README](extensions/quota/README.md) |
+| `rtk` | Rewrites eligible Bash tool calls through RTK. | [README](extensions/rtk/README.md) |
+| `runtime` | Runtime detection telemetry for footer and status. | [README](extensions/runtime/README.md) |
+| `session-rename` | Generates short session names from branch activity. | [README](extensions/session-rename/README.md) |
+| `strata` | Browser review of Git changes organized into cohorts and layers. | [README](extensions/strata/README.md) |
+| `the-system` | Project governance through one `/system` command. | [README](extensions/the-system/README.md) |
+| `tldr` | Live activity summary above the editor. | [README](extensions/tldr/README.md) |
+| `tps` | Tokens-per-second footer telemetry. | [README](extensions/tps/README.md) |
+| `tune` | Autonomous benchmark-driven code experiment loops. | [README](extensions/tune/README.md) |
+| `ultra` | Declarative multi-agent workflow orchestration. | [README](extensions/ultra/README.md) |
+| `usage` | Local usage statistics dashboard. | [README](extensions/usage/README.md) |
+| `uv` | Routes Python package tooling through `uv`. | [README](extensions/uv/README.md) |
+| `vcs-status` | Git and Jujutsu workspace telemetry. | [README](extensions/vcs-status/README.md) |
+| `web` | Web fetch, search, and site-map discovery. | [README](extensions/web/README.md) |
## Resources
-The root package exports extension entrypoints only.
+The root package exports extension entrypoints and extension-owned skills only.
Personal skills, prompts, and themes live in global Pi config.
+PFUI means Pain-Free User Interface and must remain the first explicit root manifest extension entry, before the extension glob.
```json
{
- "extensions": ["extensions/*/index.ts"]
+ "extensions": [
+ "extensions/pfui/index.ts",
+ "extensions/*/index.ts"
+ ]
}
```
## Development
-Clone locally, install dependencies, then point Pi at the path:
+Clone locally, install dependencies, then point Pi at the checkout:
```bash
git clone https://github.com/bugabinga/pi-ext.git
@@ -121,7 +131,7 @@
pi install /home/me/Workspace/pi-ext
```
-Or add to `~/.pi/agent/settings.json`:
+Or add the checkout to `~/.pi/agent/settings.json`:
```json
{
@@ -133,23 +143,22 @@
}
```
-Useful checks:
+Checks:
```bash
-npm run typecheck
-npm test
npm run lint
-npm run check
+npm test
+npm run typecheck
```
-`npm run typecheck` runs:
+Formatting:
```bash
-tsc --noEmit
+npm run fmt
```
Git installs run `npm install --omit=dev`.
-For local development, run `npm install` inside the repo first.
+For local development, run `npm install` inside the repository first.
## Release model
@@ -168,6 +177,6 @@
---
-Fat prompts rot in bins.\
-Pi cats claw workflow gods.\
-Small tools drink the dark.
+Tiny demons purr.\
+Pi feeds them your bloated prompts.\
+They eat the light whole.