Skip to content
CAI
Software that uses CAICheck a score

johnbean393/Sidekick

50.1

Adequate · 30 September 2026

42.2k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Sidekick is a macOS application that provides a local-first AI assistant interface, supporting both local inference via GGUF models and connections to remote providers. It enables users to manage custom 'Experts' with specific knowledge bases and capabilities, including web search, system tool execution, and Graph RAG indexing. The system facilitates complex agentic workflows like 'Deep Research' and offers a Canvas for editing AI-generated content, alongside features for conversation management, image generation, and detailed UI customization.

How it got here

2024 — SwiftData migration and Deep Research launch

37 changes.

This period focused on migrating the application's data persistence layer from JSON to SwiftData and restructuring the inference engine to support Deep Research capabilities. It also introduced a comprehensive new UI, including a setup flow, expert management, and a redesigned chat interface with advanced rendering and export features.

2025–2026 — Agentic capabilities and data modernization

23 changes.

This period focused on transforming Sidekick into an agentic assistant by introducing deep research workflows, structured function calling, and Graph RAG knowledge retrieval. The team also modernized the underlying architecture by migrating persistence to SwiftData and expanding model management with Hugging Face integration and local inference configuration.

Features

Add email and website resources to experts

Users can now add Apple Mail.app email addresses and website URLs as resources for their experts. The new EmailSelectionView handles permission requests and scans local Mail data to suggest email addresses, while the WebsiteSelectionView allows users to input and validate URLs. These additions are integrated into the ResourceSectionView, which now presents options to add files, folders, websites, or emails, and manages the corresponding selection sheets.

Sidekick/Views/Expert/Resource · high confidence

Added Canvas Snapshot data model for storing text and site code

Introduced the Snapshot struct within the Canvas feature to persist user-generated content. This model supports two distinct types: plain text and website snapshots. For website snapshots, it captures HTML, CSS, and JavaScript code, providing functionality to save these assets to the local cache directory and export them as a complete site package. This change establishes the underlying data structure required for the new Canvas writing and site-completion capabilities.

Sidekick/Types/Conversation/Canvas · high confidence

Added DuckDuckGo search provider and Tavily-based web scraping

Users can now search the web using DuckDuckGo as a new search provider, in addition to existing options. The web scraping functionality has been updated to prioritize Tavily Extract when a Tavily API key is configured, falling back to the local ExtractKit library if Tavily is unavailable or fails. This change introduces new utility classes for DuckDuckGo search and Tavily-integrated scraping within the Sidekick's web utilities.

Sidekick/Logic/Utilities/Web · high confidence

Added HTML conversation export template and MCP configuration example

The Sidekick now includes a new HTML template for exporting conversations as standalone webpages, featuring support for syntax highlighting, Markdown rendering, and MathJax for mathematical expressions, along with a responsive design that adapts to system light and dark modes. Additionally, an example configuration file for Model Context Protocol (MCP) servers has been added, demonstrating how to set up connections for filesystem access, web fetching, and Brave Search.

Sidekick/Resources · high confidence

Added UI controls for sources and stopping generation

New SwiftUI view components have been introduced to the message options area: a SourcesButton that toggles the visibility of source references via a book icon, and a StopGenerationButton that allows users to halt ongoing AI responses using a stop-circle icon.

Sidekick/Views/Chat/Conversation/Messages/Options · high confidence

Added script to configure Xcode development team

A new \setup-team.sh\ script has been added to the \scripts\ directory. This utility allows users to automatically update the \DEVELOPMENT\_TEAM\ identifier in the \Sidekick.xcodeproj/project.pbxproj\ file by passing the team ID as an argument, simplifying the initial project setup process.

scripts · high confidence

Automatic detection of text vs. image generation intent

The router now uses a CoreML-based classifier to analyze user prompts and determine whether the expected output is text or an image. If the classifier is confident, the system automatically selects the appropriate generation mode; if the scores are similar or the prompt is too short, the user is prompted to choose between text and image responses.

Sidekick/Logic/Inference/Router · high confidence

Conversation export and refined scroll behavior

Users can now export chat conversations as text, HTML, or PNG files via a new share menu in the message view. Additionally, the chat interface features improved scroll handling that preserves the user's position when new messages are added or previews are toggled, preventing unwanted auto-scrolling during active interaction.

Sidekick/Views/Chat/Conversation/Messages · high confidence

Deep Research progress UI and coordinated inference shutdown

