# Release v0.10.29 - Changelog Documentation System

Released: 2026-01-XX

## Overview

This release introduces a structured changelog documentation system for creating rich, detailed release notes. The system follows best practices from our other projects and integrates seamlessly with GitHub Actions to automatically create professional release descriptions.

## 🎉 New Features

### Changelog Documentation System
- **Structured Release Notes**: Added `.changelog/` directory with `v{major}.{minor}.x.md` naming pattern
- **Comprehensive README**: Created detailed documentation for changelog format and best practices
- **GitHub Actions Integration**: Updated release workflow to automatically use changelog files with version substitution
- **Fallback Support**: Maintains automatic commit-based changelogs when manual changelog is not provided
- **Automatic File Rename**: Pattern files (e.g., `v0.10.29.md`) automatically renamed to versioned files (e.g., `v0.10.5.md`) on release, preserving git history

### Documentation Updates
- **CLAUDE.md Updates**: Added detailed release changelog process instructions
- **Best Practices Guide**: Documented when and how to create changelog files
- **Format Templates**: Provided clear structure with emoji-based sections for visual organization

### Chief of Staff - ETA Countdown
- **Agent ETA Display**: Running agents now show remaining time (e.g., "~2m 30s left") based on historical task completion times
- **Overtime Indicator**: When tasks exceed their typical duration, shows "+Xm Xs over estimate" in yellow with a pulse animation
- **Progress Bar Enhancement**: Improved progress bar with clearer "X% complete" and prominent ETA display
- **Visual Polish**: Slightly thicker progress bars and better typography for the countdown display

### Chief of Staff - Arcane Sigil (3D) Avatar
- **New Avatar Style**: Added an additional Three.js avatar option, "Arcane Sigil (3D)", alongside the existing Cyberpunk 3D style
- **State-Reactive Animation**: Sigil intensity, rune ring motion, and scan effects respond to agent state (sleeping/thinking/coding/investigating) and speaking activity

### Chief of Staff - Esoteric (3D) Avatar
- **New Avatar Style**: Added "Esoteric (3D)" avatar option featuring a mystical octahedron core with distortion effects, orbiting runic shards, ancient halo rings, and floating sparkle particles
- **State-Reactive Visuals**: Core wireframes in investigation mode, increased distortion during thinking, shard orbit speed increases during coding/thinking states
- **Speaking Animation**: Core pulses rapidly when the agent is speaking

### Chief of Staff - Dynamic Avatar Switching
- **Dynamic Avatar Mode**: New toggle in CoS Config > Appearance that automatically switches the avatar style based on the active task's context
- **Context-Aware Rules**: Avatar resolves based on priority order: provider (Codex → Esoteric, LM Studio/Gemini → Sigil), self-improvement type (security/code-quality → Cyberpunk), task type (internal → Sigil), and priority (CRITICAL → Esoteric)
- **Seamless Transitions**: Avatar changes when an agent spawns and reverts to the configured default when the agent completes or CoS stops
- **Provider ID in Metadata**: Agent metadata now includes `providerId` for accurate provider-based avatar resolution

### Dashboard - Activity Streak
- **Current Streak Display**: Shows consecutive days of activity with dynamic emoji (fire for 7+ days, lightning for 3+, sparkles for less)
- **Longest Streak Tracking**: Displays your personal best streak alongside current streak
- **Personal Best Badge**: Green "Personal best!" badge appears when you match or beat your longest streak
- **7-Day Activity Bar**: Visual mini-chart showing activity for the past week with green/gray bars
- **Gamification**: Motivates consistent usage through streak tracking and progress visualization

### PortOS Stack Template - AI Provider Integration
- **AI Toolkit Integration**: New projects created with the PortOS Stack template now include `@portos/ai-toolkit` by default
- **Provider Management UI**: Scaffolded projects include an AI Providers page (`/providers`) for adding, editing, testing, and deleting providers
- **Navigation Integration**: New apps have icons in the sidebar with active state highlighting for Home, AI Providers, and About routes
- **Provider Management API**: `/api/providers` endpoints for managing AI providers (CLI or API-based)
- **Run Tracking**: `/api/runs` endpoints for executing and tracking AI runs
- **Prompt Templates**: `/api/prompts` endpoints for managing reusable prompt templates
- **Automatic Symlink**: Template creates symlinks to PortOS's ai-toolkit package in root, server, and client node_modules

### Create App Improvements
- **Default Directory Path**: The Create App page (`/apps/create`) now defaults to the PortOS parent directory
- **Folder Browser**: Added a folder picker button to browse and select project directories visually
- **Templates Auto-Default**: Templates page now automatically sets the target directory without requiring folder selection

### Digital Twin - Identity System
- **Digital Twin Documents**: New `/digital-twin` page for managing identity scaffold documents that define persona, values, and cognitive style
- **Document Management**: View, edit, create, and delete digital twin markdown documents organized by category (core, audio, behavioral, enrichment)
- **Multi-Model Behavioral Testing**: Run 14 behavioral alignment tests against multiple AI providers/models simultaneously with side-by-side comparison
- **Enrichment System**: Guided questionnaire across 14 categories (memories, favorites, values, routines, non-negotiables, decision heuristics, error intolerance, personality assessments, etc.) that generates document content from answers
- **Export Formats**: Export digital twin for use in external LLMs as System Prompt, CLAUDE.md, JSON, or individual files
- **CoS Integration**: Digital twin context automatically injected into Chief of Staff agent prompts when enabled
- **Identity Navigation Group**: Brain and Digital Twin now grouped under "Identity" section in navigation

### Digital Twin Enhancement: Reliable Identity Scaffolds
- **Completeness Validator**: New API endpoint and UI showing percentage of required identity sections covered (identity, values, communication, decision making, non-negotiables, error intolerance) with actionable suggestions for missing sections
- **Contradiction Detector**: AI-powered analysis to detect inconsistencies and conflicting statements across digital twin documents with severity levels and resolution suggestions
- **Dynamic Test Generation**: Generate behavioral tests automatically based on digital twin content - tests values in action, communication style, non-negotiables, and decision patterns
- **Writing Sample Analysis**: Paste writing samples to extract your authentic voice patterns (sentence structure, vocabulary, formality, tone) and automatically generate a WRITING_STYLE.md document
- **Creation Wizard**: 5-step guided wizard for new users covering identity basics, core values, communication style, decision making, and non-negotiables
- **Document Weighting**: Priority slider (1-10) on each document - higher weighted documents are preserved first when context limits force truncation
- **New Enrichment Categories**: Added non_negotiables, decision_heuristics, error_intolerance, and personality_assessments categories with 3 preset questions each
- **Best Practices Documentation**: Added DIGITAL_TWIN_GUIDE.md with comprehensive guidance on creating effective digital twin documents

