Code on the canvas: schema, editor, LSP
Source code stays on your machine behind the agent. The canvas receives the structure and the text of files, while parsing, checks and writes happen where the files live.
Code schema
"Data → 🗂 Code schema…": pick the team agent, its folder (a mount from agent.json, mode rw if you plan to edit) and the path inside, usually lib. The agent parses the files locally and sends only the structure. The canvas gets a group "Code: agent/folder/path": files as groups, classes as cards with members, import edges dashed and inheritance edges solid.
Reading again updates the group in place: new files are added, removed ones fade out, your arrangement stays. Dart is parsed by the agent. For languages described in f2plw the agent sends the file texts, the server sidecar parses them, and the canvas gets the language tables as cards with rows as members.
File editor
A file or class card has a "Code" section in the inspector. "⌨ Code…" opens the file in the editor at that line.
| Feature | How |
|---|---|
| Tabs | Ctrl+Tab, "+ file…" opens a neighbouring schema file by path |
| Save | Ctrl+S writes the file to the agent, the folder must be rw |
| Close | Ctrl+W, Esc warns about unsaved changes |
| Multi-caret | Ctrl+D adds the next occurrence, Ctrl+Shift+L all of them, Esc clears |
| Indent | Tab and Shift+Tab, Enter keeps the indent |
| Comment | Ctrl+/ |
| Go to | Ctrl+G line, Ctrl+Shift+O file structure |
| Wrapping | the ↩ toggle, unwrapped code scrolls horizontally |
| Check | "✓" runs the analyzer at the agent, markers in the gutter, the first problem in the footer |
Highlighting is chosen by extension: dart, php, python, js and ts, sh, css, html, json, yaml, sql and f2plw languages. Carets of teammates who opened the same file are shown over the text.
Language server through the agent
If agent.json lists a language server, the editor gets live hints from it:
"lsp": {
"dart": "dart language-server --protocol=lsp",
"php": "intelephense --stdio"
}
The agent starts a process per folder and language on first use and stops it after ten idle minutes. The cloud never chooses the command, only a language from the list. After a pause in editing diagnostics arrive, Ctrl+Space completes at the caret, F12 goes to the definition, Ctrl+Q shows a symbol hint, F2 renames a symbol across the folder. File text travels to the agent and back and is not stored on the server.
f2plw languages in the editor
A file in a language described in f2plw opens with plw:<LANG> highlighting. After each pause the editor sends the text to the sidecar for a check and colours lexemes by parser state: comments, strings, numbers, language words. Problems get a position, a state and the list of what was expected. Ctrl+Space first shows what is allowed in the current state, then language and document words. Files longer than four hundred lines are checked in chunks, only changed chunks are re-checked after an edit.
Code right on the canvas
A file card has "▦ To canvas": a "📄 Code file" node appears with highlighted text. F2 or a double click opens inline editing with the same indentation rules, Ctrl+Enter applies, Esc cancels. In the inspector "💾 Save" writes the file to the agent, "↻ Reload" fetches fresh text, "✓ Check" asks the sidecar or the language server, "⌨ In editor" opens the same file in a tab. The palette item "📄 Code file" places an empty node for code without a file, its text can be passed along edges anywhere.
Permissions
Reading structure and files needs the cap.file capability. Writing and language servers also need write access in the room and cap.shell. Commands at the agent are limited by its own allow list.
← Teams, rights and the cabinet Project: jobs, meta-language, build chain →