Sidekick now displays a visual progress chain for Deep Research tasks, showing completed, current, and pending steps along with a timer and percentage. The app also ensures that background inference servers (llama-server) are reliably terminated on quit or crash via a new watchdog process and coordinated shutdown logic in the app delegate, preventing orphaned processes.

Sidekick · high confidence

Expert management and web search configuration

Users can now create, edit, and delete custom Experts via a new management interface, with each Expert featuring a customizable name, icon, and color. The Expert editor includes a toggle to enable web search capabilities for specific Experts, allowing them to search the web before answering when the feature is configured in settings. Additionally, a toolbar menu allows users to quickly switch between available Experts using buttons or keyboard shortcuts.

Sidekick/Views/Expert · high confidence

Introduce Canvas for editing and exporting conversation snapshots

Users can now open a Canvas view within a conversation to interact with AI-generated content snapshots. This view supports two snapshot types: text and site. For text snapshots, a code editor allows inline editing with syntax highlighting, while site snapshots are rendered in a WebView. The Canvas includes a version selector to switch between different snapshot versions, and provides options to copy content (with or without formatting for text; HTML/CSS/JS for sites) or export snapshots to local files (e.g., Markdown for text, HTML/CSS/JS for sites).

Sidekick/Views/Chat/Conversation/Canvas · high confidence

Introduce GraphRAG knowledge graph utilities

Added new logic utilities for GraphRAG, including an entity extractor that uses an LLM to pull entities and relationships from text, a community detector that identifies hierarchical groups using connected components, a graph retriever that enhances search results with graph context and community summaries, and a SQLite-based graph database for persisting entities, relationships, and communities.

Sidekick/Logic/Utilities/GraphRAG · high confidence

Introduce main application shell with setup and expert management flows

The application now uses a new ContentView as its primary interface, which conditionally displays the main conversation manager or a setup sheet based on the app's state. This view also introduces a modal sheet for managing experts, allowing users to configure their AI assistants directly from the main screen.

Sidekick/Views · high confidence

Introduces GGUF metadata parsing and memory-aware context sizing for local models

The app now reads GGUF metadata directly to determine a model's architecture and trained context length, and uses a bundled \gguf-parser\ binary to estimate the largest context size that fits in unified memory before loading. This allows the load-config sheet to present a safe, memory-aware context ceiling, preventing out-of-memory crashes and improving startup reliability for local inference.

Sidekick/Logic/Inference/llama.cpp · high confidence

Introduces structured function calling with OpenAI compatibility and permission controls

This change adds the core infrastructure for tool/function calling within the conversation type, introducing a \ToolRegistry\ to manage available functions and a \Function\ protocol that supports typed parameters and results. The implementation maps these functions to the OpenAI-compatible \OpenAIFunction\ schema, enabling integration with LLMs that support tool use. It also introduces a permission system where functions are categorized by clearance level (regular, sensitive, dangerous), requiring user confirmation or device authentication for sensitive operations, and includes a \FunctionCallRecord\ to track execution status and results.

Sidekick/Types/Conversation/Functions · high confidence

Introduction of Deep Research agent with multi-step workflow

Users can now initiate a 'Deep Research' mode that executes a structured, multi-step agentic loop. This new capability involves checking for information sufficiency, extracting and splitting the prompt into sections, conducting research for each section, drafting a report, and generating diagrams. The agent provides real-time progress visualization and handles clarifying questions if initial context is insufficient, ultimately returning a finalized research report.

Sidekick/Types/Agent · high confidence

Introduction of Graph RAG and Knowledge Graph data models

This change introduces the underlying data structures for Graph RAG, adding new types for Knowledge Graph entities (GraphEntity), relationships (GraphRelationship), and hierarchical communities (Community). It also updates the Expert and Resources models to include a useGraphRAG flag and graph indexing status, enabling experts to leverage graph-based retrieval alongside standard similarity search.

Sidekick/Types/Expert · high confidence

Introduction of contextual onboarding tips

Users will now see contextual tips that guide them through key features such as creating experts, adding files, viewing references, using web search, leveraging functions, and selecting popular providers. These tips are triggered by specific user actions or states, such as having a lengthy task in progress or viewing a reference, to help reduce the learning curve and improve feature discovery.

Sidekick/Logic/Tips · high confidence

New AppKit extension utilities for accessibility, text processing, and window management

