{"id":47891329,"url":"https://github.com/doug/jjj","last_synced_at":"2026-04-04T03:06:53.019Z","repository":{"id":343345575,"uuid":"1128536487","full_name":"doug/jjj","owner":"doug","description":"Jujutsu Juggler Distributed Project Management","archived":false,"fork":false,"pushed_at":"2026-03-31T07:14:33.000Z","size":8767,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-31T09:07:40.270Z","etag":null,"topics":["cli","code-review","distributed","jujutsu","kanban","project-management","rust"],"latest_commit_sha":null,"homepage":"https://jjj.recursivewhy.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/doug.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-05T19:34:01.000Z","updated_at":"2026-03-31T07:14:37.000Z","dependencies_parsed_at":"2026-03-31T09:03:53.301Z","dependency_job_id":null,"html_url":"https://github.com/doug/jjj","commit_stats":null,"previous_names":["doug/jjj"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/doug/jjj","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doug%2Fjjj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doug%2Fjjj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doug%2Fjjj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doug%2Fjjj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doug","download_url":"https://codeload.github.com/doug/jjj/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doug%2Fjjj/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31385946,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T01:22:39.193Z","status":"online","status_checked_at":"2026-04-04T02:00:07.569Z","response_time":60,"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":["cli","code-review","distributed","jujutsu","kanban","project-management","rust"],"created_at":"2026-04-04T03:06:52.372Z","updated_at":"2026-04-04T03:06:53.014Z","avatar_url":"https://github.com/doug.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jjj: Distributed Project Management for Jujutsu\n\n**jjj** is a distributed project management and code review system built for [Jujutsu (jj)](https://github.com/jj-vcs/jj). It implements Popperian epistemology — Problems, Solutions, Critiques — as a workflow that lives entirely in your repository.\n\nNo server. No database. No browser. Sync via standard `jj git push/pull`.\n\n**[Documentation → jjj.recursivewhy.com](https://jjj.recursivewhy.com)**\n\n![jjj workflow demo](demo/workflow.gif)\n\n## Why Jujutsu?\n\nPrevious attempts at distributed review (like git-appraise) suffered a fatal flaw: **the fragility of the commit hash**. In Git, rebasing changes every commit hash, orphaning any attached metadata.\n\n**Jujutsu solves this.** Its Change IDs persist across rebases, squashes, and history rewrites. jjj anchors metadata to change *identity*, not its momentary snapshot.\n\n## Core Model\n\njjj organizes work around Karl Popper's theory of knowledge growth: bold conjectures subjected to rigorous criticism.\n\n- **Problems** — Things that need solving. Can form hierarchies via parent/child relationships.\n- **Solutions** — Conjectures to solve problems. Linked to jj Change IDs.\n- **Critiques** — Error elimination. Block solution approval until addressed.\n- **Milestones** — Time-based goals grouping problems.\n\n## Quick Start\n\n```bash\n# Initialize jjj in your repository\njjj init\n\n# Define a problem\njjj problem new \"Search is slow\" --priority high\n\n# Propose a solution (references problem by title)\njjj solution new \"Add search index\" --problem \"Search is slow\"\n\n# Attach your current jj change to the solution\njjj solution attach \"search index\"\n\n# Add a critique during review\njjj critique new \"search index\" \"Missing error handling\" --severity medium\n\n# Address the critique after fixing\njjj critique address \"Missing error\"\n\n# Submit for review, then approve when critiques are resolved\njjj solution submit \"search index\"\njjj solution approve \"search index\"\njjj problem solve \"Search is slow\"\n```\n\n## Interactive TUI\n\nLaunch `jjj ui` for a full terminal interface with project tree, detail pane, and keyboard-driven actions.\n\n![jjj TUI demo](demo/tui.gif)\n\n## Commands\n\n### Workflow\n```bash\njjj init                    # Initialize jjj bookmark\njjj status                  # Show next actions (what to work on)\njjj next                    # Top next actions (--top N, --mine, --json)\njjj next --claim            # Claim the top item (assign to yourself)\njjj overlaps                # Detect files touched by multiple solutions\njjj insights                # Show project statistics (approval rate, cycle times)\njjj ui                      # Launch interactive TUI\njjj fetch                   # Fetch code and metadata from remote\njjj push                    # Push code and metadata to remote\njjj github push             # Refresh PR bodies and sync issue state\n```\n\n### Problems\n```bash\njjj problem new \"Title\"                # Create problem\njjj problem list                       # List all problems\njjj problem show \"Search is slow\"      # Show details (by title)\njjj problem show 01957d                # Show details (by UUID prefix)\njjj problem tree                       # Hierarchical view\njjj problem solve \"Search is slow\"     # Mark solved (requires approved solution)\njjj problem dissolve \"Search\"          # Mark dissolved (false premises)\njjj problem reopen \"Search\"           # Reopen a solved/dissolved problem\njjj problem duplicate \"Search\" \"Other\" # Mark problem as duplicate\n```\n\n### Solutions\n```bash\njjj solution new \"Title\" --problem \"Search\"       # Create solution\njjj solution attach \"search index\"                 # Link current change\njjj solution resume \"search index\"                 # Resume working on solution\njjj solution submit \"search index\"                 # Submit for review\njjj solution approve \"search index\"                # Approve (no open critiques)\njjj solution withdraw \"search index\"               # Withdraw (criticism showed it won't work)\njjj solution lgtm \"search index\"                   # Sign off as reviewer (LGTM)\njjj solution comment \"search index\" --critique ID \"reply\"  # Reply to a critique\n```\n\n### Critiques\n```bash\njjj critique new \"search index\" \"Issue\" --severity high  # Add critique\njjj critique list --solution \"search index\"              # List critiques\njjj critique address \"Missing error\"                     # Mark addressed\njjj critique dismiss \"Missing error\"                     # Dismiss (incorrect/irrelevant)\njjj critique validate \"Missing error\"                    # Validate (solution should be withdrawn)\n```\n\n### Milestones\n```bash\njjj milestone new \"Q1 Release\" --date 2025-03-31\njjj milestone add-problem \"Q1 Release\" \"Search is slow\"\njjj milestone roadmap\n```\n\n## Architecture\n\n### Shadow Graph\n\nAll metadata lives in an orphaned `jjj` bookmark, separate from your project history:\n\n```\nconfig.toml\nproblems/\n  01957d3e-a8b2-7def-8c3a-9f4e5d6c7b8a.md\nsolutions/\n  01958a1b-c3d4-7e5f-9a0b-1c2d3e4f5a6b.md\ncritiques/\n  01959b2c-d4e5-7f6a-0b1c-2d3e4f5a6b7c.md\nmilestones/\n  01960c3d-e5f6-7a0b-1c2d-3e4f5a6b7c8d.md\nevents.jsonl\n```\n\nThis means:\n- Metadata never pollutes project history\n- No merge conflicts between code and metadata\n- Can be synced independently\n\n### Syncing with Team\n\n```bash\n# Push your changes and metadata\njjj push\n\n# Or manually:\njj git push -b jjj\n\n# Fetch updates\njjj fetch\n\n# One-time setup: track remote metadata\njj bookmark track jjj@origin\n```\n\n## Installation\n\n```bash\n# From crates.io\ncargo install jjj\n\n# Or build from source\ncargo install --path .\n\n# Generate shell completions\njjj completion bash \u003e ~/.local/share/bash-completion/completions/jjj\n```\n\n## VS Code Extension\n\nA VS Code extension provides sidebar views for Next Actions and Project Tree:\n\n```bash\ncd vscode\nnpm install\nnpm run package\nnpm run install-ext\n```\n\n## AI Agent Integration\n\njjj ships a skill file that teaches Claude Code, Gemini CLI, or any AI coding assistant to use jjj commands natively.\n\n```bash\n# Claude Code\nmkdir -p ~/.claude/skills/jjj \u0026\u0026 \\\n  curl -fsSL https://jjj.recursivewhy.com/SKILL.md \\\n    -o ~/.claude/skills/jjj/SKILL.md\n\n# Gemini CLI\nmkdir -p ~/.gemini/skills/jjj \u0026\u0026 \\\n  curl -fsSL https://jjj.recursivewhy.com/SKILL.md \\\n    -o ~/.gemini/skills/jjj/SKILL.md\n```\n\nOnce installed, invoke with `/jjj` or let the agent detect it automatically. See the [AI Agents guide](https://jjj.recursivewhy.com/guides/ai-agents/) for details.\n\n## Documentation\n\nFull documentation available at [jjj.recursivewhy.com](https://jjj.recursivewhy.com), or serve locally:\n\n```bash\ncd docs-site\nnpm install\nnpm run dev\n```\n\n## Note for Previous `jjj` Crate Users\n\nThis crate previously hosted a modal interface for Jujutsu by [@icorbrey](https://github.com/icorbrey). That project has been renamed and is now available as [**megamerge**](https://crates.io/crates/megamerge).\n\n## License\n\nApache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoug%2Fjjj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoug%2Fjjj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoug%2Fjjj/lists"}