### Digital Twin - Mobile Responsive Design
- **Mobile-First Layout**: Complete responsive redesign of the Digital Twin page and all tabs for mobile devices
- **Adaptive Document Editor**: Documents list and editor use stacked layout on mobile with back navigation
- **Touch-Friendly Controls**: All buttons and interactive elements have 40px+ minimum touch targets for accessibility
- **Responsive Grids**: Category grids, test provider selections, and export options adapt from multi-column to single-column on small screens
- **Horizontal Tab Scrolling**: Tab navigation scrolls horizontally on narrow screens with hidden scrollbar
- **Mobile-Optimized Forms**: Enrichment questionnaire, wizard, and all modals display properly on mobile with appropriate spacing

### Digital Twin - Personality Assessments
- **New Enrichment Category**: Added `personality_assessments` enrichment category for capturing Myers-Briggs, Big Five (OCEAN), Enneagram, DISC, StrengthsFinder, and other personality type results
- **Preset Questions**: Three guided questions covering MBTI type variations, Big Five trait scores, and other assessment results
- **PERSONALITY.md Target**: Answers enriched into a dedicated PERSONALITY.md core document
- **Support for Type Variance**: Questions acknowledge that people may test differently at different times (e.g., ENTJ/ENTP/INTJ/INTP for those near the middle on E/I and J/P dimensions)

### Digital Twin Rebranding
- **Soul → Digital Twin**: Renamed the entire "Soul" feature to "Digital Twin" for clearer terminology
- **Route Changes**: `/soul` routes now at `/digital-twin`
- **API Endpoints**: `/api/soul` endpoints now at `/api/digital-twin`
- **Data Directory**: `data/soul/` renamed to `data/digital-twin/`
- **Backwards Compatibility**: Legacy function names and imports aliased for backwards compatibility

### Digital Twin - Quantitative Personality Modeling (M34 Phase 1 & 2)
- **Big Five Trait Extraction**: AI-powered analysis extracts OCEAN personality scores (0-1 scale) from digital twin documents with supporting evidence notes
- **Values Hierarchy**: Automatically extracts and ranks core values with conflict detection between values
- **Communication Profile**: Quantifies writing style including formality (1-10), verbosity (1-10), emoji usage, preferred tone, and distinctive markers
- **Confidence Scoring**: Calculates per-dimension confidence scores based on evidence quantity, specificity, and consistency
- **Gap Recommendations**: Identifies low-confidence dimensions and suggests specific enrichment questions to fill gaps
- **PersonalityMap Component**: New radar chart visualization showing Big Five traits with confidence-based coloring (green/yellow/red)
- **ConfidenceGauge Component**: Visual gauge showing overall twin confidence with dimension breakdown and trend indicators
- **GapRecommendations Component**: Prioritized list of suggested enrichments with urgency labels and specific questions
- **Prompt Templates**: New `twin-trait-extractor.md` and `twin-confidence-analyzer.md` prompt templates for AI-powered analysis
- **API Endpoints**: New `/api/digital-twin/traits`, `/api/digital-twin/traits/analyze`, `/api/digital-twin/confidence`, `/api/digital-twin/confidence/calculate`, and `/api/digital-twin/gaps` endpoints
- **Local Fallback**: Heuristic-based confidence calculation when AI provider is unavailable
- **Overview Tab Integration**: New components integrated into Digital Twin Overview tab for at-a-glance personality insights

### Digital Twin - External Data Integration (M34 Phase 4)
- **Import Tab**: New dedicated tab for importing personal data from external services
- **Goodreads CSV Import**: Parse Goodreads library exports to extract reading history, favorites, and shelf data for personality analysis
- **Spotify JSON Import**: Import Spotify extended streaming history and library data to capture music preferences and listening patterns
- **Letterboxd CSV Import**: Parse Letterboxd exports for film ratings, reviews, and watchlists
- **iCal Import**: Parse calendar files (.ics) to understand routines, priorities, and time allocation patterns
- **AI-Powered Analysis**: Uses `twin-import-analyzer.md` prompt template to extract personality insights from imported data
- **Document Generation**: Analyzed imports can be saved directly as digital twin documents with appropriate categorization
- **Provider Selection**: Choose AI provider/model for analysis with multi-tier support
- **Validation Schemas**: New Zod schemas for import sources and analysis results
- **API Endpoints**: New `/api/digital-twin/import/sources`, `/api/digital-twin/import/analyze`, and `/api/digital-twin/import/save` endpoints

### AI Agent Personalities & Platform Automation
- **Agent Personalities Page**: New `/agents` page for managing AI agent personalities with custom communication styles, tones, topics, and quirks
- **Personality Configuration**: Define agent style (professional, casual, witty, academic, creative), tone, expertise topics, unique quirks, and custom prompt prefixes
- **AI-Powered Personality Generation**: "Generate with AI" button on the new agent form auto-generates personality description, style, tone, topics, quirks, prompt prefix, and avatar based on agent name - select from any configured AI provider/model
- **Multi-User Support**: Agents support `userId` field for future multi-tenant scenarios
- **Platform Accounts**: Link agents to social platforms (starting with Moltbook) with credential management and status tracking
- **Moltbook Integration**: Isolated `server/integrations/moltbook/` module with REST API client for posts, comments, votes, follows, and heartbeat actions - designed for easy extraction to standalone app
- **Automation Scheduling**: Create schedules with cron, interval, or random timing to automate platform actions with per-schedule rate limiting
- **Action Types**: Supports post, comment, vote, and heartbeat (browse & engage naturally) action types
- **Rate Limit Enforcement**: Moltbook rate limits (30min posts, 20sec comments, 50/day comments) automatically enforced
- **Activity Logging**: All agent actions logged per-agent per-day for monitoring and analytics
- **Real-Time Updates**: Socket.IO events for personality changes, account updates, schedule triggers, and activity logs
- **Tab Navigation**: Five tabs - Personalities, Accounts, Schedules, Activity, and Config with URL-based deep linking
- **Quick Actions**: Run schedules immediately with "Run Now" button, toggle schedules on/off, test platform connections

