Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
c0262c1
added filesystem view in the application.
arnavv-guptaa Jan 17, 2026
66e174c
updated git file tracking
arnavv-guptaa Jan 17, 2026
3eb3263
updated filesystem tracking
arnavv-guptaa Jan 17, 2026
5596732
added glide data viewer
arnavv-guptaa Jan 18, 2026
e90b18a
Adding parquet support and file viewer
arnavv-guptaa Jan 18, 2026
a7072b0
working file viewer
arnavv-guptaa Jan 18, 2026
5bd815b
added file actions
arnavv-guptaa Jan 18, 2026
952aa76
Fixed parquet support with duckdb
arnavv-guptaa Jan 18, 2026
1141060
Updated duckdb data parser
arnavv-guptaa Jan 18, 2026
394ff59
Added file drag and drop and copy-paste into filesystem.
arnavv-guptaa Jan 18, 2026
138aca9
fixed drag and drop of files internally
arnavv-guptaa Jan 18, 2026
988a8a5
Fixed a few things in files section
arnavv-guptaa Jan 18, 2026
3424afa
removed json from data viewer
arnavv-guptaa Jan 18, 2026
ee508dc
added sql runner in data viewer.
arnavv-guptaa Jan 18, 2026
6c228d8
adding support for more file types in viewer
arnavv-guptaa Jan 18, 2026
c55e65f
fixed 1 launch warning and data viewer handling of changing data file
arnavv-guptaa Jan 19, 2026
3ece0e0
updated gitignore to add test-data
arnavv-guptaa Jan 19, 2026
06ad3ad
removed sample data from git tracking.
arnavv-guptaa Jan 19, 2026
c255dcd
working on fixing filesystem. Mid-work commiut
arnavv-guptaa Jan 19, 2026
c3d05ca
trying to fix xls and xlsx issues for data viewer
arnavv-guptaa Jan 20, 2026
f5ba185
Fixing file icons in the filesystem and data and file viewer.
arnavv-guptaa Jan 20, 2026
b6fe5ea
Update data-viewer-sidebar.tsx
arnavv-guptaa Jan 20, 2026
5bf6ba6
Moved action section. Improve data viewer design
arnavv-guptaa Jan 20, 2026
1ce8afc
Update data-viewer-sidebar.tsx
arnavv-guptaa Jan 20, 2026
5ab37b8
fixed xlsx and xls data viewer support
arnavv-guptaa Jan 20, 2026
2b1742c
Fixing the filesystem, removing pdf preview and ms office icons.
arnavv-guptaa Jan 20, 2026
8f5ba2a
removed html preview and added error handling to all viewers
arnavv-guptaa Jan 20, 2026
d1be720
fixed copy paste from clipboard
arnavv-guptaa Jan 21, 2026
41f3282
Added pre component to markdown viewer
arnavv-guptaa Jan 21, 2026
9dd2a7d
fixing file viewing for when modified for viewer
arnavv-guptaa Jan 21, 2026
886aa3b
added icons for gitignore and .lock icons
arnavv-guptaa Jan 21, 2026
e446753
Updated File/Data viewer section
arnavv-guptaa Jan 21, 2026
b520bc3
updated filesystem section after review
arnavv-guptaa Jan 21, 2026
8f93038
Update use-file-content.ts
arnavv-guptaa Jan 21, 2026
b880d99
Update FileTreeSidebar.tsx
arnavv-guptaa Jan 21, 2026
340c0e2
Update FileTreeSidebar.tsx
arnavv-guptaa Jan 21, 2026
53a94ba
Update FileTreeContextMenu.tsx
arnavv-guptaa Jan 21, 2026
50b88aa
Update files.ts
arnavv-guptaa Jan 21, 2026
0f86075
Update files.ts
arnavv-guptaa Jan 21, 2026
2ac6d7f
Update FileTreeSidebar.tsx
arnavv-guptaa Jan 21, 2026
a24449f
Merge pull request #2 from arnavv-guptaa/dev-arnav
arnavv-guptaa Jan 21, 2026
6479217
Merge upstream/main - sync with 21st-dev updates
arnavv-guptaa Jan 21, 2026
2b72f6f
Fixed claude abort issue when switching out of Plan Mode
arnavv-guptaa Jan 22, 2026
c350496
added agent creation support. removed agent creation in modal
arnavv-guptaa Jan 24, 2026
13b7c8b
added agents at ":" in addition to in the @ thing
arnavv-guptaa Jan 24, 2026
fc83103
fixed to get the agents created by claude code cli
arnavv-guptaa Jan 24, 2026
d2aaf61
agents thing working. Question to self: should we show only global ag…
arnavv-guptaa Jan 24, 2026
f4fefa2
added .claude to gitignore
arnavv-guptaa Jan 24, 2026
01105b9
Merge branch 'dev-arnav'
arnavv-guptaa Jan 24, 2026
1ab5887
Merge remote-tracking branch 'upstream/main'
arnavv-guptaa Jan 24, 2026
504d520
update to ensure symlink skills are visible in settings.
arnavv-guptaa Jan 25, 2026
ddadefd
merge from upstream update
arnavv-guptaa Jan 25, 2026
be5a220
Update index.ts
arnavv-guptaa Jan 25, 2026
2d62e2e
Update framework-icons.tsx
arnavv-guptaa Jan 25, 2026
539c7cd
Merge remote-tracking branch 'upstream/main'
arnavv-guptaa Jan 25, 2026
7ec1a18
Merge remote-tracking branch 'upstream/main'
arnavv-guptaa Jan 26, 2026
abcabeb
rename
arnavv-guptaa Jan 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ VITE_POSTHOG_HOST=https://us.i.posthog.com
# Set this in hosted builds to use a private feedback channel
# VITE_FEEDBACK_URL=https://discord.gg/your-private-invite

