← 全部工具

yukimemi/renri

热度 65 更新于 开发与构建

連理 — unified manager for git worktrees and jujutsu workspaces, configured with teravars

githubauto-collected

安装

暂未验证可直接使用的安装命令,请查看项目官方文档或 Release。

<p align="center" <picture <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/yukimemi/renri/main/assets/logo-dark.svg" <img src="https://raw.githubusercontent.com/yukimemi/renri/main/assets/logo.svg" alt="renri — git worktrees + jj workspaces, unified" width="540" </picture </p

<p align="center" <a href="https://deepwiki.com/yukimemi/renri"<img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"/</a <a href="https://codewiki.google/github.com/yukimemi/renri"<img src="https://img.shields.io/badge/View-CodeWiki-4285F4?logo=google" alt="View Code Wiki"/</a </p

連理 — intertwined branches. A unified manager for git worktrees and jujutsu (jj) workspaces, driven by [teravars]-powered TOML configuration with per-host / per-OS overrides and a shared base include mechanism.

Status: 0.1.0 — MVP shipped. All seven verbs (add / list / remove / cd / exec / prune / config) work on git and jj backends. Shell wrappers generated by renri shell-init. See ROADMAP.md for what's next.

Why

The existing crop of worktree CLIs (gwq, wtp, Phantom, claude-squad, Worktrunk, …) all assume git, all use a different config format, and none of them treat jj workspaces as first-class peers. The teams shipping AI-parallel-dev workflows have their config and conventions re-implemented across N tools.

renri aims to be the local CLI that:

  • Auto-detects git or jj, dispatches to the right backend, exposes

one verb set (add / list / remove / cd / exec / prune / config).

  • Configures with TOML + Tera via the [teravars] library, so a

single renri.toml can include = ["team-base.toml"], render {% if system.host == "thinkpad" %} ... for per-machine overrides, and use the standard env(...) / iswindows() helpers.

  • Falls back to interactive picker for any required argument that

was omitted on the command line — renri cd opens a fuzzy filter, but renri cd feature/foo switches directly. --non-interactive disables the fallback for scripts and CI.

  • Treats jj workspaces honestly — surfaces update-stale, ships

the prune behaviour that jj workspace forget is missing, handles the colocated-git+jj case where git worktree add requires -b.

Quick example (planned)

# renri.toml
include = ["{{ env(name='RENRI_TEAM_BASE', default='') }}"]

[layout]
worktree_root = "{{ env(name='HOME') }}/wt"
worktree_path = "{{ vcs.owner }}/{{ vcs.repo }}/{{ vcs.branch | replace(from='/', to='-') }}"

[[hooks.post_create]]
type = "copy"
files = [".env.example -> .env"]

[[hooks.post_create]]

run = "pnpm install"