{"id":49947159,"url":"https://github.com/oxidecomputer/skepsis","last_synced_at":"2026-05-31T12:31:00.148Z","repository":{"id":353201727,"uuid":"1198969964","full_name":"oxidecomputer/skepsis","owner":"oxidecomputer","description":"Local web UI for code review","archived":false,"fork":false,"pushed_at":"2026-04-22T21:09:22.000Z","size":2854,"stargazers_count":7,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-22T23:15:30.755Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oxidecomputer.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":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-04-02T00:01:10.000Z","updated_at":"2026-04-22T21:56:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oxidecomputer/skepsis","commit_stats":null,"previous_names":["oxidecomputer/skepsis"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/oxidecomputer/skepsis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxidecomputer%2Fskepsis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxidecomputer%2Fskepsis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxidecomputer%2Fskepsis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxidecomputer%2Fskepsis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oxidecomputer","download_url":"https://codeload.github.com/oxidecomputer/skepsis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oxidecomputer%2Fskepsis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33731998,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"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":[],"created_at":"2026-05-17T16:00:40.711Z","updated_at":"2026-05-31T12:31:00.142Z","avatar_url":"https://github.com/oxidecomputer.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# skepsis\n\n\u003e [σκέψις](https://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:1999.04.0057:entry=ske/yis): viewing, perception by the senses. Examination, speculation, consideration.\n\nA fully local browser-based code review UI. Review your (or your agent's) diff _before_ inflicting it on the world.\n\n- GitHub-style split or unified diff view with syntax highlighting\n- Mark files as viewed\n- Inline review comments are written directly into source files as code comments\n- Works with [jj](https://jj-vcs.dev/) and git (tries jj first, falls back to git)\n- Vim-style navigation shortcuts (press `?` to see the list)\n\nhttps://github.com/user-attachments/assets/698365ab-964c-4e38-a605-82bec4879f60\n\n## Setup\n\nRequires [Node.js](https://nodejs.org/) (v22+).\n\n```\ngit clone https://github.com/oxidecomputer/skepsis.git\ncd skepsis \u0026\u0026 npm install\n```\n\nAdd an alias pointing to your clone so you can run it from any repo:\n\n```\nalias sk=\"npx --prefix ~/repos/skepsis tsx ~/repos/skepsis/cli.ts\"\n```\n\n## Usage\n\nTakes `-r`/`--revision`, `-f`/`--from`, and `-t`/`--to` flags for specifying\nthe commit range. The VCS is auto-detected. In jj mode, the flags are passed\nstraight to `jj diff`. In git mode, they have to be translated slightly. See the\nexamples below.\n\nEach invocation picks a free port, so you can run multiple instances simultaneously.\n\n### jj examples\n\n`sk` is just an alias (see above). You can name it whatever you want.\n\n```\nsk                          # review trunk()..@\nsk -r @                     # review working copy only\nsk -r 'mybranch..@'         # review a range\nsk -f main -t @             # diff between two revisions\n```\n\n### git examples\n\nRanges passed with `-r` are passed through verbatim to `git diff`.\n\n```\nsk                          # git diff origin/HEAD..HEAD\nsk -f main                  # diff since main: git diff main HEAD\nsk -r main..my-branch       # review commits on my-branch\nsk -r HEAD~5..HEAD          # review the last 5 commits\nsk -f v1.2.0 -t v1.3.0      # compare two tags\nsk --git                    # force git in a jj-colocated repo\n```\n\n## How it works\n\nThe CLI starts a local HTTP server that shells out to `jj diff`\nor `git diff`, then serves the diff to a React frontend that uses\n[`@pierre/diffs`](https://diffs.com/) to render it with syntax highlighting.\n\nThe built frontend bundle is checked into `dist/` so that the production path\nhas no build step — the server serves it directly. In dev mode (`--dev`), a\nVite dev server runs alongside the API server with hot reload.\n\n### Comments\n\nReview comments are inserted into the source files, so they show up in your VCS\ndiff and are visible to coding agents. They can be resolved (deleted) from the\nUI. Comments are only enabled when the diff includes the working copy (e.g.,\na revset ending in `@` for jj, or an open-ended range ending at the working\ntree for git), since that's where the inserted lines land.\n\n### Marking files viewed\n\nViewed state is stored per file in `~/.local/share/skepsis/` using the file's\ncontent hash (the git object ID from the diff header). If the file changes, the\nhash no longer matches and it automatically shows as unviewed again.\n\n## Development\n\n```\nnpm install\nsk --dev    # Vite dev server with hot reload + API server\n```\n\nAfter changing frontend code, rebuild the checked-in bundle:\n\n```\nnpm run build\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foxidecomputer%2Fskepsis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foxidecomputer%2Fskepsis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foxidecomputer%2Fskepsis/lists"}