StrideLabs
Tools from the lab · stridelabs.ai Built with agents

The Writing

Lead story
All writing ↗
Roost · 4 min read

Building Roost: a terminal I extend and use daily

Why I built my own terminal: a native macOS and Linux app on libghostty, organized by project, with quick theme/font switching and scriptable launch points for the commands I run most.

I built my own terminal because I wanted one I could make my own. The starting point was a small itch: I liked how cmux organizes work into projects, and I wanted that shape on Linux as well as macOS, on a terminal I understood well enough to extend. So Roost began as a cmux-like, project-organized terminal built on libghostty.

The first cut was a Go app that bundled GTK through cgo and ran on both platforms. Once I had used it enough to know I wanted to keep using it, I rebuilt it native per platform: Swift and AppKit on macOS, Rust and gtk4-rs on Linux. Building on libghostty was deliberate. I like Ghostty, I have a lot of respect for Mitchell Hashimoto's work and writing, and libghostty was encouraged as a reusable terminal foundation. That made it the natural starting point: high-quality terminal work I could build on while staying native and lean instead of reaching for web tech to render a terminal.

The Tools

Open-source projects
All projects ↗
Roost Desktop app · Rust · Swift

A desktop terminal for running several coding agents without losing the thread.

A native macOS + Linux terminal that keeps Claude Code, Codex, OpenCode, and regular shells organized by project. Built on libghostty-vt, with quick theme/font switching, scriptable launch points, and early native agent integration.

Shed Dev environments · Go

Cross-platform microVM environments with an agent-forward design.

Run coding agents inside microVMs (Firecracker on Linux, Apple Virtualization on macOS) on your laptop or a fleet of servers over Tailscale. Build a standard base environment you can SSH into anywhere, with host-side credential brokering, local mounts, persistent sessions, and plans that can run unattended.

Prox Process manager · Go

The local process manager I wanted for agent-assisted development.

Start your project's processes with one command, then let you and your coding agent both watch and control them over an API: tail logs, inspect HTTP requests, restart one service. A TUI gives humans real-time logs with search; an optional mkcert-backed proxy puts services on friendly local HTTPS domains, even sharing one port across several projects, so you can stop memorizing ports.

Strix Terminal UI · Rust

A git TUI for reviewing agent diffs with first-class mouse support.

A git diff and staging viewer with side-by-side diffs, history, first-class mouse support, syntax highlighting, and theming, all in the terminal. It auto-refreshes as files change, so you can watch an agent's edits land in real time and stage deliberately.

Codelens Code intelligence · Kotlin · Go

Structural answers for JVM codebases, from bytecode instead of grep.

Fast structural lookups for a coding agent working in a JVM codebase: who implements this, who references this type, what this method calls. Answers come from compiled bytecode and the resolved Gradle classpath, not text search.

Envsecrets CLI · Go

Sync .env files across your machines, with history and cloud encryption.

A simple, single-user CLI for syncing .env files across your own machines and sheds. Files are versioned with a git-like history and stored age-encrypted in a Google Cloud Storage bucket; status tells you whether to push, pull, or reconcile, and sync runs the safe action without silently overwriting another machine's changes.

Behind the build

The lab
Charlie Knudsen

StrideLabs is where I share the tools I build.

I'm Charlie Knudsen, a software engineer building the developer tools I want in my own workflow. Most of these projects come from coding alongside agents like Claude Code, then polishing the parts that keep proving useful.

RustGoKotlinSwiftTypeScriptSystems & CLIsDeveloper UXAI agent tooling