CHANGELOG

Version-by-version log of user-visible changes since v0.1.

14 / 14·log·v0.2.81

v0.2.81 — 2026-04-24

tools — failure-mode + when-to-use hints on three tool descriptions

Third pass on AT (prompt + tool descriptions audit vs Hermes). Three targeted additions; most other tools already had "Use when / Not for / failure modes" from the earlier ff6bb21 pass and need no change.

Skipped the Hermes audit's recommendations that didn't match reality post-ff6bb21: delegate, send_message, and research already carry explicit "Use when" + "Not for" sections, and the memory "facts vs directives" rule lives in the memory tool description with an explicit pointer from system_prompt.md. Duplicating would be token tax without signal. Model-specific execution guidance (BD) stays parked until there's an A/B measurement on agent.log.

v0.2.80 — 2026-04-24

site — header/nav unified, docs index redesigned, SEO at 100%

Second pass on the static site under site/.

v0.2.79 — 2026-04-24

site — static marketing + docs scaffold under site/

Landed the first cut of alpi.site as a zero-dependency static site: vanilla HTML/CSS/JS plus a single Node build script (site/scripts/build.mjs) that reads README.md, QUICKSTART.md, CHANGELOG.md, LICENSE, and docs/*.md at HEAD and bakes site/dist/ — landing page at /, doc index at /docs/, and one pre-rendered HTML per doc. Versions and copy are derived from pyproject.toml so a rebuild keeps the site in sync with the shipped release; no runtime fetch from GitHub, no CORS, no API rate limits. Ships with a tiny zero-dep Markdown renderer (site/scripts/markdown.mjs) covering the subset used in the repo (headings, fenced code, lists, tables, blockquotes, inline code, bold/italic, links). Based on a mockup generated by claude design; the mockup folder was removed after migration. Cloudflare Pages wiring: build command node site/scripts/build.mjs, output site/dist.

v0.2.78 — 2026-04-24

skills — auto-validate on every mutation

Every mutating action on a user skill (create, edit, patch, add_file, remove_file) now runs the script validator (_skill_validate.validate_skill — py_compile, missing imports, OAuth race pattern, port coherence) and surfaces findings in the tool output. The LLM sees issues immediately and can iterate in the same turn without having to call skill(action="validate") separately. 6 new regression tests in tests/test_skill_auto_validate.py.

alpi/prompts/create_skill_guide.md extended with a Scripts section (prefer stdlib, include a dry-run / smoke-test path, explicit exit codes) and a note about the automatic validation — so the LLM authors scripts knowing it will get feedback.

skills — AO position clarified, no bundled skill shipped yet

Reverted the @alpi/plan experiment. It restyled output without adding real capability and imposed a path convention users may not want. The honest conclusion: don't ship bundled skills from a hermes-style catalog just because BE's infrastructure is ready. docs/ROADMAP.md → AO and docs/SKILLS.md updated to reflect the new position: the @alpi/* namespace is reserved and live, but nothing ships by default. Bundled skills land when concrete recurring patterns justify one — not from a catalog import.

v0.2.77 — 2026-04-24

skills — bundled infrastructure (BE closed)

Adds a read-only namespace for skills that ship with the alpi package. No content bundled yet — this is infrastructure only.

pyproject.toml package-data extended to ship skills/**/*; the alpi/skills/ package directory is empty except for __init__.py. When we land the first real bundled skill, no loader changes are needed — drop the SKILL.md in place and it shows up.

14 new regression tests in tests/test_bundled_skills.py; 692 green.

Docs: docs/SKILLS.md gains a "Bundled vs user skills" section with the namespace, variant pattern, and discovery ordering. docs/ARCHITECTURE.md package tree + runtime note updated.

v0.2.76 — 2026-04-24

BB — shared link renderer. Textual 8.2.3 exposes only @click meta on markdown link spans, no visual style — so links rendered as plain prose in the chat. New alpi/tui/_links.py monkey-patches MarkdownBlock._token_to_content at import time: every span carrying @click meta gets bold + underline appended. Idempotent install, applied globally — works across AssistantMessage streaming output AND every floating panel that uses Markdown (same patch, one pipeline).

Per-link hover styling is not addressed — Textual renders link spans as Rich Text inside a single widget, not as per-link widgets. A hover state would require widget-per-link rewriting of the Markdown internals, out of scope. Deferred.

tui — /memory panel rewrite

Old /memory wrapped each file's content in a markdown code block so everything rendered with the .code_inline accent color. Inconsistent and the code-block hid real markdown structure.

New layout: three stacked sections, each with a Static accent-colored header + Markdown widgets for the content. USER.md and MEMORY.md are split on § and rendered as N separate Markdown widgets so entries appear visually separated (the § character no longer leaks into the render). AGENT.md renders as one unit since it's already markdown.

New .memory-section CSS class; all FloatingPanel Markdown widgets share transparent background + tight margins so panels stay compact.

prompts / template

alpi/prompts/default_agent.md# Identity / # Voice / # Defaults headers downgraded to ##. Textual renders h1 centered (it reads as "document title" styling); h2 is left-aligned which is the right look for in-document sections. Applied to the template that seeds fresh profiles.

