An agentic word processor for technical essay writers. Combines the aesthetics of the best writing tools with the power of Claude Code, git, and Markdown.
Annotate your draft with comments — "find a link for this claim", "this paragraph reads clunky", "is this actually true?" — and Claude acts on them when you're ready. Or let Claude generate comments as an editor and writing coach, helping you refine your prose.
Kale integrates with Claude Code through its IDE MCP server (activated with /ide) and lets you select lines for Claude to focus on, the same way VS Code and Cursor do.
Born from the workflow behind kuril.in, packaged into the tool I wished existed.
- Node.js v22 or later
- Claude Code CLI — powers the built-in terminal (
npm install -g @anthropic-ai/claude-code) - Git — used for file history, branch switching, and single-file commits
git clone https://github.com/akurilin/kale.git
cd kale
npm install
npm startThis launches the app in development mode. On first launch, Kale opens a default scratch document. Use File > Open or File > New to work with your own Markdown files.
Kale is a Markdown editor. Open any .md file and start writing. Formatting is rendered inline as you type — headings, bold, italic, links, and code all preview live without a separate preview pane. On wider windows, the prose column stays centered on the pane and only shifts left when needed to keep inline comments visible.
Select text and add a comment to annotate your draft. Comments are stored directly in the Markdown file as HTML comment markers, so they travel with the file and work with git diffs. On wide windows, comment cards stay beside the prose column instead of drifting to the far edge of the pane.
Use comments to leave instructions for Claude ("find a citation for this", "rewrite this paragraph") or as personal notes.
The right side of the window is an embedded Claude Code terminal. Claude can see your document context through the IDE MCP integration — select text in the editor and Claude knows what you're focused on.
Use the preset prompt buttons or type directly in the terminal to interact with Claude.
Collapsing or expanding the terminal only changes the workspace split inside Kale. The native window size stays fixed.
Kale launches claude by default, but QA/debug sessions can swap the terminal command without editing the app code:
KALE_TERMINAL_PROFILE=claude-safe npm startlaunches Claude without dangerous permission bypass and with tools disabled.KALE_TERMINAL_PROFILE=shell npm startlaunches an interactive shell instead of Claude.KALE_TERMINAL_COMMAND=/bin/cat KALE_TERMINAL_ARGS_JSON='["-v"]' npm startlaunches an arbitrary command with explicit JSON arguments.
The same overrides work with the CDP QA launcher. For example:
KALE_TERMINAL_PROFILE=claude-safe scripts/start-with-cdp.sh --instance claude-safe-qaKALE_TERMINAL_ARGS_JSON is only used together with KALE_TERMINAL_COMMAND, and it must be a JSON array of strings so test launches stay deterministic across shells and platforms.
When the active file is inside a git repository, Kale shows a collapsible file explorer on the left side of the workspace rooted at that repository's top-level directory.
The explorer lists markdown files from the repository filesystem, including untracked files, and lets you expand folders and open another document with a single click. If the active file is not inside a git repository, the explorer stays unavailable.
Collapsing or expanding the explorer also keeps the native window size unchanged. Explorer path handling is normalized internally so the pane behaves consistently across Windows and Unix-style path separators.
Kale is git-aware. If your Markdown file is inside a git repo, you can:
- Save (commit): commits just the active file with a stock message. The Save action is enabled only when the active file lives in a git repository and has changes to commit.
- Reset: restores the file from the latest commit
- Switch branches: move between branches without leaving the editor
| Shortcut | Action |
|---|---|
Cmd/Ctrl+B |
Bold |
Cmd/Ctrl+I |
Italic |
Cmd/Ctrl+Option/Alt+1..6 |
Heading level 1–6 |
Cmd/Ctrl+S |
Save (commit) |
Cmd/Ctrl+Enter |
Finish editing a comment |
To package the app for your platform:
npm run makeThis produces platform-specific distributables in the out/ directory.
npm testruns the unit test suite.npm run test:e2eruns the CI-safe E2E suite.npm run test:e2e:localruns developer-local E2E scenarios, including Claude-dependent regressions such as the safe-modeShift+Enterrepro. This suite is intentionally kept out of CI because it requires local Claude Code access and may stay red while a Claude-only bug is being fixed.
See ARCHITECTURE.md for detailed documentation of the codebase structure, runtime architecture, and design decisions.
Implementation notes and feature plans live in docs/, including the repository explorer plan in docs/repository-file-explorer-pane-plan.md.