### AI Provider Usage Limit Handling & Fallback
- **Usage Limit Detection**: Agents now detect provider usage limit errors (e.g., "You've hit your usage limit. Upgrade to Pro or try again in 1 day 1 hour 33 minutes") and mark providers as temporarily unavailable
- **Provider Status Tracking**: New `providerStatus.js` service tracks provider availability, usage limits, and estimated recovery times with persistence across server restarts
- **Automatic Fallback**: When a provider hits usage limits, tasks automatically use configured fallback providers - no manual intervention needed
- **Fallback Provider Configuration**: New "Fallback Provider" field in provider settings allows configuring which provider to use when the primary is unavailable
- **Task-Level Fallback Override**: Tasks can specify `metadata.fallbackProvider` to override provider-level and system defaults - gives fine-grained control per task type
- **Provider Status UI**: Health tab now shows provider availability status with real-time updates via WebSocket - displays unavailable providers, reason, and estimated recovery time
- **Manual Recovery**: "Recover" button allows manually marking a provider as available when you know the limit has reset
- **Socket.IO Events**: Real-time `provider:status:changed` events notify UI of provider status changes
- **API Endpoints**: New `/api/providers/status`, `/api/providers/:id/status`, and `/api/providers/:id/status/recover` endpoints for status management
- **AI Toolkit Integration**: Core rate limit detection, error categorization, and provider status tracking now built into `portos-ai-toolkit` v0.2.0 - PortOS wraps the toolkit service for backwards compatibility

### CoS Learning Data Reset
- **Reset Skipped Task Types**: Added ability to reset learning data for auto-paused task types that have been stuck due to historical failures (e.g., task types with 5% success after 200+ attempts from a now-fixed bug)
- **Clean Metric Subtraction**: Resetting a task type correctly subtracts its metrics from totals and cleans up associated error patterns, giving it a fresh start
- **UI Reset Button**: Each skipped task type in the Learning tab now shows a "Reset" button with toast notification feedback
- **API Endpoint**: New `POST /api/cos/learning/reset/:taskType` endpoint for programmatic access
- **Test Coverage**: 9 new unit tests covering reset logic, metric subtraction, error pattern cleanup, and edge cases

### CoS Auto-Rehabilitation for Skipped Task Types
- **Automatic Retry of Fixed Tasks**: Task types that were auto-paused due to poor performance (<30% success rate after 5+ attempts) are now automatically given a fresh chance after a configurable grace period (default: 7 days)
- **Grace Period Configuration**: New `rehabilitationGracePeriodDays` config option allows tuning how long skipped tasks wait before being retried
- **Periodic Rehabilitation Check**: During task evaluation, CoS checks every ~100 evaluations (~2 hours) for task types eligible for rehabilitation
- **Learning Data Reset**: When a task type is rehabilitated, its historical learning data is reset, giving it a clean slate to prove the underlying issue was fixed
- **Status Visibility**: New `getSkippedTaskTypesWithStatus()` function provides detailed info about skipped tasks including days until rehabilitation eligibility

### CoS Prompt Improvement Recommendations
- **Error Pattern Analysis**: New learning system feature that analyzes error patterns for each task type and generates specific prompt improvement recommendations
- **Actionable Suggestions**: Recommendations include priority levels (high/medium/low/info), action types (major-revision, clarification, optimization, maintain), and specific improvement steps
- **Error-Specific Insights**: Generates insights based on error categories (usage-limit, rate-limit, context-length, tool-error) with implications for prompt design
- **Prompt Hints**: Provides concrete examples of how to improve prompts (e.g., "Add fallback model instruction" with example syntax)
- **Task Type-Specific Guidance**: General best practices based on task category (UI tasks get visual verification hints, security tasks get severity classification hints)
- **API Endpoints**: New `GET /api/cos/learning/recommendations` for all task types and `GET /api/cos/learning/recommendations/:taskType` for detailed analysis of specific types

### CoS Task Prompt Enhancement
- **AI-Powered Prompt Enhancement**: New "Enhance with AI" checkbox in the Add Task form that uses AI to expand brief task descriptions into comprehensive, detailed prompts
- **Actionable Prompts**: Enhanced prompts include specific steps, relevant context, success criteria, and edge cases to watch for
- **Prompt Stage Configuration**: Enhancement now uses the `cos-task-enhance` prompt stage for provider/model selection - configure via Prompt Manager instead of hardcoded defaults
- **Visual Feedback**: Loading spinner and "Enhancing..." state during prompt processing, with clear success/error toasts
- **API Endpoint**: New `POST /api/cos/tasks/enhance` endpoint for programmatic access to prompt enhancement

### Chief of Staff - Task File Attachments
- **File Upload Support**: Tasks now support attaching files for additional context or action requirements
- **Multiple File Types**: Supports documents (txt, md, json, csv, xml, yaml, pdf), images (png, jpg, gif, webp, svg), code files (js, ts, jsx, tsx, py, sh, sql, html, css), and archives (zip, tar, gz)
- **50MB File Limit**: Each attachment can be up to 50MB to accommodate larger documents
- **Visual Attachment Display**: Attached files show in task items with file name, size, and download/view links
- **Attachment Persistence**: Files stored in `data/cos/attachments/` with unique IDs to prevent naming conflicts
- **API Endpoints**: New `/api/attachments` CRUD endpoints for uploading, retrieving, and deleting attachments
- **Task Metadata Integration**: Attachments stored in task metadata and serialized properly in TASKS.md

### Web Shell Terminal
- **Full Terminal Emulator**: New `/shell` page provides a web-based terminal interface using xterm.js
- **Real Shell Access**: Uses node-pty for a genuine pseudo-terminal, supporting all shell features including command history, tab completion, and signal handling
- **WebSocket-Based I/O**: Real-time bidirectional communication via Socket.IO for responsive terminal interaction
- **Session Management**: Start, stop, and restart shell sessions with visual connection status indicator
- **Automatic Sizing**: Terminal automatically fits container and resizes when window dimensions change
- **Theme Integration**: Uses PortOS dark theme colors matching the rest of the application
- **Link Detection**: Clickable URLs in terminal output via xterm-addon-web-links

