piagent_
← /news
Sep 19, 2026community

pi adds experimental prompt cache warming and fixes skill ranking and CJK boundaries in autocomplete

Three pull requests merged in pi on September 19, 2026 — an experimental feature and two autocomplete fixes — and that evening’s v0.86.0 carried all three. #9668 comes from mitsuhiko, Earendil’s co-founder: it keeps a provider’s prompt cache alive across pauses. External contributors yearth and haoqixu authored the skill-ranking and CJK-boundary fixes.

#9668 addresses what a pause costs: providers drop a prompt cache entry after inactivity, so the next request pays full input price. Warming re-sends the last request with a one-token output budget, scheduled at 90 percent of cache lifetime with at least ten seconds to spare, and only when avoided miss cost minus refresh cost leaves at least $0.05 of expected savings. A refresh bills as a cache read of the full context plus one output token, never enters model context; /session reports the next decision.

Scope is deliberately narrow: warming needs a known cache lifetime for the model and retention tier, and the built-in catalog annotates only direct Anthropic — ephemeral entries live five minutes, extendable to an hour — so custom models and other providers can declare promptCache lifetimes in models.json. OpenAI models are deliberately unannotated because a documented TTL alone does not establish full cache loss, and budget-based-thinking Claude models are skipped while thinking is on. The new cacheWarming setting offers off, streaming — the default, protecting expensive prefixes during long tool runs — and idle, plus a cache_warming_decision event extensions can use to override each one.

#9746 fixes a blind spot in file autocomplete: completion never recognized CJK punctuation as a boundary, so a path right after one would not trigger completion — the example in the pull request is 我们需要实现新功能,docs. CJK punctuation now counts as a boundary like whitespace outside quotes, using the same rules for parsing and triggering; CJK characters remain valid path content, and quoted paths keep spaces and punctuation.

#9120 fixes #8813: skill slash-command autocomplete ranked by the full skill:<name> string, so the fixed skill: prefix could outweigh the name — with skill:deep-research and skill:research-idea loaded, /idea ranked deep-research first although only the latter’s bare name matches. Non-explicit queries now match the bare name, explicit /skill:... queries keep full-command matching, and regression tests cover all three paths.

All three are installable: v0.86.0 was cut the same evening; its notes list #9668 under new features and both fixes under Fixed.

source: https://github.com/earendil-works/pi/pulls?q=is%3Apr+merged%3A2026-09-19+is%3Aclosed