This update introduces a suite of new helper extensions in the AppKit layer to support the Inline Writing Assistant and related features. It adds accessibility utilities to accurately detect caret positions in text fields, robust Markdown-to-rich-text conversion (handling links, images, headings, and code blocks) for clipboard operations, and window positioning logic for overlay panels. It also includes async wrappers for system services like contacts and local authentication, and key-code definitions for input handling.

Sidekick/Extensions/AppKit · high confidence

New Lengthy Tasks notification view and toolbar button

Users can now monitor long-running background operations via a new Lengthy Tasks view, accessible through a bell icon in the toolbar or via the Command+Shift+T keyboard shortcut. The interface displays a list of active tasks with their names and progress indicators, and shows a 'No tasks in progress' message when idle. A popover tip is also integrated to guide users on using this new notification feature.

Sidekick/Views/LengthyTasks · high confidence

New Settings UI for General, Inference, and Retrieval configurations

Sidekick now features a dedicated Settings window organized into three tabs: General, Inference, and Retrieval. Users can configure launch behavior, customize their username, adjust chat shortcuts (e.g., Command+Return), and toggle sound effects in the General tab. The Inference tab allows selection of local and worker models, enables speculative decoding for improved speed, and provides a system prompt editor. The Retrieval tab introduces memory controls, web search provider selection (DuckDuckGo, Tavily, Google), and GraphRAG settings, giving users granular control over how Sidekick retrieves and processes information.

Sidekick/Views/Settings · high confidence

New UI extension utilities and GitHub-style markdown theming

This update introduces several new SwiftUI view extensions in the Sidekick UI layer. It adds a GitHub-style markdown theme for consistent rendering of documentation and chat content, along with helper methods to export conversations as PNG images. Additionally, it provides platform-specific view builders for macOS Sonoma and Sequoia, a glow effect modifier, and logic to apply dynamic window background materials.

Sidekick/Extensions/UI · high confidence

New UI styling for buttons, chat fields, and menus

This change introduces three new SwiftUI view styles to the Sidekick interface: CapsuleButtonStyle, which applies a rounded-rectangle appearance with hover effects; ChatFieldStyle and ChatButtonStyle, which define the visual presentation of the chat input area and its associated buttons, including support for attachments and dictation indicators; and CircleMenuStyle, which formats menus with a specific button-like aesthetic. These styles provide a consistent visual language for interactive elements within the application.

Sidekick/Views/Styles · high confidence

New chat screenshot export and context compression utilities

Users can now export chat conversations as PNG images or PDF documents, with options to capture the entire chat, a single turn, or an individual message bubble. The export pipeline handles HTML generation, offscreen rendering via WebKit, and file saving with progress feedback. Additionally, a new context compression utility automatically summarizes lengthy tool call results to stay within model context limits, improving reliability during long or complex agent loops.

Sidekick/Logic/Utilities · high confidence

New data models and type definitions for Sidekick features

This change introduces several new Swift types in the Sidekick/Types directory to support upcoming and existing features. It adds EvaluationDetails and Chunk structs for displaying analysis results with specific highlighting states, and InferenceRecord for tracking model usage metrics like token counts and duration. Additionally, it defines IntroductionPage content for the onboarding flow, LogLevel and OSLogLevel enums for controlling application logging, and a Notifications enum for internal app events. The update also includes a Favicon struct for displaying website icons and a comprehensive ServerArgument model that defines default and common arguments (such as top-k, top-p, and cache types) for configuring the local llama-server instance.

Sidekick/Types · high confidence

New data models for conversation, memory, and resources

This change introduces the core data types for the Sidekick conversation feature. The Conversation model manages message history, expert selection, and supports forking conversations. A new Memory type enables storing and retrieving conversation context using similarity search. QuickPrompt provides predefined user prompts, SearchState defines search modes including Deep Research, and TemporaryResource handles file scanning and text extraction for attached resources.

Sidekick/Types/Conversation · high confidence

New default functions for calendar, reminders, contacts, and system interaction

This update introduces a comprehensive suite of new default functions that allow the AI to interact directly with macOS system services and user data. Users can now manage their schedule with \get\_events\ and \add\_event\ (Calendar), track tasks with \get\_reminders\ and \add\_reminder\ (Reminders), and retrieve personal information via \fetch\_contacts\. System interaction capabilities include \run\_command\ for executing shell commands (with automatic Homebrew PATH support), \list\_directory\ and \extract\_file\_text\ for file system access, and input functions like \get\_confirmation\, \get\_user\_selection\, and \get\_text\_input\ for interactive dialogs. Additionally, \create\_todo\_list\, \add\_todo\_item\, and \finish\_todo\_item\ provide persistent to-do list management within conversations, while \draft\_email\ and \get\_website\_content\ enhance web and communication tasks.

