{"id":51792435,"url":"https://github.com/gitset-dev/gitset-cli-v2","last_synced_at":"2026-07-20T23:37:55.052Z","repository":{"id":369767827,"uuid":"1096800733","full_name":"gitset-dev/gitset-cli-v2","owner":"gitset-dev","description":"Gitset CLI — drafts commits, PRs, issues, READMEs and releases from your terminal. Runs entirely on your machine, with your own AI key.","archived":false,"fork":false,"pushed_at":"2026-07-20T23:35:25.000Z","size":122,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-20T23:37:33.514Z","etag":null,"topics":["ai","byoai","cli","commit-messages","git","github","open-source","pull-requests","readme","release-notes"],"latest_commit_sha":null,"homepage":"https://gitset.dev","language":"JavaScript","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/gitset-dev.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},"funding":{"github":"imprvhub","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"ivanlunadev","thanks_dev":null,"custom":null}},"created_at":"2025-11-15T01:10:35.000Z","updated_at":"2026-07-20T23:35:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gitset-dev/gitset-cli-v2","commit_stats":null,"previous_names":["gitset-dev/gitset-cli-v2"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/gitset-dev/gitset-cli-v2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitset-dev%2Fgitset-cli-v2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitset-dev%2Fgitset-cli-v2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitset-dev%2Fgitset-cli-v2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitset-dev%2Fgitset-cli-v2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gitset-dev","download_url":"https://codeload.github.com/gitset-dev/gitset-cli-v2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitset-dev%2Fgitset-cli-v2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35703527,"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":"ssl_error","status_checked_at":"2026-07-20T02:08:09.736Z","response_time":111,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","byoai","cli","commit-messages","git","github","open-source","pull-requests","readme","release-notes"],"created_at":"2026-07-20T23:37:54.445Z","updated_at":"2026-07-20T23:37:55.038Z","avatar_url":"https://github.com/gitset-dev.png","language":"JavaScript","funding_links":["https://github.com/sponsors/imprvhub","https://buymeacoffee.com/ivanlunadev"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://gitset.dev\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/gitset-dev/gitset/main/public/cli/favicon-192.png\" alt=\"Gitset CLI\" width=\"88\" /\u003e\n  \u003c/a\u003e\n\n  \u003ch1\u003eGitset CLI\u003c/h1\u003e\n\n  \u003cp\u003e\u003cstrong\u003e\u003ccode\u003eDraft. Refine. Ship.\u003c/code\u003e\u003c/strong\u003e\u003c/p\u003e\n\n  \u003cp\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-MPL--2.0-blue?style=flat-square\" alt=\"MPL-2.0\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/model-BYOAI-white?style=flat-square\" alt=\"BYOAI\" /\u003e\n    \u003cimg src=\"https://img.shields.io/badge/node-%E2%89%A520-green?style=flat-square\" alt=\"node \u003e= 20\" /\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\nGitset is an open-source toolkit for everything around your code on GitHub:\ncommit messages, issues, pull requests, release notes, READMEs, labels, and\nrepository upkeep. Every tool drafts from your repository's real context; you\nrefine the draft until it ships. This package is the **CLI** — the same\ntools, in your terminal.\n\n**The CLI runs entirely on your machine.** There is no account, no login, and\nno telemetry. Your provider keys live in `~/.gitset` with owner-only\npermissions, and your code goes from your machine to your AI provider —\nnowhere else. It never contacts a Gitset server.\n\n## Install\n\n```sh\nnpm install -g @gitset-dev/cli\n```\n\nRequires Node.js 20+. Commands that publish to GitHub (`--create`,\n`--apply`) use the [GitHub CLI](https://cli.github.com) (`gh`) with your\nexisting login.\n\n## Quick start\n\n```sh\n# interactive setup — pick a provider, paste your key, pick a model\ngitset config\n\n# stage changes, draft a commit message, refine it, commit\ngit add -A\ngitset commit\n```\n\n`gitset config` walks you through it (provider list, masked key entry, a\ncurated model per provider with \"recommended\" pre-selected). Prefer flags or\nscripting? `gitset config set anthropic --key sk-... --default` still works\nexactly as before. Providers: `anthropic` · `openai` · `gemini` ·\n`openrouter` · `custom` (any OpenAI-compatible endpoint). Override per run\nwith `--provider` and `--model`.\n\nTerminal on a light background? `gitset config theme light` switches the\naccent color to one tuned for readability there (defaults to a dark-terminal\npalette).\n\n## Commands\n\nDrafting (uses your provider key):\n\n| Command | Drafts |\n|---|---|\n| `gitset commit` | A commit message from your staged changes, with interactive refine |\n| `gitset pr` | A pull-request description from the branch diff (`--create` opens it via `gh`) |\n| `gitset issue -m \"...\"` | A structured GitHub issue from one sentence + repo context |\n| `gitset readme` | A README from your tracked files (`--template` uses yours as the base) |\n| `gitset release` | Release notes from a commit range (default: since the last tag) |\n| `gitset gitignore` | A `.gitignore` for the detected stack |\n| `gitset repo about` | A repository description + topics, applied via `gh` |\n\nLocal tools (no AI):\n\n| Command | Does |\n|---|---|\n| `gitset labelspack` | Applies your reusable label set (`~/.gitset/labels.md`) to the repo |\n| `gitset repo backup` | Writes a scheduled mirror-backup GitHub Actions workflow |\n| `gitset repo license` | Generates a LICENSE file, fully offline |\n| `gitset template` / `gitset init` | Manage / scaffold your local templates |\n| `gitset dependabot` | Resolve open Dependabot alerts |\n| `gitset tree` · `gitset status` | Repository structure · git + provider status |\n\nCommon flags: `--provider` `--model` `--yes` `--print` `--json`. Run\n`gitset help \u003ccommand\u003e` for everything else.\n\n## Knowledge Mapper\n\n`gitset knowledge` builds and maintains `docs/gitset-knowledge/` — a\nstructured, always-current map of your codebase (architecture, module\nboundaries, commands, dependency graph) that both developers and AI coding\nagents can read before touching your code. It's generated from your source\ncode, manifests, and CI configuration — never from your existing prose docs,\nso it can't inherit their drift.\n\n```sh\ngitset knowledge init       # scaffold optional .gitset-knowledge.json (include/exclude globs)\ngitset knowledge scan       # zero AI calls — discovers files, prints the plan + exact cost estimate\ngitset knowledge generate   # shows the estimate again, asks to confirm, then writes the knowledge base\ngitset knowledge update     # incremental — only changed modules (and their direct importers) are re-summarized\ngitset knowledge automate   # writes a GitHub Actions workflow that keeps it fresh in CI (direct commits, or PRs with --sync pr)\n```\n\nIt's a six-stage local pipeline (Discover → Map → Summarize → Plan → Write →\nValidate): Discover and Map walk the repository and build an import graph\nwith zero AI calls; only Summarize and Write touch your configured provider\n— there's no separate \"default model\" for this tool, it uses whatever you\npicked with `gitset config`; and a deterministic Validate pass checks every\ngenerated link, command, and script before anything is written to disk.\nSecrets are redacted locally before any file content is sent, and prose\ndocs / test file bodies are listed structurally but never sent at all.\n\n`gitset knowledge automate` applies updates in one of two ways, and you\nnever touch a GitHub settings page for either:\n\n- **Direct commit (the default).** CI commits refreshed docs straight to\n  your default branch using only the built-in Actions token — works on\n  every repository and organization, zero extra permissions or tokens,\n  and it can't re-trigger itself.\n- **Review pull request (`--sync pr`).** Each update arrives as a PR on\n  the `gitset/knowledge-update` branch. Its one prerequisite is set up\n  for you: the CLI first tries enabling the repo's Actions PR permission\n  via the API; if your organization blocks that, it offers to store a\n  token from your existing `gh` login as the `GITSET_PR_TOKEN` secret —\n  explained in plain language before asking, reversible anytime by\n  deleting the secret. If neither works out, updates still commit and\n  push their branch safely; only the PR step fails, and the workflow run\n  shows that failure clearly rather than hide it.\n\n## Templates\n\nDefine your commit style, issue structure, PR format, README skeleton, or\nrelease-notes layout once in `~/.gitset/templates` and every draft follows\nit — the same define-once-reuse-everywhere model as the\n[web app](https://gitset.dev). `gitset template edit \u003ccommit|pr|issue|readme|release\u003e`\nopens (or creates) one in `$EDITOR` — no need to hunt for the file path.\n\n## Configuration\n\nKeys and defaults: `~/.gitset/config.json` (created with `0600`\npermissions). Templates: `~/.gitset/templates`. Label pack:\n`~/.gitset/labels.md`. Delete `~/.gitset` and every trace is gone.\n\n## Contributing\n\nIssues and pull requests are welcome:\n[gitset-dev/gitset-cli-v2](https://github.com/gitset-dev/gitset-cli-v2).\n\n## License\n\n[MPL-2.0](LICENSE) © Iván Luna. The Gitset name and logo are not covered by\nthe code license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitset-dev%2Fgitset-cli-v2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgitset-dev%2Fgitset-cli-v2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitset-dev%2Fgitset-cli-v2/lists"}