# API URL (optional - defaults to https://21st.dev)
# API URL (optional - defaults to https://getcrunch.dev)
# Only change this if you're running the web app locally
# MAIN_VITE_API_URL=http://localhost:3000

Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,9 @@ electron.vite.config.*.mjs

# Claude binary (downloaded at build time)
resources/bin/

# Test data (local testing only)
test-data/

# Claude Code local config
.claude/
24 changes: 12 additions & 12 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

## What is this?

**21st Agents** - A local-first Electron desktop app for AI-powered code assistance. Users create chat sessions linked to local project folders, interact with Claude in Plan or Agent mode, and see real-time tool execution (bash, file edits, web search, etc.).
**Crunch** - A local-first Electron desktop app for AI-powered code assistance. Users create chat sessions linked to local project folders, interact with Claude in Plan or Agent mode, and see real-time tool execution (bash, file edits, web search, etc.).

## Commands

Expand Down Expand Up @@ -165,8 +165,8 @@ rm -rf ~/Library/Application\ Support/Agents\ Dev/
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user

# 3. Clear app preferences
defaults delete dev.21st.agents.dev # Dev mode
defaults delete dev.21st.agents # Production
defaults delete dev.getcrunch.app.dev # Dev mode
defaults delete dev.getcrunch.app # Production

# 4. Run in dev mode with clean state
cd apps/desktop
Expand All @@ -178,16 +178,16 @@ bun run dev
- **Folder dialog not appearing**: Window focus timing issues on first launch. Fixed by ensuring window focus before showing `dialog.showOpenDialog()`.

**Dev vs Production App:**
- Dev mode uses `twentyfirst-agents-dev://` protocol
- Dev mode uses `crunch-dev://` protocol
- Dev mode uses separate userData path (`~/Library/Application Support/Agents Dev/`)
- This prevents conflicts between dev and production installs

## Releasing a New Version

### Prerequisites for Notarization

- Keychain profile: `21st-notarize`
- Create with: `xcrun notarytool store-credentials "21st-notarize" --apple-id YOUR_APPLE_ID --team-id YOUR_TEAM_ID`
- Keychain profile: `crunch-notarize`
- Create with: `xcrun notarytool store-credentials "crunch-notarize" --apple-id YOUR_APPLE_ID --team-id YOUR_TEAM_ID`

### Release Commands

Expand All @@ -210,7 +210,7 @@ npm version patch --no-git-tag-version # 0.0.27 → 0.0.28

### After Release Script Completes