Sidekick/Types/Conversation/Functions/Default Functions · high confidence

New input field controls and UI components

The chat input area now features a redesigned toolbar with toggle buttons for Reasoning, Web Search, and Functions, alongside a new button for adding file attachments. These controls are built on new reusable SwiftUI components (CapsuleButton, CapsuleMenuButton, CapsuleChecklistMenuButton) and a custom multiline text editor that supports image drops and improved cursor handling.

Sidekick/Views/Chat/Conversation/Controls/Input Field · high confidence

New macOS menu commands and RAG indexing service

This change introduces new macOS menu commands for managing conversations, experts, debugging, and help, alongside a new service for RAG indexing. Users can now create new conversations via the standard 'New File' command replacement, select experts using keyboard shortcuts (Cmd+1 through Cmd+0), and access a Debug menu for managing persistence, settings, and conversations. A Help command is added to open documentation, along with options to report issues and show the onboarding wizard. Additionally, a new \RAGIndexingService\ handles the heavy lifting of resource indexing and Graph-RAG building, providing progress updates and managing the indexing state for experts.

Sidekick/Logic/Commands · high confidence

New model library with Hugging Face integration and capability badges

Users can now browse and download models directly from Hugging Face via a new Model Explorer view. This feature displays model families and individual models, showing key details such as parameter count, MMLU and intelligence benchmark scores, and specific capabilities (e.g., coding, math, reasoning, image input) via color-coded badges. The explorer includes a fallback mirror (hf-mirror.com) if the primary Hugging Face URL is unreachable, and allows users to initiate downloads with hardware requirement warnings.

Sidekick/Views/Model · high confidence

New model management and configuration UI in Settings

The Settings view now includes a dedicated Model section with a list of local models, allowing users to add new \.gguf\ files, download models, and delete existing ones. A new configuration sheet lets users set context length and advanced sampling parameters (temperature, top\_p, etc.) based on memory estimates. The interface also supports selecting remote models via a dropdown with popular provider endpoints, configuring server endpoints and API keys, and managing custom model names.

Sidekick/Views/Settings/Model · high confidence

New model type definitions and provider registry

The application now includes structured type definitions for managing AI models and providers. This introduces a registry of popular providers (including Anthropic, OpenAI, OpenRouter, MiniMax, xAI, and others) with their respective API endpoints, a \KnownModel\ structure for identifying and matching models via OpenRouter data, and a \ModelArchitecture\ enum that detects local GGUF models (such as Qwen3, Gemma 3/4, and gpt-oss) and applies publisher-recommended sampling parameters. These changes provide the foundational data structures for model selection and local inference configuration.

Sidekick/Types/Model · high confidence

New native Markdown renderer for chat messages and screenshots

Sidekick now uses a dedicated WKWebView-based renderer for displaying chat messages and generating screenshots, replacing the previous approach. This new renderer supports incremental streaming updates for faster perceived performance during AI responses, while also providing a unified, cohesive layout for final message rendering. It includes native-style styling for both light and dark modes, syntax highlighting for code blocks via Highlight.js, and mathematical formula rendering via KaTeX. The screenshot renderer specifically produces a static, high-fidelity snapshot of the conversation with proper bubble chrome and asset handling, suitable for sharing or saving.

Sidekick/Resources/ChatMarkdownWebView · high confidence

New onboarding introduction flow with skip option

The setup wizard now includes a dedicated introduction phase that displays a title, description, and image for each step, allowing users to navigate through multiple pages. A new 'Skip' button is available at the bottom of the introduction view, enabling users to bypass the tutorial and proceed directly to the completed setup state.

Sidekick/Views/Setup/Introduction · high confidence

New reusable button components for Sidekick UI

This change introduces a suite of new SwiftUI view components in the Sidekick application to standardize and enhance user interactions. Users will now see a CopyButton for clipboard operations with visual feedback, an ExportButton that allows saving code snippets to files with language-specific extensions, and a Retry/RegenerateButton for re-sending requests. Additionally, the UI includes a QuickPromptButton for inserting predefined prompts, a SidebarButtonView for full-width navigation items with hover effects, a PopoverButton for contextual menus, a ToggleLaTeXButton for rendering mathematical notation, and an ExitButton with keyboard shortcuts. These components collectively improve the consistency, accessibility, and functionality of the Sidekick interface.