memory tool / description

§ entry delimiter guidance tightened (English only, terse). New fuzzy_find_unique_entry error now appends a "note: § is the entry delimiter, not content — strip it from your match string" hint when the match string contains §. Catches the common LLM mis-construction observed on long-running profiles with many entries.

tui — streaming input lag

Fixed: typing in the TUI lagged while the assistant streamed output. Cause: AssistantMessage.append(delta) spawned one asyncio.create_task per delta (~60/s from the LLM), each re-parsing markdown — saturating the event loop so key events queued behind paint work. Fix: deltas now accumulate in a buffer and a single timer flushes them at 12.5 Hz (_FLUSH_INTERVAL = 0.08). One coalesced write per tick instead of dozens. Input stays responsive mid-stream.

docs

docs/ROADMAP.md — BF (drop § delimiter) removed. Pre-existing profiles handle it fine with the new description guidance; refactoring the on-disk format isn't worth the migration surface right now.

v0.2.75 — 2026-04-24

wizard / cli — profile lifecycle + polish

docs

v0.2.74 — 2026-04-24

schedule — ad-hoc job fire (BA closed)

Closes the tightest feedback loop in the schedule lifecycle: add a cron, verify it works, without waiting for the cron window.

5 new regression tests in tests/test_schedule.py; 675 green.

v0.2.73 — 2026-04-24

skills / memory / docs — stop shipping what we don't use

v0.2.72 — 2026-04-24

memory — v2 rules (AI partial)

Renames PERSONALITY.md → AGENT.md across the codebase, prompts, tests, and docs. The user/agent pair (USER.md vs AGENT.md) is now symmetric and readable. The memory tool enum, template file (alpi/prompts/default_agent.md), home helper, and tool descriptions that list memory files are all updated. File migration on existing profiles is manual — no auto-migration per project policy.

D deferred — the "≤1-token entry dedup" idea (lower Jaccard guard from 2 → 1) produced false positives on entries that shared one generic content token (Dato A vs Dato B both reduced to {dato}). Kept the guard at 2.

G deferred — periodic self-consolidation trigger stays out: explicit over-engineering per the "no fails, no over-engineering" directive. The user or the model can run the consolidate-memory skill on demand.

11 new regression tests in tests/test_memory_tool_v2.py.

v0.2.71 — 2026-04-24

engine / prompts (AT partial — 4 of 5 candidate edits applied)

roadmap

docs

v0.2.70 — 2026-04-23

license

docs

v0.2.69 — 2026-04-23

models

v0.2.68 — 2026-04-23

setup

v0.2.54 — 2026-04-23

gateway

v0.2.53 — 2026-04-23

config

v0.2.52 — 2026-04-23

skill

v0.2.51 — 2026-04-23

tui

v0.2.50 — 2026-04-23

config

v0.2.49 — 2026-04-23

roadmap

v0.2.47 — 2026-04-23

setup

v0.2.46 — 2026-04-23

cli

v0.2.41 — 2026-04-23

setup

v0.2.40 — 2026-04-23

gateway

v0.2.39 — 2026-04-22

cleanup

v0.2.38 — 2026-04-22

approval

v0.2.37 — 2026-04-22

approval

v0.2.36 — 2026-04-22

browser

v0.2.35 — 2026-04-22

tidy

v0.2.34 — 2026-04-22

gateway

v0.2.33 — 2026-04-22

misc

v0.2.32 — 2026-04-22

setup

v0.2.31 — 2026-04-22

tui

v0.2.30 — 2026-04-22

sandbox

v0.2.29 — 2026-04-22

tos

v0.2.28 — 2026-04-22

misc

v0.2.27 — 2026-04-22

brand

v0.2.26 — 2026-04-22

misc

v0.2.25 — 2026-04-22

voice

v0.2.23 — 2026-04-22

gmail

v0.2.22 — 2026-04-22

refactor

v0.2.21 — 2026-04-22

read_image

v0.2.20 — 2026-04-22

misc

v0.2.19 — 2026-04-22

roadmap

v0.2.18 — 2026-04-22

research/delegate

v0.2.17 — 2026-04-22

skill

v0.2.16 — 2026-04-22

browser

v0.2.15 — 2026-04-21

ollama

todo

v0.2.14 — 2026-04-21

tui

v0.2.13 — 2026-04-21

misc

v0.2.12 — 2026-04-21

rename

v0.2.11 — 2026-04-21

misc

v0.2.10 — 2026-04-21

ui

v0.2.9 — 2026-04-21

tui

v0.2.8 — 2026-04-21

tui

v0.2.7 — 2026-04-21

tui

v0.2.6 — 2026-04-21

tui

v0.2.5 — 2026-04-21

tui+setup

v0.2.4 — 2026-04-21

read_image

v0.2.3 — 2026-04-21

delegate

v0.2.2 — 2026-04-21

research

v0.2.1 — 2026-04-21

tui

v0.2.0 — 2026-04-21

docs

fix

gateway

gateway/schedule

schedule

skills

tooling

tools

tui

misc

v0.1.0 — 2026-04-19

misc