### File Uploads Page
- **Dedicated Upload Interface**: New `/uploads` page for general-purpose file storage at `data/uploads/`
- **Drag and Drop**: Drop zone with visual feedback for easy file uploads
- **100MB File Limit**: Larger limit than task attachments for general storage needs
- **File Preview**: Image thumbnails displayed inline, file icons for other types
- **Storage Stats**: Shows total file count and disk space used
- **Bulk Delete**: "Delete All" option to clear all uploaded files at once
- **Wide Format Support**: Accepts documents, images, audio, video, code files, archives, and config files
- **API Endpoints**: New `/api/uploads` CRUD endpoints with list, upload, download, delete, and delete-all operations

### NVIDIA Kimi K2.5 AI Provider
- **Free AI Provider**: Added NVIDIA-hosted Kimi K2.5 as a pre-configured AI provider option
- **Three Model Tiers**: Includes `moonshotai/kimi-k2-instruct` (light), `moonshotai/kimi-k2-5` (medium), and `moonshotai/kimi-k2-thinking` (heavy) models
- **OpenAI-Compatible API**: Uses NVIDIA's `https://integrate.api.nvidia.com/v1` endpoint with standard Bearer token authentication
- **256K Context Window**: Supports long documents with native multimodal capabilities (text, images, video, PDFs)
- **Setup**: Get a free NVIDIA API key at https://build.nvidia.com and add it to the provider configuration

### Chief of Staff - Task Blocked Reason
- **Blocker Capture**: When marking a task as blocked, a modal prompts for the reason (e.g., "Waiting for API access", "Needs design review")
- **Visual Blocker Display**: Blocked tasks show their blocker reason in a highlighted red box below the task description
- **Quick Block Action**: New "Mark as Blocked" button (ban icon) in task action buttons for pending/active tasks
- **Status Toggle**: Clicking a blocked task's status icon clears the blocked state and returns it to pending
- **Metadata Persistence**: Blocker reasons are stored in task metadata and serialized to TASKS.md as `- Blocker: <reason>`
- **Auto-Clear on Unblock**: Blocker metadata is automatically cleared when a task moves out of blocked status

### Brain Links - Quick URL Capture with GitHub Clone
- **Links Tab in Brain**: New "Links" tab in the Brain feature for quickly saving URLs for later reference
- **Quick-Add Form**: Paste any URL and it's automatically saved - GitHub repos are detected and tagged automatically
- **GitHub Auto-Clone**: When pasting a GitHub repository URL, the repo is automatically cloned to `data/repos/` for local reference
- **Clone Status Tracking**: Real-time clone progress display with pending, cloning, cloned, and failed states
- **Pull Updates**: One-click "Pull" button to fetch latest changes for cloned repositories
- **Open Folder**: One-click "Open" button to reveal cloned repositories in the system file manager (Finder on macOS, Explorer on Windows, xdg-open on Linux)
- **Link Types**: Links are categorized as github, article, documentation, tool, reference, or other with color-coded badges
- **Tag Support**: Add custom tags to organize and filter links
- **Filter Views**: Toggle between All, GitHub Repos, and Other Links views
- **Edit/Delete**: Full CRUD operations with inline editing for title, description, type, and tags
- **API Endpoints**: New `/api/brain/links` CRUD endpoints plus `/api/brain/links/:id/clone` and `/api/brain/links/:id/pull` for repo management
- **GitHub URL Parsing**: Supports HTTPS and SSH GitHub URL formats

### Digital Twin - Social Accounts
- **Social Account Management**: New "Accounts" tab in the Digital Twin page for managing your online presence - social media profiles, blogs, and developer accounts
- **Platform Support**: 14 pre-configured platforms (GitHub, Instagram, Facebook, LinkedIn, X/Twitter, Substack, Medium, YouTube, TikTok, Reddit, Bluesky, Mastodon, Threads) plus custom "Other" option
- **Content Ingestion Prep**: Each account tracks content types and has an ingestion toggle for future content downloading and style learning
- **Categorized Display**: Accounts grouped by category (developer, social, professional, writing, video, community) with color-coded platform icons
- **Bulk Import API**: `POST /api/digital-twin/social-accounts/bulk` endpoint for programmatic bulk account creation
- **Pre-Seeded Accounts**: User's GitHub (atomantic), Instagram (atomantic), Facebook (atomantic), LinkedIn (antic), X (antic), Substack (antic), and Medium (atomantic) accounts pre-configured

### Browser Management Page
- **Browser Page**: New `/browser` page for managing the persistent CDP/Playwright browser process (portos-browser)
- **Status Dashboard**: Real-time status showing connection state, CDP endpoint, open pages, uptime, CPU, memory, PID, and restart count
- **Process Controls**: Launch, stop, and restart the browser process via PM2 with visual feedback
- **CDP Page Listing**: View all open browser pages with titles, URLs, and types
- **Configuration Panel**: Edit CDP port, host, health port, headless mode, and auto-connect settings with persistence to `data/browser-config.json`
- **PM2 Logs Viewer**: View recent browser process logs inline
- **Browser Version Info**: Shows the Chromium version when connected
- **API Endpoints**: Full REST API at `/api/browser` with status, config, launch, stop, restart, health, process, pages, version, and logs endpoints
- **Navigation**: Added to sidebar with Globe icon between Dev Tools and Media

### Chief of Staff - Task Conflict Detection & Git Worktrees
- **Conflict Detection**: When the CoS kicks off a new agent, it now analyzes whether the work conflicts with existing active agents in the same workspace
- **Automatic Worktree Isolation**: If conflicts are detected (uncommitted changes, same-app targeting, keyword overlap in descriptions), the agent is spawned in an isolated git worktree instead of the shared workspace
- **Auto-Merge on Success**: When an agent completes successfully in a worktree, its branch is automatically merged back to the source branch
- **Orphaned Worktree Cleanup**: Worktrees from crashed or terminated agents are automatically cleaned up during orphan detection
- **Agent Prompt Context**: Agents working in worktrees receive instructions about their isolation context and branch
- **Three-Level Detection**: Detects conflicts via uncommitted changes (strongest signal), same-app targeting (medium), and keyword overlap analysis (heuristic)

### AI Provider Model Updates
- **Claude Opus 4.6**: Added `claude-opus-4-6` model to Claude Code CLI provider as the new default and heavy tier model
- **GPT-5.2**: Codex CLI provider uses `gpt-5.2` as default and heavy tier model (5.3 was not yet available)