Sidekick/Views/Misc/Buttons · high confidence

New setup flow with local model download and optional server configuration

The setup experience now guides users through downloading a recommended local model (with a preview of the model name and size) or connecting to an external server. A new ModelSelectionView handles local model resolution and download, while a ServerModelSetupView allows users to configure a remote endpoint. The setup is considered complete once either a local model is selected or a server connection is established.

Sidekick/Views/Setup · high confidence

New temporary resource view for chat conversations

Users can now see and manage temporary resources (such as files or slides) directly within the chat interface. A new horizontal scrollable list displays these resources with thumbnails and names, showing a loading state while text extraction is in progress and a failure message if extraction fails. Each resource card allows users to open the file in Finder or remove it from the temporary list.

Sidekick/Views/Chat/Conversation/Controls/Temporary Resource · high confidence

New utility extensions for Sidekick

Added a suite of Swift extensions in the Sidekick/Extensions directory to support core application features. These include model sorting logic (Extension+Array), secure defaults handling (Extension+SecureDefaults), similarity search integration (Extension+SimilarityIndex), Tavily web search request/response structures (Extension+Tavily), and various string, date, and URL utilities.

Sidekick/Extensions · high confidence

New utility views and drag-to-export support in Sidekick

This update introduces a suite of new SwiftUI components in the Sidekick views library to enhance UI flexibility and interaction. Key additions include a \DragModifier\ that enables dragging files out of the app (supporting the 'Drag to export' capability), a \PerformanceGaugeView\ that visualizes GPU performance relative to historical data (distinguishing 'GPU poor' from 'GPU rich' devices), and various utility views like \CircularProgressView\, \PercentProgressView\, \ThumbnailView\, and \WrappingHStack\ to support richer interface elements such as setup screens and content layouts.

Sidekick/Views/Misc · high confidence

Prevents accumulation of blank chats and introduces Canvas snapshot extraction

The app now keeps new conversations in memory as drafts until the first message is sent, ensuring only one blank chat exists at a time and preventing the sidebar from being cluttered with empty entries. Additionally, a new Canvas feature allows users to extract generated content from assistant messages into dedicated snapshots, managed by the new CanvasController.

Sidekick/Logic/View Controllers/Conversation · high confidence

Behavioural changes

17 commits (2 fixes) modifying Sidekick/Logic/Inference/llama.cpp/build

A change to existing behaviour in Sidekick/Logic/Inference/llama.cpp/build — 17 commits (2 fixs), 13 files.

Sidekick/Logic/Inference/llama.cpp/build · medium confidence · unverified

Added Xcode scheme for Simplified Chinese localization

A new Xcode scheme (Sidekick-Chinese, Simplified.xcscheme) has been added to the project, configuring the build and launch actions to run the app with the zh-Hans language setting. This enables developers to build and test the application specifically in Simplified Chinese, supporting the localization efforts mentioned in the commit history.

Sidekick.xcodeproj/xcshareddata · high confidence

Diagram rendering switches to Mermaid with live file monitoring

The diagramming capability in Sidekick now uses Mermaid instead of the previous tooling. This change introduces a new MermaidRenderer that writes Mermaid code to a cache file and invokes a bundled mermaid-cli binary to generate SVG previews. To support live updates, a new FileMonitor component watches the output file for changes and triggers re-renders, while an SVGValidator ensures the generated output is valid XML before display.

Sidekick/Logic/Utilities/Tools · high confidence

Enhanced tool calling reliability and error handling

The inference engine now includes robust support for parallel tool calls and improved resilience against malformed function arguments. Users benefit from more reliable multi-step tool execution, as the system automatically detects context window limits and retries with compressed results, while also providing structured feedback to the model when tool calls fail to parse, helping it correct its own output format.

Sidekick/Logic/Inference/llama.cpp/Types · high confidence

Migrated data persistence from JSON files to SwiftData

The application has replaced its legacy JSON-based storage with SwiftData for core data models, including conversations, memories, experts, models, sources, and server arguments. This migration improves performance by using efficient database upserts instead of rewriting entire JSON files on every change, and ensures data integrity through cascade deletions and structured entities. Existing data is automatically migrated from the old JSON format during the first launch after the update.

