Back to Search
lukilabs

lukilabs/craft-agents-oss

499stars
62forks
499watchers
Apache License 2.0
Updated 1/20/2026

README.md

Craft Agents

License Contributor Covenant

Craft Agents is a tool we built so that we (at craft.do) can work effectively with agents. It enables intuitive multitasking, no-fluff connection to any API or Service, sharing sessions, and a more document (vs code) centric workflow - in a beautiful and fluid UI.

It leans on Claude Code through the Claude Agent SDK - follow what we found great, and improves areas where we've desired improvements.

It's built with Agent Native software principles in mind, and is highly customisable out of the box. One of the first of its kind.

Craft Agents is open source under the Apache 2.0 license - so you are free to remix, change anything. And that's actually possible. We ourselves are building Craft Agents with Craft Agents only - no code editors - so really, any customisation is just a prompt away.

We built Craft Agents because we wanted a better, more opinionated (and preferably non-CLI way) of working with the most powerful agents in the world. We'll continue to improve it, based on our experiences and intuition.

image

Installation

One-Line Install (Recommended)

macOS / Linux:

curl -fsSL https://agents.craft.do/install-app.sh | bash

Windows (PowerShell):

irm https://agents.craft.do/install-app.ps1 | iex

Build from Source

git clone https://github.com/lukilabs/craft-agents-oss.git
cd craft-agents-oss
bun install
bun run electron:start

Features

  • Multi-Session Inbox: Desktop app with session management, status workflow, and flagging
  • Claude Code Experience: Streaming responses, tool visualization, real-time updates
  • Craft MCP Integration: Access to 32+ Craft document tools (blocks, collections, search, tasks)
  • Sources: Connect to MCP servers, REST APIs (Google, Slack, Microsoft), and local filesystems
  • Permission Modes: Three-level system (Explore, Ask to Edit, Auto) with customizable rules
  • Background Tasks: Run long-running operations with progress tracking
  • Dynamic Status System: Customizable session workflow states (Todo, In Progress, Done, etc.)
  • Theme System: Cascading themes at app and workspace levels
  • Multi-File Diff: VS Code-style window for viewing all file changes in a turn
  • Skills: Specialized agent instructions stored per-workspace
  • File Attachments: Drag-drop images, PDFs, Office documents with auto-conversion

Quick Start

  1. Launch the app after installation
  2. Choose billing: Use your own Anthropic API key or Claude Max subscription
  3. Create a workspace: Set up a workspace to organize your sessions
  4. Connect sources (optional): Add MCP servers, REST APIs, or local filesystems
  5. Start chatting: Create sessions and interact with Claude

Desktop App Features

Session Management

  • Inbox/Archive: Sessions organized by workflow status
  • Flagging: Mark important sessions for quick access
  • Status Workflow: Todo → In Progress → Needs Review → Done
  • Session Naming: AI-generated titles or manual naming
  • Session Persistence: Full conversation history saved to disk

Sources

Connect external data sources to your workspace:

TypeExamples
MCP ServersCraft, Linear, GitHub, Notion, custom servers
REST APIsGoogle (Gmail, Calendar, Drive), Slack, Microsoft
Local FilesFilesystem, Obsidian vaults, Git repos

Permission Modes

ModeDisplayBehavior
safeExploreRead-only, blocks all write operations
askAsk to EditPrompts for approval (default)
allow-allAutoAuto-approves all commands

Use SHIFT+TAB to cycle through modes in the chat interface.

Keyboard Shortcuts

ShortcutAction
Cmd+NNew chat
Cmd+1/2/3Focus sidebar/list/chat
Cmd+/Keyboard shortcuts dialog
SHIFT+TABCycle permission modes
EnterSend message
Shift+EnterNew line

Architecture

craft-agent/
├── apps/
│   └── electron/              # Desktop GUI (primary)
│       └── src/
│           ├── main/          # Electron main process
│           ├── preload/       # Context bridge
│           └── renderer/      # React UI (Vite + shadcn)
└── packages/
    ├── core/                  # Shared types
    └── shared/                # Business logic
        └── src/
            ├── agent/         # CraftAgent, permissions
            ├── auth/          # OAuth, tokens
            ├── config/        # Storage, preferences, themes
            ├── credentials/   # AES-256-GCM encrypted storage
            ├── sessions/      # Session persistence
            ├── sources/       # MCP, API, local sources
            └── statuses/      # Dynamic status system

Development

# Hot reload development
bun run electron:dev

# Build and run
bun run electron:start

# Type checking
bun run typecheck:all

# Debug logging (writes to ~/Library/Logs/Craft Agents/)
# Logs are automatically enabled in development

Environment Variables

OAuth integrations (Google, Slack, Microsoft) require credentials. Create a .env file:

MICROSOFT_OAUTH_CLIENT_ID=your-client-id
GOOGLE_OAUTH_CLIENT_SECRET=your-google-client-secret
GOOGLE_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com
SLACK_OAUTH_CLIENT_ID=your-slack-client-id
SLACK_OAUTH_CLIENT_SECRET=your-slack-client-secret

See Google Cloud Console to create OAuth credentials.

Configuration

Configuration is stored at ~/.craft-agent/:

~/.craft-agent/
├── config.json              # Main config (workspaces, auth type)
├── credentials.enc          # Encrypted credentials (AES-256-GCM)
├── preferences.json         # User preferences
├── theme.json               # App-level theme
└── workspaces/
    └── {id}/
        ├── config.json      # Workspace settings
        ├── theme.json       # Workspace theme override
        ├── sessions/        # Session data (JSONL)
        ├── sources/         # Connected sources
        ├── skills/          # Custom skills
        └── statuses/        # Status configuration

Advanced Features

Large Response Handling

Tool responses exceeding ~60KB are automatically summarized using Claude Haiku with intent-aware context. The _intent field is injected into MCP tool schemas to preserve summarization focus.

Deep Linking

External apps can navigate using craftagents:// URLs:

craftagents://allChats                    # All chats view
craftagents://allChats/chat/session123    # Specific chat
craftagents://settings                    # Settings
craftagents://sources/source/github       # Source info
craftagents://action/new-chat             # Create new chat

Tech Stack

LayerTechnology
RuntimeBun
AI@anthropic-ai/claude-agent-sdk
DesktopElectron + React
UIshadcn/ui + Tailwind CSS v4
Buildesbuild (main) + Vite (renderer)
CredentialsAES-256-GCM encrypted file storage

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Third-Party Licenses

This project uses the Claude Agent SDK, which is subject to Anthropic's Commercial Terms of Service.

Trademark

"Craft" and "Craft Agents" are trademarks of Craft Docs Ltd. See TRADEMARK.md for usage guidelines.

Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.

Security

Local MCP Server Isolation

When spawning local MCP servers (stdio transport), sensitive environment variables are filtered out to prevent credential leakage to subprocesses. Blocked variables include:

  • ANTHROPIC_API_KEY, CLAUDE_CODE_OAUTH_TOKEN (app auth)
  • AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
  • GITHUB_TOKEN, GH_TOKEN, OPENAI_API_KEY, GOOGLE_API_KEY, STRIPE_SECRET_KEY, NPM_TOKEN

To explicitly pass an env var to a specific MCP server, use the env field in the source config.

To report security vulnerabilities, please see SECURITY.md.