1. Wait for notarization (2-5 min): `xcrun notarytool history --keychain-profile "21st-notarize"`
1. Wait for notarization (2-5 min): `xcrun notarytool history --keychain-profile "crunch-notarize"`
2. Staple DMGs: `cd release && xcrun stapler staple *.dmg`
3. Re-upload stapled DMGs to R2 and GitHub (see RELEASE.md for commands)
4. Update changelog: `gh release edit v0.0.X --notes "..."`
Expand All @@ -223,14 +223,14 @@ npm version patch --no-git-tag-version # 0.0.27 → 0.0.28
|------|---------|
| `latest-mac.yml` | Manifest for arm64 auto-updates |
| `latest-mac-x64.yml` | Manifest for Intel auto-updates |
| `1Code-{version}-arm64-mac.zip` | Auto-update payload (arm64) |
| `1Code-{version}-mac.zip` | Auto-update payload (Intel) |
| `1Code-{version}-arm64.dmg` | Manual download (arm64) |
| `1Code-{version}.dmg` | Manual download (Intel) |
| `Crunch-{version}-arm64-mac.zip` | Auto-update payload (arm64) |
| `Crunch-{version}-mac.zip` | Auto-update payload (Intel) |
| `Crunch-{version}-arm64.dmg` | Manual download (arm64) |
| `Crunch-{version}.dmg` | Manual download (Intel) |

### Auto-Update Flow

1. App checks `https://cdn.21st.dev/releases/desktop/latest-mac.yml` on startup and when window regains focus (with 1 min cooldown)
1. App checks `https://cdn.getcrunch.dev/releases/desktop/latest-mac.yml` on startup and when window regains focus (with 1 min cooldown)
2. If version in manifest > current version, shows "Update Available" banner
3. User clicks Download → downloads ZIP in background
4. User clicks "Restart Now" → installs update and restarts
Expand Down
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Contributing to 1Code
# Contributing to Crunch

## Building from Source

Expand All @@ -13,9 +13,9 @@ bun run package:mac # Create distributable

## Open Source vs Hosted Version

This is the open-source version of 1Code. Some features require the hosted backend at 1code.dev:
This is the open-source version of Crunch. Some features require the hosted backend at getcrunch.dev:

| Feature | Open Source | Hosted (1code.dev) |
| Feature | Open Source | Hosted (getcrunch.dev) |
|---------|-------------|-------------------|
| Local AI chat | Yes | Yes |
| Claude Code integration | Yes | Yes |
Expand Down
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# 1Code
# Crunch