Sidekick/Logic/Data Models · high confidence

Migrated settings storage to SwiftData and introduced Graph RAG configuration

The application has replaced the legacy singleton-based settings manager with a SwiftData-backed architecture, specifically introducing a new \FunctionSelection\ module that persists function category choices via \FunctionCategorySelectionEntity\ rows. This change consolidates how function availability is managed, allowing non-View components to query enabled categories directly from the data store. Additionally, new settings modules (\InferenceSettings\, \RetrievalSettings\) have been introduced to manage inference parameters (such as speculative decoding and worker models) and retrieval configurations, including the introduction of Graph RAG settings (entity limits, community levels) and web search provider options (DuckDuckGo, Google, Tavily).

Sidekick/Logic/Settings · high confidence

Migrated view controllers to SwiftData and modern concurrency

The view controllers in this location have been refactored to support the new SwiftData persistence layer. \LengthyTasksController\ has been converted from \ObservableObject\ to the modern \@Observable\ macro, and \PromptController\ now uses \@ObservationIgnored\ for non-observable state like audio engines and speech recognizers. \IntroductionViewController\ and \ModelExplorerViewController\ are introduced as new view controllers to handle onboarding navigation and model family exploration respectively, integrating with the updated data models.

Sidekick/Logic/View Controllers · high confidence

New WebView-based Markdown renderer with improved code blocks and image support

Chat messages now use a new \ChatMarkdownWebView\ (a WKWebView-backed renderer) instead of the previous native Markdown view, enabling richer rendering via bundled JavaScript libraries. This change introduces auto-collapsing for long code blocks (showing a 'Show all N lines' overlay for blocks exceeding 10 lines) and adds support for inline LaTeX rendering via a custom \latex://\ URL scheme handled by \MarkdownImageProvider\. Additionally, a new \ChatMarkdownAssetSchemeHandler\ ensures local and generated images are correctly resolved and displayed within the web view, maintaining compatibility with historical messages.

Sidekick/Views/Chat/Markdown · high confidence

New inference architecture with lifecycle management and deep research support

The Sidekick inference engine has been restructured to introduce a dedicated \InferenceLifecycleCoordinator\ that manages the startup and shutdown of local inference processes (such as \llama-server\), ensuring no orphaned processes remain after the app quits or receives termination signals. The \Model\ class now supports a \deepResearch\ mode, allowing the AI to perform multi-step investigative tasks, and includes logic to detect reasoning-capable models via the \:thinking\ suffix in their names. Additionally, the system now distinguishes between a main model and a dedicated worker model, enabling the use of a separate, lightweight local model for latency-sensitive background tasks like conversation title generation.

Sidekick/Logic/Inference · high confidence

Redesigned chat input controls with quick prompts and resource handling

The chat interface now features a dedicated controls view that dynamically adjusts its layout based on conversation state. When a conversation is empty and no resources are attached, the view displays a centered layout with a typing animation for the initial greeting. It introduces a horizontal scrollable list of quick prompts that appear when the input is empty, and handles file attachments via a temporary resources view that uses matched geometry effects for smooth transitions. The input field remains persistent for ongoing conversations, while quick prompts and resources are conditionally rendered to keep the interface clean.

Sidekick/Views/Chat/Conversation/Controls · high confidence

Redesigned message rendering with collapsible user messages and detailed tool/reasoning visibility

The chat interface now uses a new \MessageContentView\ that renders assistant responses via a \WKWebView\-backed Markdown renderer for improved streaming performance and layout stability. User messages that exceed 15 lines are now automatically collapsed with a gradient overlay and a "Show all" button to reduce visual clutter. Assistant messages featuring complex tool usage or reasoning models now display structured, expandable sections: a "Thought for X seconds" banner for the reasoning process, and a stack of pills for function calls that can be expanded to view execution results. Additionally, the message options menu now includes a "Read Aloud" button for text-to-speech playback and a "Regenerate" button to retry assistant responses.

Sidekick/Views/Chat/Conversation/Messages/Message · high confidence

Refactored message data model to support tool-calling chains and reasoning steps

The conversation message system has been restructured to better support agentic workflows and complex reasoning. A new \MessageStep\ type captures individual iterations of the assistant's tool-calling loop, preserving the chain of thought, user-facing explainer text, and tool results for each step, rather than just the final answer. The main \Message\ type now includes \functionCallRecords\ and \expertId\ properties, allowing the UI to display the specific expert avatar used for a response and track function execution history. Additionally, source retrieval logic has been moved into the data model, enabling messages to automatically gather context from local similarity search, web search, and temporary resources when submitting requests.