### Chief of Staff - Cyberpunk 3D Avatar
- **Three.js 3D Avatar**: New "Cyberpunk (3D)" avatar style using Three.js, React Three Fiber, and Drei for a fully 3D holographic head
- **Wireframe Icosahedron**: Cyberpunk-aesthetic wireframe skull with inner distortion mesh, face visor, cybernetic side panels, and antenna
- **State-Reactive Effects**: Each agent state (sleeping, thinking, coding, investigating, reviewing, planning, ideating) triggers unique visual behaviors - distortion intensity, particle counts, orbital ring speeds, and eye glow levels
- **Orbital Data Rings**: Two concentric torus rings orbit the head at speeds that vary by agent state
- **Data Stream Particles**: 30 floating data fragments orbit the head in a holographic stream
- **Holographic Scan Lines**: Horizontal scan line sweeps across the avatar, intensifying during investigation state
- **Speaking Animation**: Jaw piece animates when the agent is speaking, with emissive glow on the mouth
- **Avatar Style Selector**: New "Cyberpunk (3D)" option in CoS Config tab alongside existing Digital (SVG) and Minimalist (ASCII) styles

## 🔧 Improvements

### Enhanced Agent Error Pattern Detection
- **25+ New Error Categories**: Added comprehensive error pattern matching for agent failures, dramatically reducing "unknown" error categorization
- **API & Auth Errors**: Improved detection for model-not-found, auth, rate-limit, usage-limit, server errors
- **Context & Token Errors**: New patterns for context-length exceeded, output-length exceeded
- **Tool & MCP Errors**: Detection for tool execution failures, MCP server errors, permission denied
- **Git & Repository Errors**: Patterns for merge conflicts, git command failures, no-changes-to-commit
- **Build & Test Errors**: Detection for npm/yarn/pnpm errors, test failures, lint errors, build/compilation failures
- **Process & System Errors**: Network errors, file-not-found, memory errors, timeouts, process killed, spawn errors
- **Browser Automation Errors**: Playwright/browser crash detection, UI element locator failures
- **Agent-Specific Errors**: Claude API errors, JSON parse errors, task rejected, content filtered
- **Learning System Integration**: Better error categorization enables the Learning tab to provide more actionable insights and recommendations

### CoS Task Form - Smart Model Selection
- **Hide Model Dropdown for Model-less Providers**: When selecting a provider with no configurable models (e.g., Gemini CLI), the model selection dropdown is now hidden instead of showing an empty/disabled dropdown - applies to both the Add Task form and inline task editing

### Prompt Manager UX
- **Alphabetical Sorting**: Stages and variables lists are now sorted alphabetically for easier navigation in large prompt collections

### Release Process
- **Rich Release Descriptions**: GitHub releases now support detailed, categorized changelogs
- **Flexible Workflow**: Developers can choose between detailed changelogs or auto-generated commit logs
- **Consistency**: Standardized release note format across all versions
- **Version Substitution**: Workflow automatically replaces version placeholders with actual release version
- **Git History Preservation**: Pattern files renamed using `git mv` to maintain full file history

### Developer Experience
- **Clear Guidelines**: Comprehensive documentation in `.changelog/README.md`
- **Easy Maintenance**: Simple process for creating and updating release notes
- **Tool Integration**: Instructions for using `gh` CLI to manage releases

## 🐛 Fixes

### Default App Setup on Fresh Install
- **Removed PortOS Autofixer as separate app**: The Autofixer is part of PortOS itself, not a standalone app - removed it from the sample apps.json
- **PortOS self-registers on fresh install**: New installs now include PortOS as a default app with correct process definitions (server, UI, CoS, autofixer, browser)
- **Dynamic repoPath resolution**: The setup script now replaces a `__PORTOS_ROOT__` placeholder with the actual install path so the PortOS app entry points to the real directory

### Media Page Debug Logs Cleanup
- **Removed Debug Console Logs**: Cleaned up 10 `console.log` statements from `client/src/pages/Media.jsx` that were left over from AudioContext debugging - improves production code quality

### CoS Agent Provider/Model Validation
- **Provider Override Support**: Tasks specifying a `provider` in metadata now correctly use that provider instead of always using the active provider
- **Model Compatibility Validation**: When spawning agents, models are now validated against the target provider's model list - prevents invalid combinations like using Claude models with the Codex CLI provider
- **Graceful Fallback**: Invalid model/provider combinations fall back to the appropriate tier model for the actual provider with a warning log

### CoS Learning-Based Model Selection
- **Adaptive Model Upgrades**: Model selection now consults historical task performance data - task types with <60% success rate are automatically upgraded to heavier models (Opus)
- **Smarter Resource Allocation**: CoS learns from past failures and allocates more capable models to struggling task types, improving overall success rates
- **Transparent Logging**: Model selection logs now include learning-based reasons (e.g., "learning-suggested - task type has 45% success rate")

### CoS Actionable Error Blocking
- **Block Instead of Retry**: When a task fails with an actionable error (model-not-found, auth error, usage limit), the task is now marked as `blocked` instead of `pending` - prevents endless retry loops where the same broken config keeps failing
- **Investigation Task Created**: Actionable failures still create investigation tasks with suggested fixes, but the original task stops retrying until the root cause is resolved
- **Blocked Metadata**: Blocked tasks include the error reason, category, and timestamp for easier diagnosis

### System Task Deletion
- **Task Type Detection**: Deleting system tasks (prefixed with `sys-`) now correctly passes `type=internal` to the API, fixing "Task not found" errors when deleting auto-generated investigation tasks

## 🗑️ Removed

### Dead Code Cleanup
- **Legacy Service Files**: Removed three unused `.old.js` files from `server/services/`:
  - `providers.old.js` - superseded by current `providers.js`
  - `promptService.old.js` - superseded by current `promptService.js`
  - `runner.old.js` - superseded by AI Toolkit's runner service
- These files were unreferenced throughout the codebase and represented ~1,220 lines of dead code

### DRY Refactoring: Shared File Utilities
- **New `server/lib/fileUtils.js`**: Created shared utility module for directory and path operations
  - `ensureDir(path)` - Ensures directory exists, creating recursively if needed
  - `ensureDirs(paths)` - Ensures multiple directories exist
  - `dataPath(...segments)` - Get path relative to data directory
  - `rootPath(...segments)` - Get path relative to project root
  - `formatDuration(ms)` - Formats milliseconds as human-readable duration (e.g., "5m", "2h 30m", "3d 5h")
  - `PATHS` - Centralized path constants (data, cos, brain, digitalTwin, runs, memory, agents, scripts, reports)