[1Code.dev](https://1code.dev)
[getcrunch.dev](https://getcrunch.dev)

Best UI for Claude Code with local and remote agent execution.

By [21st.dev](https://21st.dev) team
By [getcrunch.dev](https://getcrunch.dev) team

> **Platforms:** macOS, Linux, and Windows. Windows support improved thanks to community contributions from [@jesus-mgtc](https://github.com/jesus-mgtc) and [@evgyur](https://github.com/evgyur).

## 1Code vs Claude Code
## Crunch vs Claude Code

| Feature | 1Code | Claude Code |
| Feature | Crunch | Claude Code |
|---------|-------|-------------|
| **Visual UI** | ✅ Cursor-like desktop app | ✅ |
| **Git Worktree Isolation** | ✅ Each chat runs in isolated worktree | ✅ |
Expand Down Expand Up @@ -90,11 +90,11 @@ bun run package:mac # or package:win, package:linux

> **Important:** The `claude:download` step downloads the Claude CLI binary which is required for the agent chat to work. If you skip this step, the app will build but agent functionality won't work.

### Option 2: Subscribe to 1code.dev (recommended)
### Option 2: Subscribe to getcrunch.dev (recommended)

Get pre-built releases + background agents support by subscribing at [1code.dev](https://1code.dev).
Get pre-built releases + background agents support by subscribing at [getcrunch.dev](https://getcrunch.dev).

Your subscription helps us maintain and improve 1Code.
Your subscription helps us maintain and improve Crunch.

## Development

Expand Down
Binary file modified bun.lockb
Binary file not shown.
31 changes: 21 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"name": "21st-desktop",
"name": "crunch-desktop",
"version": "0.0.46",
"private": true,
"description": "1Code - UI for parallel work with AI agents",
"description": "Crunch - UI for parallel work with AI agents",
"author": {
"name": "21st.dev",
"email": "support@21st.dev"
"name": "getcrunch.dev",
"email": "support@getcrunch.dev"
},
"main": "out/main/index.js",
"scripts": {
Expand Down Expand Up @@ -36,7 +36,9 @@
"@anthropic-ai/claude-agent-sdk": "^0.2.12",
"@git-diff-view/react": "^0.0.35",
"@git-diff-view/shiki": "^0.0.36",
"@glideapps/glide-data-grid": "^6.0.3",
"@modelcontextprotocol/sdk": "^1.25.3",
"@monaco-editor/react": "^4.7.0",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-checkbox": "^1.3.3",
Expand All @@ -61,6 +63,7 @@
"@trpc/client": "^11.7.1",
"@trpc/react-query": "^11.7.1",
"@trpc/server": "^11.7.1",
"@types/lodash-es": "^4.17.12",
"@xterm/addon-canvas": "^0.7.0",
"@xterm/addon-fit": "^0.11.0",
"@xterm/addon-search": "^0.16.0",
Expand All @@ -74,15 +77,21 @@
"clsx": "^2.1.1",
"date-fns": "^3.6.0",
"drizzle-orm": "^0.45.1",
"duckdb": "^1.4.3",
"electron-log": "^5.4.3",
"electron-updater": "^6.7.3",
"gray-matter": "^4.0.3",
"jotai": "^2.11.1",
"jotai-family": "^1.0.1",
"lodash-es": "^4.17.22",
"lucide-react": "^0.468.0",
"mermaid": "^11.12.2",
"monaco-editor": "^0.55.1",
"motion": "^11.15.0",
"next-themes": "^0.4.4",
"node-pty": "^1.1.0",
"papaparse": "^5.5.3",
"parquetjs-lite": "^0.8.7",
"pidtree": "^0.6.0",
"posthog-js": "^1.239.1",
"posthog-node": "^5.20.0",
Expand All @@ -103,6 +112,7 @@
"tailwindcss-animate": "^1.0.7",
"trpc-electron": "^0.1.2",
"unique-names-generator": "^4.7.1",
"xlsx": "^0.18.5",
"xterm": "^5.3.0",
"zod": "^3.24.1",
"zustand": "^5.0.3"
Expand All @@ -112,6 +122,7 @@
"@electron-toolkit/utils": "^4.0.0",
"@types/better-sqlite3": "^7.6.13",
"@types/node": "^20.17.50",
"@types/papaparse": "^5.5.2",
"@types/react": "^19.0.7",
"@types/react-dom": "^19.0.3",
"@types/react-syntax-highlighter": "^15.5.13",
Expand All @@ -129,14 +140,14 @@
"vite": "^6.3.4"
},
"build": {
"appId": "dev.21st.agents",
"productName": "1Code",
"appId": "dev.getcrunch.app",
"productName": "Crunch",
"npmRebuild": true,
"protocols": [
{
"name": "1Code",
"name": "Crunch",
"schemes": [
"twentyfirst-agents"
"crunch"
]
}
],
Expand Down Expand Up @@ -194,7 +205,7 @@
"entitlements": "build/entitlements.mac.plist",
"entitlementsInherit": "build/entitlements.mac.plist",
"extendInfo": {
"NSMicrophoneUsageDescription": "1Code needs microphone access for voice dictation"
"NSMicrophoneUsageDescription": "Crunch needs microphone access for voice dictation"
}
},
"dmg": {
Expand Down Expand Up @@ -240,7 +251,7 @@
},
"publish": {
"provider": "generic",
"url": "https://cdn.21st.dev/releases/desktop"
"url": "https://cdn.getcrunch.dev/releases/desktop"
}
}
}
8 changes: 4 additions & 4 deletions src/main/auth-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import { AUTH_SERVER_PORT } from "./constants"
// Get API URL - in packaged app always use production, in dev allow override
function getApiBaseUrl(): string {
if (app.isPackaged) {
return "https://21st.dev"
return "https://getcrunch.dev"
}
return import.meta.env.MAIN_VITE_API_URL || "https://21st.dev"
return import.meta.env.MAIN_VITE_API_URL || "https://getcrunch.dev"
}

export class AuthManager {
Expand Down Expand Up @@ -79,7 +79,7 @@ export class AuthManager {
const platform = process.platform
const arch = process.arch
const version = app.getVersion()
return `21st Desktop ${version} (${platform} ${arch})`
return `Crunch Desktop ${version} (${platform} ${arch})`
}

/**
Expand Down Expand Up @@ -216,7 +216,7 @@ export class AuthManager {
if (this.isDev) {
authUrl += `&callback=${encodeURIComponent(`http://localhost:${AUTH_SERVER_PORT}/auth/callback`)}`
// Pass dev protocol so production web can use correct deep link if callback fails
authUrl += `&protocol=twentyfirst-agents-dev`
authUrl += `&protocol=crunch-dev`
}

shell.openExternal(authUrl)
Expand Down
Loading