Sakrylle Studio
Sakrylle Studio is a cross-platform Tauri v2 app (macOS and iOS are available now; Windows, Linux, and Android are in development) for orchestrating multiple Sakrylle CLI agents across local workspaces. It provides a sidebar for workspace and thread management, communicates with the CLI via the sakrylle app-server protocol over stdio JSON-RPC, and supports a remote daemon mode for connecting from iOS clients.
- Website: https://page.sakrylle.com
- GitHub: https://github.com/Ranshen1209/sakrylle-studio
- Console: https://ai1.sakrylle.com
- Tech stack: React 19 + TypeScript + Vite 7 (frontend), Rust + Tauri v2 (backend), i18next (i18n)
- Version: 0.7.68
- License: MIT
Installation
Download
| Platform | File | Links |
|---|---|---|
| macOS Apple Silicon | Sakrylle_Studio_aarch64-0.7.68.dmg | Download |
| iOS | Sakrylle_Studio_unsigned-0.7.68.ipa | Download |
Runtime Requirements
Get the installer for your platform from the download table above and install it to get started. Before running, make sure the following dependencies are in place:
| Dependency | Description |
|---|---|
| Sakrylle CLI | Installed and on PATH (sakrylle or skl), or configure a custom path in settings |
| Git CLI | Worktree operations |
GitHub CLI (gh) | GitHub Issues/PR integration (optional) |
macOS and iOS installers are available now; Windows, Linux, and Android are still in development.
Home Dashboard
On first launch, you will see the home dashboard. The dashboard is the starting point for all operations.
Quick Actions
The top of the dashboard provides common action shortcuts:
- New Agent: Create a new agent thread
- New Workspace: Add a workspace from a local path or Git URL
- Open Workspace: Quickly switch to an existing workspace
Recent Runs
The dashboard shows your most recent agent runs, including workspace name, thread title, run status (completed/running/error), and last activity time. Click any record to jump directly to the corresponding thread.
Usage Snapshot
The dashboard displays a usage overview for your current account, including token consumption and cost information.
Account Info
The dashboard shows your logged-in Sakrylle account information, including email, account type, and credit balance. Login is handled by Sakrylle CLI; Studio reads credentials from ~/.sakrylle-cli/auth.json.
Rate Limits
The dashboard displays your current account rate limit status, helping you understand remaining quotas.
Workspace Management
Workspaces are the fundamental unit for organizing projects in Studio. Each workspace corresponds to a local directory or Git repository.
Adding Workspaces
- Add from a local path: Click the Add Workspace button at the bottom of the sidebar and select a local directory
- Add from a Git URL: Paste a Git repository URL; Studio clones and adds it as a workspace
Workspace Groups
You can organize workspaces into different groups:
- Right-click a workspace in the sidebar workspace list
- Select Move to Group or New Group
- Groups can be collapsed/expanded for managing many workspaces
Group configuration is stored in the workspaceGroups field of settings.json.
Drag-and-Drop Sorting
Workspaces support drag-and-drop sorting. Press and hold a workspace name in the sidebar and drag it to the target position to reorder. Sort order is persisted to the sortOrder field.
Clone Agents
Clone agents are used to isolate work within the same workspace. They create an independent agent instance that shares the same workspace context:
- Press
Cmd+Alt+N(macOS) /Ctrl+Alt+N(Windows/Linux) to create a clone agent - Or right-click in the sidebar and select New Clone Agent
Clone agents are recorded in the workspace's cloneSourceWorkspaceId field.
Worktree Agents
Worktree agents use Git worktrees to work in an isolated filesystem snapshot, ideal for scenarios requiring parallel code modifications:
- Press
Cmd+Shift+N(macOS) /Ctrl+Shift+N(Windows/Linux) to create a worktree agent - Worktrees are stored under
worktrees/<workspace-id>in the app data directory (legacy.codex-worktreessupported) - You can specify
worktreesFolderin workspace settings to override the default location - Configure
worktreeSetupScriptto automatically run setup scripts after worktree creation
Launch Scripts
Each workspace can be configured with one or more launch scripts (launchScript / launchScripts) that execute automatically when the workspace connects. Launch scripts support custom icons and labels, suitable for running prerequisite operations like installing dependencies or starting development servers.
Workspace Settings
Each workspace can be independently configured with the following fields:
| Field | Description |
|---|---|
sidebarCollapsed | Whether sidebar is collapsed |
sortOrder | Sort order |
groupId | Group ID |
cloneSourceWorkspaceId | Clone source workspace ID |
gitRoot | Git root directory override |
launchScript | Launch script |
launchScripts | Multiple launch scripts (with icon and label) |
worktreeSetupScript | Worktree setup script |
worktreesFolder | Worktrees folder override |
Thread Management
Threads are the fundamental unit for agent conversations in Studio. Each workspace can have multiple threads that are independent of each other.
Creating Threads
- Click New Agent in the sidebar (
Cmd+N/Ctrl+N) - Select the target workspace (auto-selected if there is only one)
- The new thread automatically receives a default title (enable
threadTitleAutogenerationEnabledin settings to let AI auto-generate titles)
Resuming Threads
Click a thread name in the sidebar to resume the conversation. Studio automatically resumes the thread state via the sakrylle app-server protocol.
Archiving Threads
Archived threads no longer appear in the sidebar, but data is preserved:
- Press
Cmd+Ctrl+A(macOS) /Ctrl+Alt+A(Windows/Linux) to archive the current thread - Or right-click in the sidebar and select Archive
- Toggle archived thread visibility at the top of the sidebar
Renaming Threads
Right-click a thread, select Rename, and enter a new title. You can also enable Thread Title Autogeneration in settings to let AI generate titles based on conversation content.
Stopping Threads
When an agent is executing a task:
- Press
Ctrl+C(macOS) /Ctrl+Shift+C(Windows/Linux) to interrupt the current turn - The thread status updates to interrupted
Forking Threads
Forking a thread creates a new independent branch from a specific point in the current thread, useful for trying different directions from an intermediate state.
Pinning Threads
You can pin important threads so they always appear at the top of the thread list.
Sorting and Organization
Thread lists support multiple sorting and organization methods:
- Sort by last activity time
- Sort by creation time
- Sort by title
Per-Thread Overrides
Each thread can independently override certain global settings (such as model selection, follow-up behavior, etc.).
Subagent Threads
Studio supports subagent threads. Subagents run within the parent agent's context, suitable for breaking down complex tasks.
Composer
The composer is the message input area at the bottom of Studio, used for sending instructions and questions to agents.
Text Input
- Type text messages in the composer
- Supports Markdown formatting
- The input box auto-expands for multi-line input
Image Attachments
The composer supports attaching images:
- Click the image icon to the left of the input box and select images from the file picker
- Drag and drop images directly into the input box
- Paste images from the clipboard (
Cmd+V/Ctrl+V)
Images are sent along with the message as attachments to the agent.
Follow-Up Behavior
When an agent is executing a task, you can choose how to send subsequent messages:
- Queue: Subsequent messages wait and execute in order after the current task completes
- Steer: Subsequent messages immediately interrupt the current task and redirect to new instructions
The default behavior is configured in Settings > Composer (followUpMessageBehavior).
Quick toggle: Press Shift+Cmd+Enter (macOS) / Shift+Ctrl+Enter (Windows/Linux) to send the opposite follow-up action for a single message.
Autocomplete
The composer provides several autocomplete triggers:
| Trigger | Description |
|---|---|
$ | Trigger skills list autocomplete |
/prompts: | Trigger prompt library autocomplete |
/review | Trigger code review workflow |
@ | Trigger file path autocomplete (@files) and app mentions (@apps) |
Model Picker
The composer provides a model picker at the top, allowing you to select a different model for the current thread. Press Cmd+Shift+M (macOS) / Ctrl+Shift+M (Windows/Linux) to open the model picker.
Collaboration Modes
Collaboration modes control how the agent collaborates with you. Press Shift+Tab to cycle collaboration modes. Collaboration modes can be enabled/disabled in Settings > Features.
Reasoning Effort
Reasoning effort controls the depth of model thinking. Press Cmd+Shift+R (macOS) / Ctrl+Shift+R (Windows/Linux) to adjust reasoning effort.
Access Mode
Access mode controls the agent's filesystem permissions:
- read-only: Agent can only view files
- current: Agent can read/write files in the current workspace
- full-access: Agent can read/write arbitrary files
The default access mode is configured in Settings > General (defaultAccessMode). Press Cmd+Shift+A (macOS) / Ctrl+Shift+A (Windows/Linux) to toggle access mode.
The context usage ring at the top of the composer shows current token usage for the conversation.
Dictation
Studio integrates local Whisper voice dictation:
- Enable dictation in Settings > Dictation (
dictationEnabled) - Select a dictation model (
dictationModelId) - Set the hold-to-talk key (
dictationHoldKey, defaultAlt) - Hold the key while speaking into the microphone; release to auto-transcribe and fill the composer
- Live waveform is displayed during dictation
Editor Presets
The composer editor supports three presets (composerEditorPreset):
- default: Default behavior
- helpful: Enhanced assistance
- smart: Intelligent editing mode
Draft Persistence
Unsent composer content is automatically saved as a draft. Each thread has its own independent draft; switching threads does not lose drafts.
Prompt History
The composer records your send history, allowing quick review of previously sent messages.
Message Display
Markdown Rendering
Agent messages support full Markdown rendering, including headings, lists, code blocks, tables, links, and more.
Reasoning and Summaries
When an agent is thinking, the message area displays the reasoning process:
- Reasoning text: The model's thinking process, expandable/collapsible
- Reasoning summary: A brief summary of long reasoning processes
- Reasoning is displayed progressively (
item/reasoning/textDeltaevents)
Diff Display
When an agent modifies files, the message displays a diff comparison:
- Supports both side-by-side and unified diff views
- Configure the default diff view in Settings > Git (
splitChatDiffView) - Diffs show filename, line counts, and specific changes
Tool Use
When an agent invokes tools (such as file read/write, command execution, etc.), the message displays tool usage details:
- Tool name and parameters
- Execution results
- Terminal output from command execution
Explore Items
When an agent explores the project structure, explore item lists are displayed.
Review Items
When an agent initiates a code review, review items are displayed in the message, containing code snippets and suggestions that need attention.
Approval Prompts
An agent may require your approval before executing certain operations:
- File modification approval: When an agent attempts to modify files, a change preview is displayed awaiting your confirmation
- Command execution approval: When an agent attempts to execute terminal commands, the command content is displayed awaiting your confirmation
- Permission requests: When an agent requests additional permissions, permission details are displayed awaiting your confirmation
- User input requests: When an agent needs additional information from you, an input prompt is displayed
Approval mode is configured in Settings > Git (reviewDeliveryMode): inline (displayed inline) or detached (displayed in a separate panel).
Plan Display
When an agent creates a plan for complex tasks, the plan is displayed in a structured format in the message area.
Git and GitHub
Git Status
Studio provides a Git status panel in the sidebar (open with Cmd+Shift+G / Ctrl+Shift+G):
- Shows current branch name
- Staged/unstaged file counts
- Ahead/behind counts relative to the remote branch
Diff Viewer
The diff viewer supports:
- Side-by-side view: Left-right comparison of before and after changes
- Unified view: Top-bottom comparison of before and after changes
- Diff statistics: Shows added/deleted lines per file
- Preloads diffs for faster browsing (
preloadGitDiffs)
Stage/Unstage/Revert
- Stage files: Select files and click the stage button
- Unstage: Unstage previously staged files
- Revert changes: Discard local file modifications, restoring to the last committed state
Commits
Studio supports AI-generated commit messages:
- When committing, the agent can auto-generate commit messages based on diff content
- Commit message templates can be customized in settings (
commitMessagePrompt, supports{diff}placeholder) - You can also manually enter commit messages
Branch Management
- Displays a list of all local branches
- Supports checking out branches
- Supports creating new branches
- Shows ahead/behind counts for the upstream branch
GitHub
Studio integrates GitHub Issues and Pull Requests management:
- Issues list: View and manage GitHub Issues
- Pull Requests list: View PR status, diffs, and comments
- PR review: Review PR code changes directly within Studio
- Ask PR: Send PR context to a new thread for the agent to analyze PR content
- Checkout PR branch: Check out a branch from a GitHub PR locally
GitHub integration requires installing GitHub CLI (gh) and completing login authentication.
Init Git
You can initialize a new Git repository from within Studio, or create a GitHub remote repository.
Files and Prompts
File Tree
Studio provides a project file tree view:
- Search: Search for filenames in the file tree
- File-type icons: Different file types display corresponding icons
- Reveal in Finder/Explorer: Right-click a file to open it in the system file manager
- Supports file tree collapse/expand
Prompt Library
The prompt library is used for storing and managing commonly used prompt templates:
- Global prompts: Prompts available across workspaces
- Workspace prompts: Prompts available only in specific workspaces
- Supports creating, editing, deleting, and moving prompts
- Use
/prompts:in the composer to trigger prompt autocomplete
Prompts are stored in the ~/.sakrylle-cli/prompts directory.
Skills and Apps
Skills List
Studio lists available skills from the Sakrylle CLI:
- Use
$in the composer to trigger skill autocomplete - The skills list is retrieved via the
skills/listrequest
App Mentions
In experimental mode (experimentalAppsEnabled), you can mention apps in messages (@apps) to inject app context into the conversation.
Settings
Studio provides 12 settings sections, accessible through the Settings panel.
1. Projects
Manage workspaces and workspace settings:
- Workspace list and group configuration
- Workspace launch script configuration
- Worktrees folder configuration
2. Environments
Configure environment variables and runtime settings:
- CLI binary path (
codexBin): Custom Sakrylle CLI executable path - CLI arguments (
codexArgs): Custom CLI startup arguments - Environment variable overrides
| Variable | Description |
|---|---|
SAKRYLLE_CLI_HOME | CLI home directory, defaults to ~/.sakrylle-cli |
SAKRYLLE_API_BASE_URL | API base URL, defaults to https://api.sakrylle.com |
SAKRYLLE_API_KEY | API key (optional, CLI login preferred) |
OPENAI_API_KEY | OpenAI API key (API-key mode fallback) |
3. Display and Sound
- Theme: Light, dark, dim, follow system (
theme) - UI scale (
uiScale): Adjust overall interface scaling - UI font (
uiFontFamily): Custom UI font - Code font (
codeFontFamily): Custom code font - Code font size (
codeFontSize): Default 11 - Reduced transparency: Reduce window transparency effects
- Notification sounds (
notificationSoundsEnabled): Enable/disable notification sounds - System notifications (
systemNotificationsEnabled): Enable/disable system-level notifications - Auto-check updates (
automaticAppUpdateChecksEnabled): the current build does not support auto-update, so this toggle has no effect for now
macOS supports platform-specific window effects (overlay title bar + vibrancy).
4. Composer
- Follow-up default behavior (
followUpMessageBehavior): Queue or Steer - Personality (
personality): friendly or pragmatic - Editor preset (
composerEditorPreset): default, helpful, or smart - Chat history scrollback (
chatHistoryScrollbackItems): Default 200
Advanced Editor Settings
| Setting | Description |
|---|---|
composerFenceExpandOnSpace | Expand code fence on space |
composerFenceExpandOnEnter | Expand code fence on enter |
composerFenceLanguageTags | Show code fence language tags |
composerFenceWrapSelection | Auto-wrap selected text in code fence |
composerFenceAutoWrapPasteMultiline | Auto-wrap multiline paste in code fence |
composerFenceAutoWrapPasteCodeLike | Auto-wrap code-like paste in code fence |
composerListContinuation | Auto-continue lists |
composerCodeBlockCopyUseModifier | Use modifier key for code block copy |
5. Dictation
Configure local Whisper voice dictation:
- Enable dictation (
dictationEnabled): Disabled by default - Dictation model (
dictationModelId): Select a Whisper model - Hold-to-talk key (
dictationHoldKey): DefaultAlt
Whisper Model Comparison
| Model | Size | Accuracy | Speed |
|---|---|---|---|
| tiny | ~75 MB | Low | Fastest |
| base | ~140 MB | Low-medium | Fast |
| small | ~460 MB | Medium | Moderate |
| medium | ~1.5 GB | Medium-high | Slower |
| large-v3 | ~3 GB | High | Slowest |
Compiling Whisper on Windows requires additionally installing LLVM/Clang. Voice dictation is unavailable on iOS.
6. Shortcuts
All shortcuts are customizable (string | null). macOS and Windows/Linux have different defaults:
| Function | macOS Default | Windows/Linux Default |
|---|---|---|
| Model picker | Cmd+Shift+M | Ctrl+Shift+M |
| Access mode | Cmd+Shift+A | Ctrl+Shift+A |
| Reasoning effort | Cmd+Shift+R | Ctrl+Shift+R |
| Interrupt | Ctrl+C | Ctrl+Shift+C |
| Collaboration mode | Shift+Tab | Shift+Tab |
| New agent | Cmd+N | Ctrl+N |
| New worktree agent | Cmd+Shift+N | Ctrl+Shift+N |
| New clone agent | Cmd+Alt+N | Ctrl+Alt+N |
| Archive thread | Cmd+Ctrl+A | Ctrl+Alt+A |
| Toggle projects sidebar | Cmd+Shift+P | Ctrl+Shift+P |
| Toggle Git sidebar | Cmd+Shift+G | Ctrl+Shift+G |
| Toggle debug panel | Cmd+Shift+D | Ctrl+Shift+D |
| Toggle terminal | Cmd+Shift+T | Ctrl+Shift+T |
| Cycle agent next | Cmd+Ctrl+Down | Ctrl+Alt+Down |
| Cycle agent prev | Cmd+Ctrl+Up | Ctrl+Alt+Up |
| Cycle workspace next | Cmd+Shift+Down | Ctrl+Alt+Shift+Down |
| Cycle workspace prev | Cmd+Shift+Up | Ctrl+Alt+Shift+Up |
7. Open In
Configure which external applications can open the current file. Custom target application lists can be configured via openAppTargets, with platform-specific defaults.
8. Git
- Split chat/diff view (
splitChatDiffView): Enable split view for chat and diffs - Preload Git diffs (
preloadGitDiffs): Automatically preload file diffs - Commit message template (
commitMessagePrompt): Prompt template for AI-generated commit messages - Review delivery mode (
reviewDeliveryMode): inline or detached
9. Server
Configure backend connection mode:
- Local mode (
backendMode: "local"): Studio directly spawnssakrylle app-serverprocesses - Remote mode (
backendMode: "remote"): Studio connects to a remote daemon- Remote backend provider (
remoteBackendProvider): TCP - Remote backend host (
remoteBackendHost): Default127.0.0.1:4733 - Remote backend token (
remoteBackendToken): Auth token - Multiple backends (
remoteBackends): Configure multiple remote backend targets - Keep daemon running (
keepDaemonRunningAfterAppClose): Whether to keep the daemon running after closing the app
- Remote backend provider (
iOS clients use remote mode by default. Tailscale enables remote connections between desktop and mobile devices.
10. Agents
Configure agent behavior:
- Collaboration modes (
collaborationModesEnabled): Enable/disable collaboration modes - Steer capability (
steerEnabled): Enable/disable Steer - Thread title autogeneration (
threadTitleAutogenerationEnabled): Enable/disable AI auto-generated thread titles
11. Codex
Configure Sakrylle CLI-related settings. Some settings navigation labels still display "Codex" (low priority fix pending).
12. Features
Enable/disable experimental and stable features:
- Unified execution (
unifiedExecEnabled): Background terminal execution, enabled by default - Apps (
experimentalAppsEnabled): Experimental apps feature, disabled by default
Feature settings are configured in the UI and synced to $SAKRYLLE_CLI_HOME/config.toml.
Terminal
Studio includes a built-in terminal powered by xterm.js with multiple tab support:
- Press
Cmd+Shift+T(macOS) /Ctrl+Shift+T(Windows/Linux) to open the terminal panel - Terminal dock supports multiple tab switching
- Terminal size is persisted
- Terminal is unavailable on iOS
Remote backend
Studio supports local mode and remote mode. Desktop defaults to local mode and directly starts sakrylle app-server; iOS / mobile defaults to remote mode and connects to a desktop or server daemon over TCP.
| Parameter | Default |
|---|---|
| Desktop backend mode | local |
| iOS backend mode | remote |
| Remote backend protocol | TCP |
| Remote backend host | 127.0.0.1:4733 |
| Default access mode | current |
| Review delivery | inline |
| Follow-up behavior | queue |
| Multi-agent | Disabled by default |
max_threads | 6 |
max_depth | 1 |
| Chat history scrollback | 200 items |
Remote connections can define multiple backend profiles (name, host, token, and active target). keepDaemonRunningAfterAppClose defaults to off, so closing Studio does not keep the daemon running by default.
Architecture
The daemon is a standalone JSON-RPC process that exposes the same backend functionality over TCP. Use cases:
- iOS clients connecting to a desktop backend
- Headless server operation
- Remote work
Starting the Daemon
Open Settings > Server > Start daemon on the desktop app to start the daemon. The same panel lets you check status and stop it. The daemon uses the host and token configured in settings.json.
Once running, iOS / mobile clients can connect to this backend using the daemon's address and token.
iOS Layout
iOS Studio provides a dedicated mobile layout with tabbed navigation and responsive interface. Terminal and voice dictation are unavailable on iOS.
Mobile Setup Wizard
iOS Studio provides a setup wizard to guide you through connecting to a remote backend.
iOS + Tailscale Setup
- Desktop and iPhone sign into the same Tailscale tailnet
- Desktop Studio sets Remote backend token
- Desktop starts the daemon
- Use Tailscale helper to detect host
- iOS Studio enters desktop host and token
- Tap Connect & test
Notifications
Sound Notifications
When an agent completes a task, encounters an error, or requires approval, Studio can play a notification sound. Configure in Settings > Display and Sound (notificationSoundsEnabled).
System Notifications
Studio can send operating system-level notifications to remind you when the app is not in the foreground. Configure in Settings > Display and Sound (systemNotificationsEnabled).
Subagent Notifications
When a subagent completes a task or requires attention, it sends a notification to the parent agent.
Approval Notifications
When an agent requires your approval for file modifications, command execution, or permission requests, an approval notification is issued.
Error Toasts
Errors are displayed as toast notifications in the corner of the interface, containing error information and suggested resolutions.
Debug Panel
Press Cmd+Shift+D (macOS) / Ctrl+Shift+D (Windows/Linux) to open the debug panel. The debug panel provides a log viewer displaying detailed runtime logs from Studio, useful for troubleshooting.
Voice Dictation
The voice dictation feature uses local Whisper models to transcribe speech into text:
- Enable in Settings > Dictation
- Choose an appropriate Whisper model (from tiny to large-v3)
- Set the hold-to-talk key (default
Alt) - Hold the key while speaking into the microphone; release to auto-transcribe and fill the composer
See the Dictation Settings section for detailed model comparison.
Authentication
- Studio does not implement its own OIDC relying-party flow
- Login is handled by Sakrylle CLI
- Studio reads credentials from
~/.sakrylle-cli/auth.json - Account identity resolved via
/v1/me(supports OAuthaccess_tokenand API-key modes) - Falls back to id_token decode when offline (display-only, never used for authorization)
- No ChatGPT login; account area passively shows email/type/credits
In-App Updates
The current build does not automatically check for or install updates. Get the latest stable version from GitHub Releases and update manually.
The auto-update toggle in settings has no effect in the current build.
Internationalization
Studio supports two interface languages:
- English
- Simplified Chinese
Switch languages in Settings > Display and Sound (language).
Storage Paths
| Data Type | Path |
|---|---|
| App settings | settings.json (app data directory) |
| Workspace list | workspaces.json (app data directory) |
| Worktrees | worktrees/<workspace-id> (app data directory) |
| Credentials | ~/.sakrylle-cli/auth.json |
| Prompts | ~/.sakrylle-cli/prompts |
| Session data | ~/.sakrylle-cli/sessions |
| Feature config | ~/.sakrylle-cli/config.toml |
| UI state | localStorage (keys prefixed sakrylle-studio.*, legacy fallback from codexmonitor.* and sakrylle-monitor.*) |
Limitations
- Terminal and dictation are unavailable on iOS
- The current build does not support auto-update; get new versions manually from the download page
- A few settings nav labels still display "Codex" (low priority)
- App icon softens at 32px (known trade-off)
- Realtime events are not yet supported
Related Documentation
- Sakrylle Studio GitHub -- GitHub repository
- API Keys -- Create and manage your keys
- Billing -- Understand billing and top-up
For issues, contact support@sakrylle.com.