- **Reduced Code Duplication**: Refactored 4 services (`apps.js`, `history.js`, `usage.js`, `notifications.js`) to use shared utility, eliminating identical `ensureDir` implementations and reducing boilerplate
- **formatDuration Consolidation**: Extracted duplicate `formatDuration` implementations from `cos.js` and `weeklyDigest.js` into shared utility
- **Pattern for Future Refactoring**: Establishes pattern for remaining 7+ services with similar duplicated directory logic

### DRY Refactoring: Client Formatters
- **New `client/src/utils/formatters.js` additions**:
  - `getAppName(appId, apps, fallback)` - Lookup app name from ID with customizable fallback
- **Reduced Component Duplication**: Extracted duplicate `getAppName` implementations from `MemoryTab.jsx` and `MemoryEditModal.jsx` into shared formatter utility

### Chief of Staff - Navigation Improvements
- **Sidebar Sub-Navigation**: Chief of Staff sub-pages (Tasks, Agents, Scripts, Schedule, Digest, Learning, Memory, Health, Config) now appear as children in the sidebar navigation under Chief of Staff, making all tabs accessible without scrolling the page
- **Collapsible Agent Panel**: On mobile, the COS Agent avatar panel is now collapsible with a tap toggle header showing state and running status
- **Touch-Friendly Tabs**: Tab navigation buttons have 40px minimum height for better mobile accessibility
- **Scrollable Tab Bar**: Tab bar uses horizontal scroll with `shrink-0` to prevent tab overflow issues
- **Badge Support on Collapsible Sections**: Notification badges now display correctly on collapsible nav sections (both collapsed and expanded states)

### Chief of Staff - Learning Insights Integration
- **Periodic Learning Recommendations**: CoS now surfaces actionable learning insights every 20 evaluations (~20 minutes) in the log stream
- **Recommendation Types**: Logs optimization suggestions, warnings about low-success task types, and action items for recurring errors
- **Event Emission**: New `learning:recommendations` event emitted with recommendations and insights data for UI consumption
- **Best/Worst Performers**: Includes top-performing and struggling task types with success rates for informed decision-making

## 🐛 Bug Fixes

### Task Enhancer Directory Not Found Error
- **Fixed ENOENT error in task prompt enhancement**: The `taskEnhancer.js` was creating its own runId (`enhance-xxx`) and passing it to `createRun`, but the AI Toolkit's `createRun` ignores passed IDs and generates UUIDs. When `executeApiRun` was then called with the original `enhance-xxx` ID, the directory didn't exist.
- **Solution**: Now uses the `runId` returned from `createRun({ ... })` instead of generating a separate ID

### Fixed Multi-Line Context Loss in Agent Resume
- **Root Cause**: When resuming agent tasks, the "Additional Instructions" and "Previous Agent Context" provided in the resume form were truncated to just the first line (e.g., only "## Additional Instructions" was saved)
- **The Fix**: Task metadata values containing newlines are now properly escaped (`\n` → `\\n`) when saving to the TASKS.md file and unescaped when parsing back
- **Impact**: Resume context now correctly passes full multi-line instructions to agents, including previous agent output, error context, and user refinements
- **Test Coverage**: Added new round-trip test to verify multi-line metadata preservation through save/parse cycle

### Brain Memory Delete Handler
- **Fixed Delete Success Detection**: The MemoryTab delete handler was checking `result !== null` to determine success, but successful API responses might not return a value. Changed to track failures explicitly with a boolean flag, fixing false-positive "Deleted" toasts when delete operations failed

### Memory Approval Mobile Responsiveness
- **Touch-Friendly Action Buttons**: Approve, reject, and edit buttons in the pending approval section now have 44px minimum touch targets for accessibility on mobile
- **Responsive Card Layout**: Memory cards switch from horizontal to stacked layout on small screens, preventing cramped text and buttons
- **Mobile-Optimized Modal**: Memory edit modal includes proper mobile padding, responsive form fields, and stacked layouts for category/app dropdowns
- **View Toggle Buttons**: List/timeline/graph view buttons now have 40px minimum height for easier mobile tapping
- **Search Controls**: Search input and clear button sized appropriately for touch interaction
- **Type Filter Pills**: Memory type filter buttons increased to 36px height for better mobile accessibility

### Task Enhancement Empty Response Handling
- **Fixed "Description is required" Error**: When task enhancement returned an empty response from the AI provider, the client would proceed to submit the task with an empty description, triggering a validation error. Now both client and server validate that the enhanced description is non-empty before proceeding
- **Graceful Fallback on Enhancement Failure**: Task enhancement failures (empty result or AI error) now fall back to using the original task description instead of aborting - shows a warning toast and continues adding the task

### CLI Provider Support for AI Services
- **Fixed "API error: 0" Failures**: Services like `agentPersonalityGenerator.js` and `taskEnhancer.js` were using `executeApiRun()` for all providers, but CLI providers (claude-code, codex) have no API endpoint, causing immediate failures with status 0
- **Provider Type Detection**: Added `provider.type` check to determine whether to use `executeApiRun()` (for API providers) or `executeCliRun()` (for CLI providers)
- **Impact**: Agent personality generation and task prompt enhancement now work correctly with CLI-based AI providers like Claude Code CLI

### Reasoning Model Support (AI Toolkit)
- **Fixed Empty Responses from Reasoning Models**: LM Studio 0.4.0+ and reasoning models like DeepSeek-R1 and gpt-oss-20b use a separate `reasoning` field for chain-of-thought, leaving `content` empty until reasoning completes. The AI toolkit now captures both fields.
- **Automatic Fallback**: If a model returns empty `content` but has `reasoning`, the toolkit falls back to using the reasoning output rather than returning empty results
- **Metadata Tracking**: Run metadata now includes `hadReasoning` and `usedReasoningAsFallback` flags for debugging
- **Impact**: Task enhancement and other AI services now work correctly with reasoning-based local models


### Setup Script pm2 Command Not Found
- **Fixed post-setup pm2 availability**: After running `./setup.sh`, users would get "zsh: command not found: pm2" because pm2 is installed locally in `server/node_modules`, not globally
- **Added npm scripts**: New `npm run pm2:start`, `npm run pm2:stop`, and `npm run pm2:logs` scripts that use `npx` to run the local pm2
- **Updated documentation**: Setup script output and CLAUDE.md now reference the npm scripts instead of direct pm2 commands

