# Changelog ## [0.56.2] - 2026-03-05 ## [0.56.1] - 2026-03-05 ## [0.56.0] - 2026-03-04 ## [0.55.4] - 2026-03-02 ### Fixed - Fixed mom startup crash caused by settings API drift by using `SettingsManager` with workspace-backed storage ([#1444](https://github.com/badlogic/pi-mono/issues/1444)) ## [0.55.3] - 2026-02-27 ## [0.55.2] - 2026-02-27 ## [0.55.1] - 2026-02-26 ## [0.55.0] - 2026-02-24 ## [0.54.2] - 2026-02-23 ## [0.54.1] - 2026-02-22 ## [0.54.0] - 2026-02-19 ## [0.53.1] - 2026-02-19 ## [0.53.0] - 2026-02-17 ## [0.52.12] - 2026-02-13 ## [0.52.11] - 2026-02-13 ## [0.52.10] - 2026-02-12 ## [0.52.9] - 2026-02-08 ## [0.52.8] - 2026-02-07 ## [0.52.7] - 2026-02-06 ## [0.52.6] - 2026-02-05 ## [0.52.5] - 2026-02-05 ## [0.52.4] - 2026-02-05 ## [0.52.3] - 2026-02-05 ## [0.52.2] - 2026-02-05 ## [0.52.1] - 2026-02-05 ## [0.52.0] - 2026-02-05 ## [0.51.6] - 2026-02-04 ## [0.51.5] - 2026-02-04 ## [0.51.4] - 2026-02-03 ## [0.51.3] - 2026-02-03 ## [0.51.2] - 2026-02-03 ## [0.51.1] - 2026-02-02 ## [0.51.0] - 2026-02-01 ## [0.50.9] - 2026-02-01 ## [0.50.8] - 2026-02-01 ## [0.50.7] - 2026-01-31 ## [0.50.6] - 2026-01-30 ## [0.50.5] - 2026-01-30 ## [0.50.3] - 2026-01-29 ## [0.50.2] - 2026-01-29 ## [0.50.1] - 2026-01-26 ## [0.50.0] - 2026-01-26 ## [0.49.3] - 2026-01-22 ## [0.49.2] - 2026-01-19 ## [0.49.1] - 2026-01-18 ## [0.49.0] - 2026-01-17 ## [0.48.0] - 2026-01-16 ## [0.47.0] - 2026-01-16 ## [0.46.0] - 2026-01-15 ## [0.45.7] - 2026-01-13 ## [0.45.6] - 2026-01-13 ## [0.45.5] - 2026-01-13 ## [0.45.4] - 2026-01-13 ## [0.45.3] - 2026-01-13 ## [0.45.2] - 2026-01-13 ## [0.45.1] - 2026-01-13 ## [0.45.0] - 2026-01-13 ## [0.44.0] - 2026-01-12 ## [0.43.0] - 2026-01-11 ## [0.42.5] - 2026-01-11 ### Fixed - Use coding-agent's SessionManager instead of custom MomSessionManager to fix API mismatch crash ([#595](https://github.com/badlogic/pi-mono/issues/595)) ## [0.42.4] - 2026-01-10 ## [0.42.3] - 2026-01-10 ## [0.42.2] - 2026-01-10 ## [0.42.1] - 2026-01-09 ## [0.42.0] - 2026-01-09 ## [0.41.0] - 2026-01-09 ## [0.40.1] - 2026-01-09 ## [0.40.0] - 2026-01-08 ## [0.39.1] - 2026-01-08 ## [0.39.0] - 2026-01-08 ## [0.38.0] - 2026-01-08 ## [0.37.8] - 2026-01-07 ## [0.37.7] - 2026-01-07 ## [0.37.6] - 2026-01-06 ## [0.37.5] - 2026-01-06 ## [0.37.4] - 2026-01-06 ## [0.37.3] - 2026-01-06 ## [0.37.2] - 2026-01-05 ## [0.37.1] - 2026-01-05 ## [0.37.0] - 2026-01-05 ## [0.36.0] - 2026-01-05 ## [0.35.0] - 2026-01-05 ## [0.34.2] - 2026-01-04 ## [0.34.1] - 2026-01-04 ## [0.34.0] - 2026-01-04 ## [0.33.0] - 2026-01-04 ## [0.32.3] - 2026-01-03 ## [0.32.2] - 2026-01-03 ## [0.32.1] - 2026-01-03 ## [0.32.0] - 2026-01-03 ## [0.31.1] - 2026-01-02 ## [0.31.0] - 2026-01-02 ### Breaking Changes - `AgentTool` import moved from `@mariozechner/pi-ai` to `@mariozechner/pi-agent-core` - `AppMessage` type renamed to `AgentMessage` - `Attachment` type replaced with `ImageContent` for image handling - `MomSessionManager.loadSession()` renamed to `buildSessionContex()` - `MomSessionManager.createBranchedSessionFromEntries()` signature changed to `createBranchedSession(leafId)` - `ProviderTransport` removed from Agent config, replaced with direct `getApiKey` callback - `messageTransformer` renamed to `convertToLlm` - `ANTHROPIC_API_KEY`/`ANTHROPIC_OAUTH_TOKEN` no longer checked at startup (deferred to first API call) ### Changed - Session entries now include `id` and `parentId` fields for tree structure support - Auth lookup now uses `AuthStorage` class instead of direct environment variable access - Image attachments use `ImageContent` type with `data` field instead of `Attachment` with `content` - `session.prompt()` now uses `images` option instead of `attachments` ### Added - Support for OAuth login via coding agent's `/login` command (link `~/.pi/agent/auth.json` to `~/.pi/mom/auth.json`) ## [0.20.2] - 2025-12-13 ### Fixed - **Skill paths now use container paths**: Skill file paths in system prompt are translated to container paths (e.g., `/workspace/skills/...`) so mom can read them from inside Docker. ## [0.20.1] - 2025-12-13 ### Added - **Skills auto-discovery**: Mom now automatically discovers skills from `workspace/skills/` and `channel/skills/` directories. Skills are directories containing a `SKILL.md` file with `name` and `description` in YAML frontmatter. Available skills are listed in the system prompt with their descriptions. Mom reads the `SKILL.md` file before using a skill. ## [0.19.2] - 2025-12-12 ### Added - Events system: schedule wake-ups via JSON files in `workspace/events/` - Immediate events: trigger when file is created (for webhooks, external signals) - One-shot events: trigger at specific time (for reminders) - Periodic events: trigger on cron schedule (for recurring tasks) - `SlackBot.enqueueEvent()` for queueing events (max 5 per channel) - `[SILENT]` response marker: deletes status message, posts nothing to Slack (for periodic events with nothing to report) - Events documentation in `docs/events.md` - System prompt section explaining events to mom ## [0.18.8] - 2025-12-12 ### Changed - Timestamp prefix now includes timezone offset (`[YYYY-MM-DD HH:MM:SS+HH:MM]`) ## [0.18.7] - 2025-12-12 ### Added - Timestamp prefix on user messages (`[YYYY-MM-DD HH:MM:SS]`) so mom knows current date/time ### Fixed - Sync deduplication now strips timestamp prefix before comparing ## [0.18.6] - 2025-12-12 ### Fixed - Duplicate message in context when message has attachments (sync from log didn't strip attachment section before comparing) - Use `` delimiter for attachments in messages (easier to parse/strip) ## [0.18.5] - 2025-12-12 ### Added - `--download ` flag to download a channel's full history including thread replies as plain text ### Fixed - Error handling: when agent returns `stopReason: "error"`, main message is updated to "Sorry, something went wrong" and error details are posted to the thread ## [0.18.4] - 2025-12-11 ### Fixed - Attachment downloads now work correctly - SlackBot now receives store for processing file downloads - Files are downloaded in background and stored in `/attachments/` - Attachment paths passed to agent as absolute paths in execution environment - Backfill also downloads attachments from historical messages ## [0.18.3] - 2025-12-11 ### Changed - Complete rewrite of message handling architecture (#115) - Now uses `AgentSession` from coding-agent for session management - Brings auto-compaction, overflow handling, and proper prompt caching - `log.jsonl` is the source of truth for all channel messages - `context.jsonl` stores LLM context (messages sent to Claude, same format as coding-agent) - Sync mechanism ensures context.jsonl stays in sync with log.jsonl at run start - Session header written immediately on new session creation (not lazily) - Tool results preserved in context.jsonl for multi-turn continuity - Backfill improvements - Only backfills channels that already have a `log.jsonl` file - Strips @mentions from backfilled messages (consistent with live messages) - Uses largest timestamp in log for efficient incremental backfill - Fetches DM channels in addition to public/private channels - Message handling improvements - Channel chatter (messages without @mention) logged but doesn't trigger processing - Messages sent while mom is busy are logged and synced on next run - Pre-startup messages (replayed by Slack on reconnect) logged but not auto-processed - Stop command executes immediately (not queued), can interrupt running tasks - Channel @mentions no longer double-logged (was firing both app_mention and message events) - Usage summary now includes context window usage - Shows current context tokens vs model's context window - Example: `Context: 4.2k / 200k (2.1%)` ### Fixed - Slack API errors (msg_too_long) no longer crash the process - Added try/catch error handling to all Slack API calls in the message queue - Main channel messages truncated at 35K with note to ask for elaboration - Thread messages truncated at 20K - replaceMessage also truncated at 35K - Private channel messages not being logged - Added `message.groups` to required bot events in README - Added `groups:history` and `groups:read` to required scopes in README - Stop command now updates "Stopping..." to "Stopped" instead of posting two messages ### Added - Port truncation logic from coding-agent: bash and read tools now use consistent 2000 lines OR 50KB limits with actionable notices ## [0.10.2] - 2025-11-27 ### Breaking Changes - Timestamps now use Slack format (seconds.microseconds) and messages are sorted by `ts` field - **Migration required**: Run `npx tsx scripts/migrate-timestamps.ts ./data` to fix existing logs - Without migration, message context will be incorrectly ordered ### Added - Channel and user ID mappings in system prompt - Fetches all channels bot is member of and all workspace users at startup - Mom can now reference channels by name and mention users properly - Skills documentation in system prompt - Explains custom CLI tools pattern with SKILL.md files - Encourages mom to create reusable tools for recurring tasks - Debug output: writes `last_prompt.txt` to channel directory with full context - Bash working directory info in system prompt (/ for Docker, cwd for host) - Token-efficient log queries that filter out tool calls/results for summaries ### Changed - Turn-based message context instead of raw line count (#68) - Groups consecutive bot messages (tool calls/results) as single turn - "50 turns" now means ~50 conversation exchanges, not 50 log lines - Prevents tool-heavy runs from pushing out conversation context - Messages sorted by Slack timestamp before building context - Fixes out-of-order issues from async attachment downloads - Added monotonic counter for sub-millisecond ordering - Condensed system prompt from ~5k to ~2.7k chars - More concise workspace layout (tree format) - Clearer log query examples (conversation-only vs full details) - Removed redundant guidelines section - User prompt simplified: removed duplicate "Current message" (already in history) - Tool status labels (`_→ label_`) no longer logged to jsonl - Thread messages and thinking no longer double-logged ### Fixed - Duplicate message logging: removed redundant log from app_mention handler - Username obfuscation in thread messages to prevent unwanted pings - Handles @username, bare username, and <@USERID> formats - Escapes special regex characters in usernames ## [0.10.1] - 2025-11-27 ### Changed - Reduced tool verbosity in main Slack messages (#65) - During execution: show tool labels (with → prefix), thinking, and text - After completion: replace main message with only final assistant response - Full audit trail preserved in thread (tool details, thinking, text) - Added promise queue to ensure message updates execute in correct order ## [0.10.0] - 2025-11-27 ### Added - Working memory system with MEMORY.md files - Global workspace memory (`workspace/MEMORY.md`) shared across all channels - Channel-specific memory (`workspace//MEMORY.md`) for per-channel context - Automatic memory loading into system prompt on each request - Mom can update memory files to remember project details, preferences, and context - ISO 8601 date field in log.jsonl for easy date-based grepping - Format: `"date":"2025-11-26T10:44:00.123Z"` - Enables queries like: `grep '"date":"2025-11-26' log.jsonl` - Centralized logging system (`src/log.ts`) - Structured, colored console output (green for user messages, yellow for mom activity, dim for details) - Consistent format: `[HH:MM:SS] [context] message` - Type-safe logging functions for all event types - Usage tracking and cost reporting - Tracks tokens (input, output, cache read, cache write) and costs per run - Displays summary at end of each agent run in console and Slack thread - Example: `💰 Usage: 12,543 in + 847 out (5,234 cache read, 127 cache write) = $0.0234` - Working indicator in Slack messages - Channel messages show "..." while mom is processing - Automatically removed when work completes - Improved stop command behavior - Separate "Stopping..." message that updates to "Stopped" when abort completes - Original working message continues to show tool results (including abort errors) - Clean separation between status and results ### Changed - Enhanced system prompt with clearer directory structure and path examples - Improved memory file path documentation to prevent confusion - Message history format now includes ISO 8601 date for better searchability - System prompt now includes log.jsonl format documentation with grep examples - System prompt now includes current date and time for date-aware operations - Added efficient log query patterns using jq to prevent context overflow - System prompt emphasizes limiting NUMBER of messages (10-50), not truncating message text - Log queries now show full message text and attachments for better context - Fixed jq patterns to handle null/empty attachments with `(.attachments // [])` - Recent messages in system prompt now formatted as TSV (43% token savings vs raw JSONL) - Enhanced security documentation with prompt injection risk warnings and mitigations - **Moved recent messages from system prompt to user message** for better prompt caching - System prompt is now mostly static (only changes when memory files change) - Enables Anthropic's prompt caching to work effectively - Significantly reduces costs on subsequent requests - Switched from Claude Opus 4.5 to Claude Sonnet 4.5 (~40% cost reduction) - Tool result display now extracts actual text instead of showing JSON wrapper - Slack thread messages now show cleaner tool call formatting with duration and label - All console logging centralized and removed from scattered locations - Agent run now returns `{ stopReason }` instead of throwing exceptions - Clean handling of "aborted", "error", "stop", "length", "toolUse" cases - No more error-based control flow ### Fixed - jq query patterns now properly handle messages without attachments (no more errors on empty arrays) ## [0.9.4] - 2025-11-26 ### Added - Initial release of Mom Slack bot - Slack integration with @mentions and DMs - Docker sandbox mode for isolated execution - Bash tool with full shell access - Read, write, edit file tools - Attach tool for sharing files in Slack - Thread-based tool details (clean main messages, verbose details in threads) - Single accumulated message per agent run - Stop command (`@mom stop`) to abort running tasks - Persistent workspace per channel with scratchpad directory - Streaming console output for monitoring