{"id":51902167,"url":"https://github.com/yukimemi/renri","last_synced_at":"2026-07-26T17:01:16.913Z","repository":{"id":355176080,"uuid":"1227084259","full_name":"yukimemi/renri","owner":"yukimemi","description":"連理 — unified manager for git worktrees and jujutsu workspaces, configured with teravars","archived":false,"fork":false,"pushed_at":"2026-07-20T23:13:20.000Z","size":559,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-21T01:13:58.311Z","etag":null,"topics":["ai-coding","cli","command-line-tool","developer-tools","git","git-worktree","jj","jujutsu","parallel-development","rust","workspace-manager","worktree"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yukimemi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-02T07:15:50.000Z","updated_at":"2026-07-20T23:13:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yukimemi/renri","commit_stats":null,"previous_names":["yukimemi/renri"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/yukimemi/renri","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukimemi%2Frenri","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukimemi%2Frenri/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukimemi%2Frenri/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukimemi%2Frenri/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yukimemi","download_url":"https://codeload.github.com/yukimemi/renri/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukimemi%2Frenri/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35920983,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-26T02:00:06.503Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-coding","cli","command-line-tool","developer-tools","git","git-worktree","jj","jujutsu","parallel-development","rust","workspace-manager","worktree"],"created_at":"2026-07-26T17:01:16.196Z","updated_at":"2026-07-26T17:01:16.905Z","avatar_url":"https://github.com/yukimemi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/yukimemi/renri/main/assets/logo-dark.svg\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/yukimemi/renri/main/assets/logo.svg\" alt=\"renri — git worktrees + jj workspaces, unified\" width=\"540\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://deepwiki.com/yukimemi/renri\"\u003e\u003cimg src=\"https://deepwiki.com/badge.svg\" alt=\"Ask DeepWiki\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://codewiki.google/github.com/yukimemi/renri\"\u003e\u003cimg src=\"https://img.shields.io/badge/View-Code_Wiki-4285F4?logo=google\" alt=\"View Code Wiki\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e 連理 — *intertwined branches*. A unified manager for **git worktrees**\n\u003e and **jujutsu (jj) workspaces**, driven by [teravars]-powered TOML\n\u003e configuration with per-host / per-OS overrides and a shared base\n\u003e include mechanism.\n\n**Status: 0.1.0 — MVP shipped.** All seven verbs (`add` / `list` /\n`remove` / `cd` / `exec` / `prune` / `config`) work on git and jj\nbackends. Shell wrappers generated by `renri shell-init`. See\n[ROADMAP.md](./ROADMAP.md) for what's next.\n\n## Why\n\nThe existing crop of worktree CLIs (gwq, wtp, Phantom, claude-squad,\nWorktrunk, …) all assume git, all use a different config format, and\nnone of them treat **jj workspaces** as first-class peers. The teams\nshipping AI-parallel-dev workflows have their config and conventions\nre-implemented across N tools.\n\n`renri` aims to be the local CLI that:\n\n- **Auto-detects git or jj**, dispatches to the right backend, exposes\n  one verb set (`add` / `list` / `remove` / `cd` / `exec` / `prune` /\n  `config`).\n- **Configures with TOML + Tera** via the [teravars] library, so a\n  single `renri.toml` can `include = [\"team-base.toml\"]`, render\n  `{% if system.host == \"thinkpad\" %} ...` for per-machine overrides,\n  and use the standard `env(...)` / `is_windows()` helpers.\n- **Falls back to interactive picker** for any required argument that\n  was omitted on the command line — `renri cd` opens a fuzzy filter,\n  but `renri cd feature/foo` switches directly. `--non-interactive`\n  disables the fallback for scripts and CI.\n- **Treats jj workspaces honestly** — surfaces `update-stale`, ships\n  the prune behaviour that `jj workspace forget` is missing, handles\n  the colocated-git+jj case where `git worktree add` requires `-b`.\n\n## Quick example (planned)\n\n```toml\n# renri.toml\ninclude = [\"{{ env(name='RENRI_TEAM_BASE', default='') }}\"]\n\n[layout]\nworktree_root = \"{{ env(name='HOME') }}/wt\"\nworktree_path = \"{{ vcs.owner }}/{{ vcs.repo }}/{{ vcs.branch | replace(from='/', to='-') }}\"\n\n[[hooks.post_create]]\ntype = \"copy\"\nfiles = [\".env.example -\u003e .env\"]\n\n[[hooks.post_create]]\ntype = \"command\"\nrun = \"pnpm install\"\n\n{% if system.os == \"windows\" %}\n[[hooks.post_create]]\ntype = \"command\"\nshell = \"pwsh\"\nrun = \"Write-Host 'Welcome to {{ vcs.branch }}'\"\n{% endif %}\n```\n\n```sh\nrenri add feature/auth          # creates the worktree, runs hooks\nrenri cd feature/auth           # prints the path (or opens picker if no arg)\nrenri exec feature/auth -- pnpm test\nrenri prune                     # gc stale worktrees / forgotten jj workspaces\n```\n\nFor `renri cd` to actually change the parent shell's directory,\nsource the snippet from `renri shell-init`:\n\n```sh\n# bash / zsh\neval \"$(renri shell-init bash)\"\n\n# fish\nrenri shell-init fish | source\n\n# pwsh — add to $PROFILE:\nInvoke-Expression (\u0026 renri shell-init powershell)\n```\n\n## AI / agent integration\n\nrenri ships as an [APM](https://github.com/microsoft/apm) package.\nOne command gives the renri skill to every detected agent client\n(Copilot / Claude Code / Cursor / OpenCode / Codex / Gemini):\n\n```sh\napm install yukimemi/renri\n```\n\nThe skill source lives at `.apm/skills/renri/SKILL.md`; APM compiles\nit into the right format for each agent on install.\n\nAn MCP server is planned for v0.2 so MCP-compatible AI clients can\ndrive renri verbs directly without going through `bash`.\n\n## Cargo features\n\n(none yet — added as needed.)\n\n## License\n\nMIT.\n\n[teravars]: https://github.com/yukimemi/teravars\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyukimemi%2Frenri","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyukimemi%2Frenri","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyukimemi%2Frenri/lists"}