Help becomes a workspace.
Arguments on the left. Their explanation on the right. Shared colors bring structure to both panes, while the tool description stays in view.
Topics → Explanation → Compose example
Explore Help → ComposeA composable, native Zsh environment
A prompt that responds as you type. Help that opens into an editable draft. Changes you can explore, folder by folder. One native workspace, with room to think.
Native Zsh 5.9+ macOS-first Open source
~ · child directories · hidden off
↵ previewEsc cancel↑/↓ moveOption-1–5 with empty input
2 unstaged · 1 new · fixed snapshot
All files · Repository · captured sample
FILES3
FOCUSED DIFFREAD ONLY
↵ read / fold↑/↓ move
TEXT repeats bounded pieces; flow, control and redirect rows summarize visible structure.
Context and local manual summaries were captured before editing.
Inferred ACTION uses qualifiers. Help-derived ACTION names documented intent. Neither validates a command.
User-selected fixed examples. This page never observes your command line, filesystem, Git state, environment or network.
The Context lens brings captured project, path, Git and toolchain facts into one prompt. Choose a fixed example to explore how it changes while editing.
Feature guideTRY IT ↑ Browser demo · fixed synthetic data · user controlled.
Follow the thought through
Small, connected interactions that keep the next step visible—and yours to choose.
Arguments on the left. Their explanation on the right. Shared colors bring structure to both panes, while the tool description stays in view.
Topics → Explanation → Compose example
Explore Help → ComposeEdit literal fields and inspect the quoted command as it changes. Replace draft closes the workspace and returns you to editing. You decide when to run it.
Fields → Draft → Ordinary prompt
Available for Git review and mkcd. Option-Return needs Option as Meta in Terminal.
The change atlas groups captured Git entries by folder. Open a file, read its diff, and return to the same review position. Bars count entries, not lines.
Folders → Files → Diff → Back
Explore the change atlasAll examples above are browser simulations. They use bounded sample data, never execute a command, and never discover files or repositories on your machine. The living prompt reacts to editing; data capture follows each tool’s documented scope.
01 / The everyday, considered
One familiar interaction, wherever the next step takes you.
Open ~/, ./ or another path with Tab. Ctrl-F searches beneath the displayed folder. Select a file, then choose Open, Reveal in Finder, Copy or Insert. Option-Tab brings your recent folders into the same workspace.
Find a command by the fragments you remember, in any order. History search returns it to your editable prompt, ready for you to review and run.
Start in All files, with clear change states beside each filename. Choose Tree to expand folders and read their captured change summaries. Selecting a file opens its focused, syntax-aware diff. Both views retain your filters and reading position; Working changes refreshes locally.
g --discard-all previews repository-wide changes and asks before discarding them.One shared interaction
Files, branches, history, help and Git review share a full-screen grammar: a clear title, one primary task, visible focus and quiet secondary context. Selected paths and pane titles stay readable as focus moves. The layout adapts to your terminal, and transitions preserve your place.
Arrows follow spatial disclosure. Enter applies the action shown. Escape goes back. Ctrl-] switches between filtering and exclusion where available. The last shortcut, Ctrl-K, opens all applicable keys, with distinct colors for labels, descriptions and notes. Press it again to return to your place. Closing restores your terminal; inserted paths stay visible for review.
Explore the shared controls02 / A place for your way of working
Keep the shared configuration clean. Keep your machine setup private. Compose the rest from small, focused files.
Build your first add-on~/.zshrcFinds and loads your configuration~/.zsh.addons/local/init.zshOptional. Loads first. Sets up PATH and early tool hooks.
.zsh.prompt
.zsh.editor
.zsh.find
….zsh.work
.zsh.postgres
.zsh.your-idea
…One naming convention. Shared and private files load as peers.
The math behind the idea
Small, independent pieces give us three useful laws. Here, ⊕ means combining peer configuration, and ≈ means equivalent configured behavior.
Change the order. Loading the same peers in a different order gives you the same configured behavior.
Change the grouping. Organize peers into folders that make sense to you. Grouping adds no loading phase.
Load it again. Re-sourcing an unchanged peer preserves its setup without stacking duplicate hooks or registrations.
Same pieces. Same result.
INTERACTIVE MODELA → B → C
A · B · C
Composition combines pieces into a workflow; its steps can depend on order. These laws govern peer setup under the same prerequisites and ownership rules, with capabilities checked at invocation. Compare behavior after loading finishes. The optional initializer still loads first and sits outside these laws. Runtime operations keep their sequence: capture candidates, then filter, then act. Regression tests check the shell contract; this model illustrates it.
Read the loading contractA file is the feature. Name it .zsh.something inside your add-on directory. Rename it to break that prefix, or remove it, to disable it.
03 / Make yourself at home
The installer shows its plan, backs up what it replaces, and leaves your private configuration intact.
Clone once into a stable location. Already cloned? Set repo_dir to that folder instead.
repo_dir="$HOME/Projects/compozsh"
git clone https://github.com/bitbemol/compozsh.git "$repo_dir"A dry run previews the plan and leaves your files unchanged.
zsh "$repo_dir/install.zsh" --symlink --dry-runRun the installer, review the plan, and confirm. After it succeeds, start a fresh shell.
zsh "$repo_dir/install.zsh" --symlinkexec zshKeep it as it is. The installer archives the active file before replacing it. Move your personal setup into the private initializer or focused add-ons.
Full installation and recovery guideIn Terminal → Settings → Profiles → your profile → Keyboard, enable Use Option as Meta key. Option-I pins the Context lens, Option-Tab opens Recents, and Option-Return inspects the current draft. Automatic lens changes and primary in-view actions need no Option setting.
Keyboard setupPath + Tab and Option-Tab replace f and d. Reload with exec zsh after updating. Personal add-ons remain in your private configuration space.
Replace --symlink with --copy in the preview and install commands. Copy mode keeps a managed snapshot; rerun the copy installer after updates. In symlink mode, shared changes arrive with a Git pull. Your private files stay separate in either mode.
Small pieces. One coherent experience.