### Critical: Fixed "Unexpected end of JSON input" Errors
- **Safe JSON Parsing**: Added comprehensive JSON parsing utilities to `server/lib/fileUtils.js`:
  - `isValidJSON(str)` - Pre-validates JSON structure before parsing (supports both objects and arrays)
  - `safeJSONParse(str, defaultValue)` - Safely parses JSON with fallback on empty/corrupted content
  - `readJSONFile(filePath, defaultValue)` - Combines file reading with safe JSON parsing
  - `safeJSONLParse(content)` - Safely parses JSONL files, skipping malformed lines
  - `readJSONLFile(filePath)` - Reads and parses JSONL files safely
- **Fixed 15+ Services**: Applied safe JSON parsing to all file-reading operations across:
  - `history.js`, `memory.js`, `notifications.js`, `usage.js`
  - `weeklyDigest.js`, `taskLearning.js`, `appActivity.js`, `taskSchedule.js`
  - `brainStorage.js`, `subAgentSpawner.js`, `digital-twin.js`, `streamingDetect.js`
  - `routes/scaffold.js`, `routes/detect.js`
- **Fixed BM25 Index & Memory Classifier**: Added pre-validation guards to `memoryBM25.js` and `memoryClassifier.js` that were using raw `JSON.parse()` without empty/malformed content checks - now gracefully handle empty files with sensible defaults
- **Root Cause**: Empty or corrupted JSON files would cause `JSON.parse()` to throw "Unexpected end of JSON input", crashing services. Now all JSON file reads use safe parsing with sensible defaults

### PM2 jlist ANSI Code Parsing
- **Fixed JSON parse errors on startup**: When PM2 has warnings (like "In-memory PM2 is out-of-date"), it outputs ANSI color codes (`[31m`, `[1m`) before the JSON array. The code was matching the `[` in `[31m` instead of the actual JSON array.
- **Robust JSON extraction**: Updated `safeJSONParse` and all `pm2 jlist` callers to look for `[{` (array with objects) or `[]` (not followed by digits) instead of just `[`
- **Affected files**: `cos.js`, `pm2.js`, `fileUtils.js`

### Memory Embeddings Provider Config
- **Fixed hardcoded localhost URL**: The memory embeddings service was hardcoded to `localhost:1234` even when LM Studio is configured as a remote provider
- **Dynamic endpoint lookup**: Now reads the LM Studio provider endpoint from `providers.json` on initialization
- **Better error handling**: Added try/catch to `checkAvailability()` to prevent unhandled promise rejections
- **UI improvements**: Memory tab now shows the actual endpoint being used and clearer error messages

### Clear Completed Agents Route
- **Fixed "Agent not found" error**: Clicking "Clear Completed" on the agents page was returning 404 because the `/agents/completed` route came after `/agents/:id`, causing Express to match "completed" as an agent ID
- **Route order fix**: Moved the specific `/agents/completed` route before the parameterized `/agents/:id` route

### CoS Self-Improvement and App Improvement Toggles
- **New config options**: Added `selfImprovementEnabled` and `appImprovementEnabled` toggles to CoS config
- **UI controls**: Both toggles now visible in the CoS Config tab with tooltips explaining their purpose
- **Granular control**: Users can now disable PortOS self-improvement tasks while keeping app improvement tasks active (or vice versa)

### Tasks Page - Always-Visible Add Task Form
- **Form Always Shown**: The Add Task form on the Tasks page is now always visible by default, removing the need to click "+ Add Task" first
- **Streamlined UI**: Removed the "+ Add Task" button and Cancel button since the form is persistently displayed
- **Faster Task Entry**: Users can immediately start typing task descriptions without an extra click

### Chief of Staff - Autonomy Level Presets
- **One-Click Autonomy Modes**: New Autonomy Level control at the top of the Config tab with 4 preset modes (Standby, Assistant, Manager, YOLO)
- **Visual Level Buttons**: Color-coded buttons (green/blue/yellow/red) with ring highlight on active level
- **Level Descriptions**: Each level shows a description explaining its behavior (e.g., "Only processes user-defined tasks from TASKS.md")
- **Parameter Preview**: Hovering over levels shows all 8 controlled parameters, with yellow highlights for values that would change
- **Custom Detection**: "Custom" badge appears when parameters don't match any preset exactly
- **Controlled Parameters**: Each level configures evaluationIntervalMs, maxConcurrentAgents, selfImprovementEnabled, appImprovementEnabled, proactiveMode, idleReviewEnabled, immediateExecution, and comprehensiveAppImprovement
- **New Config Rows**: Added Proactive Mode, Idle Review, Immediate Execution, and Comprehensive App Analysis toggles to Config tab for fine-grained control

### Chief of Staff - Task Success Rate Indicator
- **Visual Success Rate Badge**: Pending tasks now display a color-coded success rate percentage based on historical task completion data
- **Color-Coded Feedback**: Green (≥70% success), yellow (40-69%), and red (<40%) indicators help users quickly assess task type reliability
- **Learning System Visibility**: Makes CoS learning data visible at the task level, showing how well similar tasks have performed historically
- **Informative Tooltips**: Hover reveals "high/moderate/low success rate" with sample size (e.g., "67% of 12 similar tasks succeeded")

### Chief of Staff - App Archive/Unarchive
- **Archive Apps**: Apps can now be archived to exclude them from COS scheduled tasks (improvement, review, security audit, etc.)
- **Unarchive Apps**: Archived apps can be unarchived to re-include them in COS scheduled tasks
- **Visual Indicators**: Archived apps display an "Archived" badge with dimmed styling in the app list
- **Archive Toggle Button**: New archive/unarchive button appears next to Edit/Delete for each app
- **Filtered Views**: Toggle between active apps and archived apps view using the header button
- **Preserved Data**: Archiving is a soft-delete - all app data and activity history is preserved for unarchiving

### Chief of Staff - Run Task on Specific App
- **App-Specific Task Trigger**: App improvement tasks can now be run on a specific app instead of the next eligible app in rotation
- **App Selector Dropdown**: Clicking "Run on App" for any app improvement task type shows a dropdown to select the target app
- **Touch-Friendly Design**: App selector buttons have 40px minimum height for mobile accessibility
- **Active Apps Only**: Dropdown only shows non-archived apps to prevent running tasks on excluded apps

### Web Shell PTY Compatibility Fix
- **Node.js 25 Support**: Upgraded node-pty from 1.1.0 to 1.2.0-beta.10 to fix `posix_spawnp failed` error on Node.js 25.x
- **Error Handling**: Added error handling to shell session creation to catch PTY spawn failures and report them to the client instead of silently failing

