Editor (Monaco + LSP)
The same editor engine VS Code uses, with full Language Server Protocol support for whatever languages the workspace has servers installed for.
What you get out of the box
- Syntax highlighting for ~70 languages.
- Diagnostics — red squigglies for syntax errors and type errors, within ~500ms of the keystroke.
- Hover tooltips — symbol signatures and docstrings.
- Completions —
Ctrl+Spaceto trigger. - Go to definition —
F12(or⌘-click). - Find references —
Shift+F12. - Rename symbol —
F2. - Multi-cursor —
Alt+Clickto add a cursor;Ctrl+Dto add the next match. - Format on save — when a formatter is configured.
Language servers
The LSP backend runs on the server side. KrowForge proxies a single workspace LSP session per language. Currently bundled:
- Python —
pyright/pylsp(whichever is installed in the workspace's environment). - TypeScript / JavaScript —
typescript-language-server. - JSON — built-in Monaco JSON service.
- Markdown — built-in.
- Other languages — fall back to syntax highlighting only unless a server is installed in the workspace.
To add a new server, install it in the workspace (e.g. pip install python-lsp-server) and restart the workspace.
Buffer persistence
Open a file → edit → close it → re-open it. Your cursor position and scroll are restored. KrowForge holds an unsaved-changes buffer per file in the browser; save (⌘S / Ctrl+S) writes to disk.
File save side effects
Every successful save triggers a few background things:
- Embed-index upsert — the file's chunks are re-embedded so Ask the codebase sees the latest version within ~2 seconds.
- LSP didChange + didSave — the language server is notified.
- Watchers — any registered file-watch hooks (test runners, agent watchers) fire.
When Monaco fails to load
If you open a file and see a plain <textarea> instead of the rich editor, and the browser console says:
[KFMonaco] load failed: monaco loader.js failed to fetch
The CDN was blocked by the page's Content-Security-Policy. The current build allows https://cdn.jsdelivr.net. Hard-refresh (Ctrl+Shift+R) to clear any stale CSP from a previous build.
If the problem persists, see Troubleshooting.