Sidekick/Types/Conversation/Message · high confidence

Reworked chat conversation UI and added image generation support

The chat interface has been redesigned with a new split-view layout featuring a conversation list sidebar, a main message area, and an optional canvas view. Users can now generate images directly within conversations on macOS 15.2+ using the native Image Playground, with generated images automatically added to the chat history. The conversation list now supports renaming and deleting chats, and the toolbar includes a model selector and expert selection menu that dynamically updates the toolbar background color. Code syntax highlighting in messages has been improved using the Splash library, and a new sources view allows users to search and view referenced materials.

Sidekick/Views/Chat/Conversation · high confidence

Sidekick project configuration updated with new source files and resources

The Sidekick project file has been updated to include a large set of new Swift source files and image resources. These additions support new features such as Deep Research, web search, function calling, and various UI components, as well as new frameworks like SQLite, Shimmer, and SplashMarkdown. The changes also include updates to the project's build settings and dependencies.

Sidekick.xcodeproj · medium confidence

Updated Xcode scheme configuration for Chinese localization and local server

The project's Xcode scheme management has been updated to include a new scheme for 'Sidekick-Chinese, Simplified' localization and a 'llama-server-watchdog' scheme for local inference server management. Additionally, build autocreation suppression settings have been added for specific buildable items, ensuring these schemes are handled correctly during development builds.

Sidekick.xcodeproj/xcuserdata · high confidence

Fixes

Migrate persistence from JSON files to SwiftData

Sidekick now uses SwiftData for local storage instead of legacy JSON files. This migration includes a one-time importer that lifts existing conversations, messages, sources, memories, and other data into the new SwiftData store, ensuring your history is preserved. The new architecture improves performance during streaming by debouncing saves and allows for background bulk writes without blocking the UI.

Sidekick/Logic/Persistence · high confidence

Test coverage

Added tests for model recommendations, vision configuration, tool calling, and chat scoping

Added tests in SidekickTests to verify model recommendations on different hardware, local vision configuration behavior with and without projector models, handling of malformed tool calls, and the scoping of chat run states and request IDs per conversation.

SidekickTests · high confidence

Dependencies

Updated Swift Package Manager dependencies

The project's resolved package dependencies have been updated, including upgrades to Sparkle (2.6.4), NetworkImage (6.0.1), SQLite.swift (0.15.4), and Highlightr (2.2.1), alongside updates to internal libraries such as ExtractKit-macOS and FSKit-macOS.

(dependencies) · high confidence

Housekeeping

Added Xcode user-specific workspace configuration files; Initial repository setup with documentation and build scripts.

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 48 → 50 (+1.8)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 84 → 85 (+1.4)
  • Architecture 95 → 94 (-1.6)
  • Maturity 69 → 69 (+0.3)
  • Readiness 28 → 30 (+1.4)
  • Security 89 → 89 (+0.0)
  • Domain Modelling 100 → 100 (+0.0)
  • Accessibility 49 → 53 (+4.1)

