Most terminal editors are general-purpose. Vim, Helix, nano — they edit files well, but they know nothing about the execution environment around them. When you're writing a 0sh script that will run inside a CellOS cell with scoped secrets, the editor doesn't know what authority the script has declared, what secrets are in scope, or whether the types line up.
tedit is a terminal editor built specifically for this stack. It's not competing with Vim. Its differentiator is knowing what you're editing.
Two modes, one binary
tedit has two modes with the same binary, same keybindings, same muscle memory.
| Mode | Invocation | What it is |
|---|---|---|
| CLI mode | tedit file.0sh | Full-screen single-file editor. nano-style: open, edit, save, quit. No file tree, no panes, no agent. |
| TUI mode | tedit . or tedit --project | Full development environment: file tree, editor, terminal pane, agent pane. VS Code layout in the terminal. |
The difference is scope, not the tool. CLI mode is for fast edits on a server, in a pipeline, when you need to change one file and get out. TUI mode is for sustained development work.
CLI mode also supports pipes:
When stdin is a pipe, tedit opens the content for editing. On save+quit, the content goes to stdout. This makes tedit a pipeline-aware editor.
The TUI layout
Four panes. All resizable and collapsible. The terminal pane runs 0sh directly — with tsafe context visible and typed output. The agent pane is togglable and wired to the editor context.
What makes it ecosystem-aware
The editor connects to the cellshell-lsp language server for .0sh and .cell files. For these file types, it gives you:
- — parse errors and type errors as you type, sourced directly from the 0sh parser and type checker
- — hover a command to see what effects it declares (reads_filesystem, uses_secrets, network_access, etc.)
- — commands, methods, variables, file paths — aware of the 0sh type system, not generic text completion
- — jump to function or variable definition in the current project
The terminal pane shows tsafe context when running inside a tsafe environment — which profile is active, which namespace, whether an agent session is live. The agent pane surfaces taudit findings for the current file in V2.
Language support
| Language | Extensions | Priority |
|---|---|---|
| 0sh | *.0sh | P0 — ships first |
| Cell manifest | *.cell | P0 |
| TOML / JSON / YAML / Markdown | *.toml, *.json, *.yaml, *.md | P0 |
| Rust | *.rs | P1 |
| Python / Bash / Go | *.py, *.sh, *.go | P1 |
| TypeScript / HCL | *.ts, *.tsx, *.tf | P2 |
Where it fits
tedit is a consumer surface over the 0sh kernel — its own repo, quality gate, and release cadence. The shell kernel stays sealed. tedit is what you run when writing the scripts that run inside it.
The tsafe TUI (Ratatui + crossterm) is the reference implementation for the terminal stack. tedit pins to the same major versions until intentionally upgraded, so the two tools look and feel consistent in the terminal.
Current state
Scaffolded with five MVP crates: zero-ed-core (contracts and capability interfaces), zero-ed-editor (buffer primitives), zero-ed-terminal (shell hosting abstractions), zero-ed-filetree (file tree model), and zero-ed-app (entrypoint and mode routing). The design is frozen. Implementation is underway.