### On-Demand Task Processing
- **Fixed Priority 0 processing**: On-demand tasks (triggered via "Run Now" in Schedule tab) were only checked during idle review (Priority 4), meaning they wouldn't run if any other tasks existed. Now on-demand requests are processed at Priority 0, before all other task types.
- **Fixed null appId handling**: When triggering an app improvement task without specifying an app, the system now correctly selects the next eligible app instead of silently ignoring the request
- **Bypass cooldown for on-demand**: On-demand app improvement tasks now bypass the app cooldown check, allowing immediate execution even if the app was recently reviewed

### PM2 Yarn Berry Compatibility
- **Fixed PM2 module resolution conflict**: When another app on the system uses Yarn Berry's `yarn pm2`, PortOS would crash with "Cannot find module ProcessContainerFork.js" errors due to PnP zip cache paths being inherited by the PM2 daemon
- **Direct PM2 dependency**: Added `pm2` as a direct devDependency instead of relying on `npx`
- **Isolated execution**: PM2 scripts now use `./node_modules/.bin/pm2` to ensure PortOS always uses its own npm-based PM2 installation regardless of system-wide Yarn Berry configuration

### CoS Runner Startup Log Spam
- **Batch orphaned agent events**: When the CoS runner cleans up orphaned agents on startup, it now emits a single `agents:orphaned` batch event instead of hundreds of individual `agent:completed` events
- **Cleaner logs**: Startup logs no longer flood with "📡 Emitted agent:completed" for each orphaned agent - now shows a single summary line like "📡 Emitted agents:orphaned (374 agents)"

### CoS Non-Actionable Error Retry Loop
- **Retry limit for non-actionable failures**: Tasks that fail with transient errors (rate-limit, server-error, network-error, unknown) now track a `failureCount` in metadata and are blocked after 3 consecutive failures instead of retrying endlessly every evaluation cycle
- **Investigation task on max retries**: When a task exceeds the retry limit, an investigation task is created with the accumulated error context, just like actionable errors
- **Consistent failure handling**: Both runner mode and direct spawn mode use the same `resolveFailedTaskUpdate()` function, ensuring identical retry/block behavior regardless of spawn mode
- **DRY refactor**: Consolidated duplicate task-status-update and investigation-task-creation logic from both completion paths into a single shared function

### CoS User-Killed Tasks No Longer Re-Queued
- **Block instead of re-queue**: When a user terminates or force-kills a running agent, the associated task is now marked as `blocked` (with reason "Terminated by user") instead of being set back to `pending` — prevents killed tasks from automatically restarting on the next evaluation cycle
- **Both spawn modes fixed**: Applies to both runner mode and direct spawn mode agent termination paths
- **Close handler awareness**: Direct mode agents track user-termination state so the process `close` event handler skips retry logic for intentionally killed agents

### Gemini CLI Model Argument Fix
- **No --model flag for Gemini CLI**: The `buildCliSpawnConfig` function now has a dedicated handler for `gemini-cli` that uses the provider's own command and args without appending Claude-specific flags (`--dangerously-skip-permissions`, `--print`, `--model`)
- **CoS Runner allowlist**: Added `gemini` to the allowed commands list in the CoS Runner, enabling Gemini CLI agents to spawn via the runner

### Gemini CLI Model Fallback Fix
- **No more Claude model fallback for non-Claude providers**: `getModelForLevel()` was returning hardcoded `claude-3-5-sonnet-20241022` when a provider had no `defaultModel` or `heavyModel` configured (e.g., gemini-cli with `defaultModel: null`). Now returns `null` so providers without model configuration don't get queued with an irrelevant Claude model identifier

### Gemini CLI Auto-Approval and Model Support
- **YOLO mode for autonomous agents**: Gemini CLI agents now spawn with `--yolo` flag for auto-approval (equivalent to Claude's `--dangerously-skip-permissions`), preventing agents from hanging on permission prompts
- **Model passthrough**: Gemini CLI now passes `--model` flag when a model is configured, enabling provider-level model selection

### Periodic Zombie Agent Cleanup
- **Runtime orphan detection**: `cleanupOrphanedAgents()` now runs every health check cycle (15 min) instead of only at daemon startup, catching agents whose process died mid-run without proper state cleanup

### LM Studio API Modernization & Embedding Auto-Load
- **Auto-load embedding models**: When an embedding request encounters "No models loaded", the system now discovers downloaded embedding models via LM Studio's native REST API (`GET /api/v0/models`) and auto-loads one via `POST /api/v1/models/load`
- **Dynamic model discovery**: Embedding model ID is no longer hardcoded — the system detects the actual loaded/available model and uses its correct identifier
- **Native REST API for model management**: `lmStudioManager.js` now uses LM Studio's native `POST /api/v1/models/load` and `POST /api/v1/models/unload` endpoints instead of workarounds (test completions for loading, stub responses for unloading)
- **Rich model metadata**: `getLoadedModels()` and `getAvailableModels()` now return model type, architecture, quantization, state, and context length via the `/api/v0/models` endpoint
- **Model download API**: `downloadModel()` now uses LM Studio's `POST /api/v1/models/download` endpoint instead of returning a stub error

### CoS Learning Task Type Classification
- **Fixed "unknown" task type pollution**: `extractTaskType()` was returning "unknown" for all internal/system tasks that didn't have specific metadata markers, causing 741+ misclassified entries that skewed learning insights and triggered false "investigate root cause" recommendations
- **Task metadata forwarding**: Agent registration now forwards key task metadata fields (`analysisType`, `reviewType`, `app`, `selfImprovementType`, `missionName`, `missionId`) so the learning system can properly classify agents after completion
- **New task type categories**: Added classification for `internal-task`, `mission:*`, `app-improve:*`, and `app-improvement` task types instead of falling through to "unknown"
- **Broader description matching**: Self-improvement regex now captures hyphenated types (e.g., `code-quality`), and `[auto] investigate` is correctly classified as `auto-fix`
- **Cleaned polluted data**: Reset 743 garbage "unknown" entries and 705 associated "unknown" error pattern references from `learning.json`, restoring accurate success rates and recommendations

## 📦 Installation

```bash
git clone https://github.com/atomantic/PortOS.git
cd PortOS
npm run install:all
npm run pm2:start
```

## 🔗 Full Changelog

**Full Diff**: https://github.com/atomantic/PortOS/compare/v0.9.9...v0.10.29
