How johnbean393/sidekick works
Sidekick is a local-first macOS assistant for chatting with local or OpenAI-compatible models, grounding replies in user-selected resources, and running research and action tools. The main flow is prompt entry, retrieval and optional tool work, model inference, then a sourced response in the conversation. Experts/RAG, deep research, memory, Canvas, and rich Markdown are meaningful product branches. Some relationships below rely on README descriptions because their implementing source was not sampled; those edges cite the README.
Main entry points: Model.swift Inference coordinator · ConversationManagerView.swift Chat interface · Message.swift Message context · PromptController.swift Prompt handling
Components 22
Conversation
- Chat interface
Sidekick/Views/Chat/Conversation/ConversationManagerView.swift - Prompt handling
Sidekick/Logic/View Controllers/PromptController.swift - Conversations
Sidekick/Logic/Data Models/ConversationManager.swift - Message context
Sidekick/Types/Conversation/Message/Message.swift - Markdown rendering
Sidekick/Views/Chat/Markdown/ChatMarkdownWebView.swift
Inference
- Inference coordinator
Sidekick/Logic/Inference/Model.swift - Local inference server
Sidekick/Logic/Inference/llama.cpp/LlamaServer.swift - Model settings
Sidekick/Logic/Settings/InferenceSettings.swift
Knowledge and Research
- Expert setup
Sidekick/Views/Expert/ExpertManagerView.swift - Experts and resources
Sidekick/Logic/Data Models/ExpertManager.swift - Resource indexing
Sidekick/Logic/Services/RAGIndexingService.swift - Resource retrieval
Sidekick/Types/Expert/Resources.swift - Web search
Sidekick/Logic/Utilities/Web/WebSearch.swift - Deep research agent
Sidekick/Types/Agent/DeepResearchAgent.swift
Assistant Capabilities
- Function calling
Sidekick/Types/Conversation/Functions/Function.swift - Cross-chat memory
Sidekick/Logic/Data Models/Memories.swift - Canvas editing
Sidekick/Logic/View Controllers/Conversation/CanvasController.swift - Image generation routing
Sidekick/Logic/Inference/Router/PromptAnalyzer.swift
App and State
- SwiftData persistence
Sidekick/Logic/Persistence/PersistenceController.swift
Other components
- User
- OpenAI-compatible API
- Local data store
Connections 29
- User → Chat interface: enters prompt
- Chat interface → Prompt handling: submits prompt
Sidekick/Views/Chat/Conversation/ConversationManagerView.swift - Prompt handling → Inference coordinator: requests inference
- Prompt handling → Conversations: updates conversation
- Message context → Resource retrieval: retrieves resources
Sidekick/Types/Conversation/Message/Message.swift - Message context → Web search: searches web
Sidekick/Types/Conversation/Message/Message.swift - Inference coordinator → Local inference server: runs inference
Sidekick/Logic/Inference/Model.swift - Inference coordinator → Model settings: reads configuration
Sidekick/Logic/Inference/Model.swift - Inference coordinator → OpenAI-compatible API: can use API
- Local inference server → OpenAI-compatible API: serves remote requests
- Inference coordinator → Message context: produces reply
Sidekick/Logic/Inference/Model.swift - Chat interface → Markdown rendering: renders replies
- Chat interface → Expert setup: selects expert
Sidekick/Views/Chat/Conversation/ConversationManagerView.swift - Expert setup → Experts and resources: manages experts
Sidekick/Views/Expert/ExpertManagerView.swift - Experts and resources → Resource indexing: indexes resources
- Resource indexing → Resource retrieval: builds indexes
Sidekick/Logic/Services/RAGIndexingService.swift - Resource retrieval → Message context: supplies sources
- Web search → Message context: supplies results
Sidekick/Types/Conversation/Message/Message.swift - Inference coordinator → Function calling: invokes tools
- Function calling → Inference coordinator: returns tool results
- Deep research agent → Local inference server: uses inference
Sidekick/Types/Agent/DeepResearchAgent.swift - Deep research agent → Web search: researches websites
- Inference coordinator → Cross-chat memory: uses remembered facts
- Chat interface → Canvas editing: opens Canvas
Sidekick/Views/Chat/Conversation/ConversationManagerView.swift - Canvas editing → Inference coordinator: requests edits
Sidekick/Logic/View Controllers/Conversation/CanvasController.swift - Prompt handling → Image generation routing: routes image prompts
- Conversations → SwiftData persistence: stores conversations
Sidekick/Logic/Data Models/ConversationManager.swift - Experts and resources → SwiftData persistence: stores experts
Sidekick/Logic/Data Models/ExpertManager.swift - SwiftData persistence → Local data store: reads and writes
Sidekick/Logic/Persistence/PersistenceController.swift