Points the submodule at absolute-vim 2d427aa and updates the README: snacks.nvim replaces Telescope, nvim-notify and dressing, blink.cmp replaces nvim-cmp, and the removed AI plugins are no longer listed.
owt title names the tmux windows of the current workspace with one to three words and saves the title in the worktree's git dir so owt open reuses it. owt hook runs on omo's UserPromptSubmit and reminds the agent of the current title so it retitles the tab as the work changes.
tmux-open-path takes the path under the mouse, strips :line:col, #L, @ and file:// decorations, and resolves it against the pane directory and then its git root. Markdown opens in Markdown Preview (added to Brewfile.apps), images, PDFs and directories in yazi, and everything else in nvim at the clicked line, both in a split beside the pane.
tma and tml now complete session names with window counts on Tab. When no tmux server is up, tma starts a new session named after the argument or the current directory, and tml and completion report it instead of erroring. tma switches the client inside tmux, matches names exactly and ignores a cancelled fzf pick; tml takes an optional prefix filter.
- Move the vendored skills from .config/opencode/skills to
.config/omo/skills, with provenance and local changes in its README
- Rewrite Impeccable's script paths to ~/.omo/agent/skills/impeccable so
its detector and live-server verbs resolve under omo
- frontend-workflow hands screenshots to a visual-engineering task
instead of opencode run
- Move the notes commands and /impeccable to .config/omo/prompts as omo
prompt templates; setup-mcp stays behind because it writes
opencode.json
- Archive DEVELOPMENT-WORKFLOW.md and UI-WORKFLOW.md under
.config/omo/archive; nothing loads them
- link-ai-configs.sh links the skills into omo and Claude Code only and
stops linking OpenCode's config, TUI, plugins and workflow docs
- setup-mac.sh and Brewfile.apps stop installing OpenCode; README and
.withcontextconfig.jsonc follow the new layout
~/.config/opencode/AGENTS.md stays linked: omo's rules engine reads it
before ~/.claude/CLAUDE.md and stops at the first hit, so it carries the
shared preferences and keeps OMC's instructions out of omo.
Impeccable's critique runs two isolated assessments. design-critique-a
runs the design-director review on Claude Opus 5.5 at xhigh, with Fable
5.1 behind it; Opus 5.5 has the top Design Arena website score of the
models in this config. design-critique-b runs the detector and browser
pass on GPT-6.1 Sol at high, with Sonnet 5.5 behind it so the second
assessment still runs without a ChatGPT login. critique.md sends each
assessment to its category.
- Copy product-marketing, copywriting, copy-editing, emails,
cold-email, content-strategy, seo-audit, ai-seo, launch and social
unchanged from coreyhaines31/marketingskills at b9ba399, with its MIT
license in each directory
- link-ai-configs.sh links each into the OpenCode, Claude Code and omo
skill directories
- Document provenance and the upgrade path in the OpenCode README
A tab renamed in Ghostty ignores the title tmux sends, so it stops
showing its session name. omo-status focus now clears that override
through Ghostty's set_tab_title action, finding the tab by its terminal
title, so every tab shows its tmux session again.
omo names the event in "event" for UserPromptSubmit, without the
"hook_event_name" field its Stop and Notification payloads carry. The
script only read hook_event_name, so it ignored every prompt and the
blue working marker never showed. Read either field.
omo-notify now drives three signals from omo's UserPromptSubmit, Stop
and Notification hooks:
- A sound through afplay, so Focus modes cannot mute it
- A Ghostty notification (OSC 777) written to the session's tmux client
terminal, so clicking it opens the tab it came from. This replaces the
osascript banner, which opened Script Editor's file picker on click
- omo-status markers in front of the tab title: red error, amber
waiting for input, green finished, blue working. A tab shows its most
urgent agent; focusing it clears red, amber and green and selects the
pane that sent the banner
tmux puts @omo_status in the title and runs omo-status on client focus.
The old script stopped on a syntax error (unclosed if blocks) and had
drifted from the machine: it installed Anaconda, AeroSpace and Oh My
Posh, and linked nothing.
- Eight named steps (xcode homebrew brew links shell runtimes ai apps)
that check what is in place first, run on their own by name, and
preview with --dry-run; a failed step is reported while the rest run
- Brewfile holds the CLI tools, fonts and terminals, Brewfile.apps the
GUI casks and App Store apps; installs never upgrade existing packages
and skip apps already installed outside Homebrew
- links symlinks the configs and .local/bin scripts, backing up what it
replaces, and fetches the nvim submodule only on a fresh clone
- Guard .zshrc's ~/.deno/env source for machines without it
- Document the steps in the README
~/.config/zellij/config.kdl linked to a file that was never committed,
so the link was dangling. Restore it from the local backup taken before
the link was made.
omo and nvim need Shift+Enter and other modified keys, which tmux
otherwise reports as plain Enter. Use CSI-u extended keys, as omo's
tmux guide recommends for tmux 3.5 and newer.
- owt all lists the workspaces of every repo with their branch and
source checkout, from any directory
- owt cd jumps into a workspace by name, repo/name or an fzf picker
that starts filtered to the current repo
- An owt function in .zshrc performs the cd, since a script cannot
change its parent shell's directory
- Raise main Opus 5.5 to xhigh and its Sol fallback to high
- Raise deep-low Sonnet 5.5 and Sol to high for coding work
- Route quick, explore and librarian to GLM-5.3-Flash low with Sonnet low fallback
- Replace unsupported GLM medium thinking with high in unspecified-low and writing
- Remove the unused [opencode] block
The local tmux left set-clipboard at the default "external", which drops
OSC 52 sent by applications in a pane. In a nested setup the remote tmux
sends its copies up as OSC 52, so they never reached the Mac clipboard.
Headless servers have no DISPLAY or WAYLAND_DISPLAY, so xclip and xsel
cannot reach a clipboard even when installed. These shims use OSC 52 to
hand text to the terminal emulator on the other end of the SSH connection,
which puts it on the local machine's clipboard.
Inside tmux, pbcopy uses `tmux load-buffer -w -` so the text lands in the
tmux paste buffer and is forwarded outward (requires `set-clipboard on`).
Outside tmux it writes the escape sequence to /dev/tty directly. Both fall
back to xclip/wl-copy when a real display is present.
pbpaste reads the tmux buffer only; terminals refuse OSC 52 reads, since
that would let any remote program siphon the user's clipboard.
Rewrites opencode.json, drops the with-context, websearch and terminal-bell
plugins, adds plugins that strip Claude-only commands and OMC MCP servers,
and vendors the impeccable, web-design-guidelines and frontend-workflow skills.
Adds .config/ai/AGENTS.md, Claude's global CLAUDE.md, settings and OMC
preferences, a script that symlinks them into HOME with backups, and the
README section that documents the restore.
omo keys project memory by folder path, so each workspace started with an
empty store. owt new and owt open now link the workspace's memory id to the
main checkout's store, and owt done and owt rm remove the link.
Adds /owt-done (close Linear issues after merge, then owt done) and
/linear-sync (progress comment and status, no cleanup), linked into omo
as ~/.omo/agent/prompts.
owt new creates a randomly named workspace per task under ~/worktrees/<repo>,
copies .env files, installs dependencies and opens omo in a tmux window with
the workspace's Linear conventions. owt done checks merge state (git or a
merged Gitea PR via tea) before removing the worktree, branches and window.
The failure path advised --deep and a disk-space check regardless of cause.
On the first live run that was wrong on both counts: 101 GiB were free and
--deep was irrelevant. Docker Desktop had crashed on startup, and the actual
fix was launching it from the Dock.
Branch the advice on whether any Docker process survived the relaunch. No
survivors means the app did not stay up, which no programmatic relaunch can
work around; survivors mean it is up but not answering yet.
- Add explicit mode settings for agents (build, plan as primary; others as subagent)
- Configure with-context MCP server for Obsidian vault integration
- Remove with-context-mcp from plugin dependencies (now using MCP server)
- Create .tmux-server.conf for remote servers (plugin-free, minimal)
- Prefix key set to Ctrl+/ (C-_) instead of Ctrl+b
- Status bar positioned at bottom with simple catppuccin-inspired theme
- Include all essential keybindings without TPM dependencies
- Add README section with one-liner download/setup instructions