Luvus Module
RizRiyz/luvus
Write a luvus module (an extension for luvus, mission control for your AI coding agents).
Use tuicr's review CLI to read and add comments in active TUI review sessions, and launch tuicr in cmux, tmux, Zellij, or Herdr when a user needs an interactive review pane.
$ npx skills add agavra/tuicr --skill tuicr -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install agavra/tuicr tuicr --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/agavra/tuicr.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/tuicr .claude/skills/tuicr && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "tuicr" agent skill from https://github.com/agavra/tuicr/tree/main/skills/tuicr into .claude/skills/tuicr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuicr", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/agavra/tuicr/tree/main/skills/tuicrType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add agavra/tuicr --skill tuicr -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install agavra/tuicr tuicr --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agavra/tuicr.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/tuicr .agents/skills/tuicr && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "tuicr" agent skill from https://github.com/agavra/tuicr/tree/main/skills/tuicr into .agents/skills/tuicr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuicr", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add agavra/tuicr --skill tuicr -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install agavra/tuicr tuicr --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agavra/tuicr.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/tuicr .cursor/skills/tuicr && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "tuicr" agent skill from https://github.com/agavra/tuicr/tree/main/skills/tuicr into .cursor/skills/tuicr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuicr", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/agavra/tuicr.git --path skills/tuicr--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add agavra/tuicr --skill tuicr -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install agavra/tuicr tuicr --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agavra/tuicr.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/tuicr .gemini/skills/tuicr && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "tuicr" agent skill from https://github.com/agavra/tuicr/tree/main/skills/tuicr into .gemini/skills/tuicr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuicr", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install agavra/tuicr tuicrInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add agavra/tuicr --skill tuicr -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/agavra/tuicr.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/tuicr .github/skills/tuicr && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "tuicr" agent skill from https://github.com/agavra/tuicr/tree/main/skills/tuicr into .github/skills/tuicr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuicr", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add agavra/tuicr --skill tuicr -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install agavra/tuicr tuicr --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agavra/tuicr.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/tuicr .opencode/skills/tuicr && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "tuicr" agent skill from https://github.com/agavra/tuicr/tree/main/skills/tuicr into .opencode/skills/tuicr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuicr", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
tuicrUse tuicr's review CLI to read and add comments in active TUI review sessions, and launch tuicr in cmux, tmux, Zellij, or Herdr when a user needs an interactive review pane.
Tuicr is an agent skill from agavra/tuicr. Use tuicr's review CLI to read and add comments in active TUI review sessions, and launch tuicr in cmux, tmux, Zellij, or Herdr when a user needs an interactive review pane.
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `_tuicr-common.sh`, `tuicr-wrapper-cmux.sh` and `tuicr-wrapper-herdr.sh`).
It sits in Development. It works with tmux and Rust. The repository describes itself as: a code review TUI with vim keybindings. The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 095c16d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Shell), which the agent can run.
Shell commands in SKILL.md call:
gitghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Tuicr loads about 3.2k tokens when it runs. Until then it costs about 45 tokens; SKILL.md has 1,716 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from agavra/tuicr at commit 095c16d, republished under its MIT licence (© agavra). 1,716 words, ~3,219 tokens.
.claude/skills/tuicr/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Use tuicr review as the default agent interface. The TUI is where the human
reviews code; the CLI is how the agent discovers active sessions, reads user
comments, and, only when appropriate, adds agent-authored comments.
First decide which workflow the user is asking for:
User-led review of agent-generated changes
tuicr review comments when they say comments are ready. If you are
explicitly waiting while the user reviews, poll the same command
periodically and look for new comment IDs.Agent review of an AI-generated patch
tuicr review add and an explicit --username
identifying the agent. Ask first when the workflow or session is ambiguous.If the user's intent is ambiguous, ask which workflow they want.
Determine the repository directory from the user's request, current working directory, or recent file operations. Ask if it is ambiguous.
List persisted sessions:
tuicr review list --repo /path/to/repo # checkout + its repo's PR sessions
tuicr review list --repo owner/repo # all sessions for a forge repo
tuicr review list --all # every session across all repos--repo is a selector: a checkout path also surfaces PR sessions for that
checkout's origin repo, and a forge coordinate like owner/repo matches
local and PR sessions by owner/repo. Each row carries a kind (local or
pr) and a usable slug. Use --all when you don't know the repo.
[] with exit 0 also means "not a repo root" — a subdirectory returns it
too. Pass the root, then --all, before concluding nothing is open.
Choose the session:
"active": true, attach to it.gh:owner/repo/pr/N) to --session; it is self-contained and needs no
--repo."active": true as a convenience signal. If slug resolution fails, ask the
user for the slug or repo path used by the session.The CLI works even if the agent is not running inside tmux, Zellij, or Herdr, so do not require a multiplexer just to connect to an existing active session.
When the user needs an interactive tuicr pane and no active session exists:
| Environment | Action |
|---|---|
$CMUX_WORKSPACE_ID is set | Run tuicr-wrapper-cmux.sh /path/to/repo -- <scope> |
$TMUX is set | Run tuicr-wrapper.sh /path/to/repo -- <scope> |
$ZELLIJ is set | Run tuicr-wrapper-zellij.sh /path/to/repo -- <scope> |
$HERDR_ENV is 1 | Run tuicr-wrapper-herdr.sh /path/to/repo -- <scope> |
| None is set | Tell the user you are waiting for them to start tuicr in the repo, then attach with tuicr review list after they say it is ready |
<scope> is -w for uncommitted working-tree changes or -r <revset> for a
commit range — always pass one explicitly so the user is never left to pick
staged/unstaged/commit-range manually in the TUI.
If more than one multiplexer marker is set, prefer the innermost multiplexer if
that is clear; otherwise ask. cmux hosts a Ghostty terminal, so $TERM_PROGRAM
reads ghostty inside cmux — check $CMUX_WORKSPACE_ID, not the terminal name.
tuicr supports both git and Jujutsu (jj) repositories, and jj workspaces may
have no .git directory at all. Do not pre-check the directory with
git rev-parse or refuse to launch because git does not recognize it; always
run the wrapper and let it validate the repository.
Wrapper paths are relative to this skill directory:
<skill-directory>/tuicr-wrapper-cmux.sh /path/to/repo -- -w
<skill-directory>/tuicr-wrapper.sh /path/to/repo -- -w
<skill-directory>/tuicr-wrapper-zellij.sh /path/to/repo -- -w
<skill-directory>/tuicr-wrapper-herdr.sh /path/to/repo -- -wThe Herdr wrapper requires jq to read pane IDs and completion results from
Herdr's JSON responses.
Every wrapper accepts pass-through tuicr arguments after --, which is how
you scope the review instead of leaving the scope selector for the user to
fill in — for example -- -w for uncommitted working-tree changes or
-- -r <revset> for a commit range. Always pass one of these explicitly when
launching a review pane.
If your tool supports command timeouts, use a long timeout, such as 10 minutes,
because the tmux, Zellij, and Herdr wrappers wait for the TUI to exit. The cmux
wrapper is the exception: it returns as soon as the pane is running and prints
the new surface ref between === TUICR SURFACE === markers. Capture that ref —
it is how you close the pane later with cmux close-surface --surface <ref>.
Once the TUI creates its active session, use
tuicr review list --repo /path/to/repo to capture the slug. If your
environment cannot run another command while a blocking wrapper is waiting,
read the comments after the user exits tuicr.
To review a patch yourself, rebuild the diff the user sees. The slug's source segment says which:
| Slug segment | Diff |
|---|---|
worktree/<head>, staged-and-unstaged/<head> | git diff HEAD |
staged/<head> | git diff --cached |
unstaged/<head> | git diff |
commits/<base>..<head> | git diff <base>~1..<head> |
pr/<n> | gh pr diff <n> |
pristine | none; every tracked file shown in full |
Range endpoints are inclusive and printed oldest-first, so <base> without
~1 drops the first commit. Check the file count against the listing row's
file_count; a mismatch means every line number you derive will be wrong.
This is the main review loop for user-led review.
There is no push stream from tuicr to the agent. Read comments by running the CLI on demand. After the user says comments are ready, or after the TUI exits, run:
tuicr review comments --repo /path/to/repo --session <slug>The command emits JSON. Each comment includes fields like:
idlocationpathstart_lineend_linesidecomment_typeauthorlifecycle_statecontentTreat these comments as the user's review feedback:
issue: blocking problem to fix firstsuggestion: consider implementing or explain why notnote: answer or acknowledgepraise: no action requiredIf you are waiting during an active review, poll this command about every 30 seconds and compare comment IDs with the previous result. Read immediately when the user says comments are ready. Stop polling once the user says the review is done or your tooling would block other work.
An empty result does not by itself mean the review didn't happen. On exit,
tuicr always prints a line like tuicr-summary: reviewed 3/3 files, 0 comments added to stderr (visible in the pane's scrollback), and tuicr review list
reports the same reviewed_count/file_count for the session. If
reviewed_count equals file_count, zero comments is a legitimate "nothing to
flag" outcome — treat the review as complete, don't ask the user to confirm.
Only ask whether the user saved comments in the intended session, or whether
another active session should be selected, when reviewed_count is less than
file_count (the user quit before reviewing everything) or you can't find a
tuicr-summary: line at all. If the review may have continued while you were
working, rerun tuicr review comments before claiming completion.
Only add comments when the workflow allows it and, for agent-authored review, after the user approves writing them into tuicr.
Defaults:
--type issue for problems by default.suggestion, note, or praise when that better matches the intent.--username so agent comments are visually distinguishable.Examples:
tuicr review add --repo /path/to/repo --session <slug> \
--target-file src/main.rs \
--line 42 \
--side new \
--type issue \
--username "Codex" \
"Handle the empty case here."tuicr review add --repo /path/to/repo --session <slug> \
--target-file src/main.rs \
--type suggestion \
--username "Codex" \
"Consider splitting this file-level concern into a helper."Omit --target-file for a review-level comment. Add --end-line for a range
comment. Use --side old for removed lines and --side new for added or
unchanged lines in the new file.
For structured input, use --input with literal JSON, @path/to/file.json, or
- for stdin. Supported target types are review, file, line, and
line_range. One object per call — an array is a parse error. The file key is
file, not path. target.type is inferred from the fields present:
tuicr review add --session <slug> --username "Codex" --input \
'{"file":"src/main.rs","line":42,"side":"new","comment_type":"issue","content":"Handle the empty case."}'Then verify. A line outside the diff stores, prints back, and exits 0, but
never renders — invisible to the user, successful-looking to you. Re-read
tuicr review comments and check each start_line exists on the side you gave
(new for added or unchanged, old for removed). Check author to distinguish
your comments from the user's, and keep the returned ids to identify the exact
comments in later reads.
Older wrapper-driven flows may emit:
=== TUICR INSTRUCTIONS ===
...
=== END TUICR INSTRUCTIONS ===If present, process those instructions. Otherwise prefer
tuicr review comments; it is the primary source of review feedback. If the
wrapper mentions clipboard export, ask the user to paste it only when the CLI
comments are unavailable.
cmux:
cmux focus-pane --pane <ref>q; the pane closes itself. Force it with cmux close-surface --surface <ref>cmux list-panescmux read-screen --surface <ref>tmux:
Ctrl-b then arrow keysqCtrl-b then Ctrl-arrowCtrl-b then zzellij:
Alt + arrow keysqCtrl-n, then arrow keysAlt-fAlt + [ / ]Herdr:
q; the wrapper then closes the review pane| Situation | Action |
|---|---|
| Multiple plausible active sessions | Ask which session slug to use |
| No active session, cmux/tmux/Zellij/Herdr available | Start a new tuicr pane with the matching wrapper |
| No active session, no multiplexer | Tell the user you are waiting for them to start tuicr |
| cmux wrapper printed no surface ref | Run cmux list-panes to find the pane, or ask the user to start tuicr themselves |
tuicr not installed | Tell the user to install tuicr |
| Not a repository | Ask for the correct repo directory |
Comments are empty, but reviewed_count == file_count | Treat as a completed review with nothing to flag — don't ask |
Comments are empty and reviewed_count < file_count | Confirm the selected session or ask the user to save/add comments |
git diff output.© agavra, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files in skills/tuicr of agavra/tuicr.
Open the folder on GitHubat commit 095c16d
Tuicr next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Tuicr this skillagavra/tuicr | 3.3k | — | ~3.2k | Automated safety check: Pass | MIT | |
| Luvus ModuleRizRiyz/luvus | 959 | — | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| TUI Change Verification for Warpwarpdotdev/warp | 65k | 1 repos | ~5.5k | Automated safety check: Notes | AGPL-3.0 | |
| Migrate Core Code to Submodulestinyhumansai/openhuman | 42k | — | ~2.6k | Automated safety check: Pass | GPL-3.0 | |
| OpenLogi macOS Permissions TriageAprilNEA/OpenLogi | 23k | — | ~2.5k | Automated safety check: Notes | Apache-2.0 | |
| Rust Best Practicesfarm-fe/farm | 5.6k | 3 repos | ~1.1k | Automated safety check: Pass | MIT |
RizRiyz/luvus
Write a luvus module (an extension for luvus, mission control for your AI coding agents).
warpdotdev/warp
Runs Warp's terminal UI for real, drives it with keystrokes and reads the rendered screen back to confirm that a change looks and behaves as intended.
tinyhumansai/openhuman
Plans and carries out moving non-host-specific code and its tests from the OpenHuman core into vendored tiny submodule libraries, then releases the submodule and re-pins the host.
AprilNEA/OpenLogi
Decides whether an OpenLogi device problem on macOS is a privacy-permission (TCC) problem, using agent log lines, and says which identity needs which grant.
farm-fe/farm
Guide for writing idiomatic Rust code based on Apollo GraphQL's best practices handbook.
QwenLM/qwen-code
Reproduces a feature from Codex or Claude Code in Qwen Code by running the reference agent under capture, reading the traces, then implementing matching behavior.
Categories
Use tuicr's review CLI to read and add comments in active TUI review sessions, and launch tuicr in cmux, tmux, Zellij, or Herdr when a user needs an interactive review pane. Tuicr is an agent skill from agavra/tuicr. Use tuicr's review CLI to read and add comments in active TUI review sessions, and launch tuicr in cmux, tmux, Zellij, or Herdr when a user needs an interactive review pane.
Tuicr fits situations like: development work in your project.
Run `npx skills add agavra/tuicr --skill tuicr -a claude-code`. Or copy the skill folder (skills/tuicr in agavra/tuicr) into .claude/skills/tuicr in your project. Claude Code loads it when a task matches its description.
Run `npx skills add agavra/tuicr --skill tuicr -a codex`. Or copy the skill folder (skills/tuicr in agavra/tuicr) into .agents/skills/tuicr in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add agavra/tuicr --skill tuicr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tuicr, .gemini/skills/tuicr, .github/skills/tuicr and .opencode/skills/tuicr in your project.
Going by SKILL.md and its folder, Tuicr needs a shell for the scripts in its folder and the command-line tools its instructions call (git and gh). Our summary lists: A Bash shell.
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Tuicr is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Tuicr: Luvus Module (RizRiyz/luvus, 959 stars), TUI Change Verification for Warp (warpdotdev/warp, 65k stars), Migrate Core Code to Submodules (tinyhumansai/openhuman, 42k stars) and OpenLogi macOS Permissions Triage (AprilNEA/OpenLogi, 23k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
agavra (a GitHub user) maintains it in agavra/tuicr, which has 3,328 GitHub stars. The repository was last updated on October 9, 2026.
Source: agavra/tuicr on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.