Resolved (18)

  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Hotspot: Sidekick/Logic/Inference/llama.cpp/LlamaServer.swift (Sidekick/Logic/Inference/llama.cpp/LlamaServer.swift)
  • Hotspot: Sidekick/Logic/Inference/llama.cpp/Types/ChatParameters.swift (Sidekick/Logic/Inference/llama.cpp/Types/ChatParameters.swift)
  • Hotspot: Sidekick/Logic/Utilities/ChatScreenshotHTMLBuilder.swift (Sidekick/Logic/Utilities/ChatScreenshotHTMLBuilder.swift)
  • Hotspot: Sidekick/Resources/ChatMarkdownWebView/chat.js (Sidekick/Resources/ChatMarkdownWebView/chat.js)
  • Hotspot: Sidekick/Types/Conversation/Message/Message.swift (Sidekick/Types/Conversation/Message/Message.swift)
  • Hotspot: Sidekick/Views/Chat/Conversation/Controls/Input Field/PromptInputField.swift (Sidekick/Views/Chat/Conversation/Controls/Input Field/PromptInputField.swift)
  • Repeated repair: Sidekick/Logic/Data Models/ConversationManager.swift (Sidekick/Logic/Data Models/ConversationManager.swift)
  • Repeated repair: Sidekick/Logic/View Controllers/Conversation/ConversationState.swift (Sidekick/Logic/View Controllers/Conversation/ConversationState.swift)
  • Repeated repair: Sidekick/Logic/View Controllers/PromptController.swift (Sidekick/Logic/View Controllers/PromptController.swift)
  • Repeated repair: Sidekick/Views/Chat/Conversation/ConversationManagerView.swift (Sidekick/Views/Chat/Conversation/ConversationManagerView.swift)
  • Repeated repair: Sidekick/Views/Chat/Conversation/ConversationView.swift (Sidekick/Views/Chat/Conversation/ConversationView.swift)
  • Repeated repair: Sidekick/Views/Chat/Conversation/Messages/Message/MessageContentView.swift (Sidekick/Views/Chat/Conversation/Messages/Message/MessageContentView.swift)
  • Repeated repair: Sidekick/Views/Chat/Conversation/Messages/Message/MessageTextContentView.swift (Sidekick/Views/Chat/Conversation/Messages/Message/MessageTextContentView.swift)
  • Repeated repair: Sidekick/Views/Chat/Conversation/Messages/Message/MessageView.swift (Sidekick/Views/Chat/Conversation/Messages/Message/MessageView.swift)
  • Repeated repair: Sidekick/Views/Chat/Conversation/Messages/MessagesView.swift (Sidekick/Views/Chat/Conversation/Messages/MessagesView.swift)

New (73)

  • Duplicated block (10 lines × 2) (Sidekick/Extensions/UI/Extension+Binding.swift)
  • Duplicated block (10 lines × 2) (Sidekick/Types/Conversation/Functions/Default Functions/CalendarFunctions.swift)
  • Duplicated block (10 lines × 2) (Sidekick/Types/Conversation/Functions/Function.swift)
  • Duplicated block (10 lines × 2) (Sidekick/Views/Chat/Conversation/Messages/Message/MessageReasoningProcessView.swift)
  • Duplicated block (10 lines × 2) (Sidekick/Views/Settings/Model/ServerModelSettingsView.swift)
  • Duplicated block (10 lines × 3) (Sidekick/Extensions/AppKit/Extension+NSMutableAttributedString.swift)
  • Duplicated block (10 lines × 3) (Sidekick/Views/Chat/Conversation/Messages/Message/CollapsibleUserMessageView.swift)
  • Duplicated block (10 lines × 3) (Sidekick/Views/Expert/ExpertEditorView.swift)
  • Duplicated block (10 lines × 5) (Sidekick/Views/Expert/Resource/ResourceSectionView.swift)
  • Duplicated block (11 lines × 2) (Sidekick/Views/Chat/Conversation/Messages/Message/CollapsibleUserMessageView.swift)
  • Duplicated block (11 lines × 2) (Sidekick/Views/Chat/Conversation/Messages/Message/MessageReasoningProcessView.swift)
  • Duplicated block (11 lines × 2) (Sidekick/Views/Settings/RetrievalSettingsView.swift)
  • Duplicated block (12 lines × 2) (Sidekick/Extensions/UI/Extension+Theme.swift)
  • Duplicated block (12 lines × 2) (Sidekick/Views/Misc/ScrollMask.swift)
  • Duplicated block (12 lines × 2) (Sidekick/Views/Model/ModelSelectorDropdown.swift)
  • Duplicated block (12 lines × 2) (Sidekick/Views/Settings/Model/ServerModelSettingsView.swift)
  • Duplicated block (13 lines × 3) (Sidekick/Views/Chat/Conversation/Controls/Input Field/CapsuleButton.swift)
  • Duplicated block (13–14 lines × 2) (Sidekick/Extensions/AppKit/Extension+NSMutableAttributedString.swift)
  • Duplicated block (16 lines × 2) (Sidekick/Views/Chat/Conversation/Controls/Input Field/CapsuleChecklistMenuButton.swift)
  • Duplicated block (18 lines × 2) (Sidekick/Views/Settings/InferenceSettingsView.swift)
  • …and 53 more

Changes since last survey

  • 1 commits — 1 feature/other, 0 fixes

By area

  • (root) — 1 commit

Notable commits

  • change: docs: fix Homebrew cask name in README (#96)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

johnbean393/Sidekick was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 83b3e6e0d8d6831a890e4df73435a3987b086e20 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.