{"id":29554235,"url":"https://github.com/thekarel/spiral","last_synced_at":"2025-07-18T07:08:53.156Z","repository":{"id":304962118,"uuid":"1020706486","full_name":"thekarel/spiral","owner":"thekarel","description":"A tiny helper for Linear \u0026 Git Town","archived":false,"fork":false,"pushed_at":"2025-07-16T15:54:35.000Z","size":183,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-17T13:17:34.259Z","etag":null,"topics":["cli","git-town","linear"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@thekarel/spiral","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thekarel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-07-16T09:16:58.000Z","updated_at":"2025-07-16T15:54:38.000Z","dependencies_parsed_at":"2025-07-17T16:57:20.963Z","dependency_job_id":"8b7b958e-1374-491e-bad7-dff1bf85bd8d","html_url":"https://github.com/thekarel/spiral","commit_stats":null,"previous_names":["thekarel/spiral"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/thekarel/spiral","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thekarel%2Fspiral","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thekarel%2Fspiral/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thekarel%2Fspiral/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thekarel%2Fspiral/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thekarel","download_url":"https://codeload.github.com/thekarel/spiral/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thekarel%2Fspiral/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265716312,"owners_count":23816354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","git-town","linear"],"created_at":"2025-07-18T07:08:51.877Z","updated_at":"2025-07-18T07:08:53.144Z","avatar_url":"https://github.com/thekarel.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spiral\n\n\u003e A tiny helper for Linear \u0026 Git Town workflow\n\n[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io)\n[![Version](https://img.shields.io/npm/v/@thekarel/spiral.svg)](https://npmjs.org/package/@thekarel/spiral)\n[![Downloads/week](https://img.shields.io/npm/dw/@thekarel/spiral.svg)](https://npmjs.org/package/@thekarel/spiral)\n\n\u003c!-- toc --\u003e\n* [Spiral](#spiral)\n* [Installation](#installation)\n* [Hack](#hack)\n* [Ship](#ship)\n* [API Key](#api-key)\n* [Usage](#usage)\n* [Commands](#commands)\n\u003c!-- tocstop --\u003e\n\n# Installation\n\n```\nnpm install -g @thekarel/spiral\n```\n\n## What is this?\n\nThis tool slightly simplifies a very specific and repetitive workflow:\n\n1. Creating a new, clean branch from a Linear ticket using Git Town\n2. Work...\n3. Fill the commit message with the ticket information from Linear\n4. Publish the changes in a sane way using Git Town\n\nIf you've been doing `git hack` and `git town` often you know what I mean.\n\nThe CLI has two commands:\n\n1. `spiral hack abc-123`: Create a new branch from a Linear ticket using `git town hack`\n2. `spiral ship`: Pre-fill the commit message with the ticket information and run `git town ship`\n\nThe format of the branch name and the commit message structure are hard coded, and so are the commands this CLI runs.\nThis might change in the future.\n\nContext:\n\n- Linear: https://linear.app/\n- Git Town: https://git-town.com/\n\n# Hack\n\nThe `hack` command creates a new branch from a Linear ticket, using Git Town.\nThe format of the branch name is `ticket-number-title-of-your-ticket`, for example `abc-123-exciting-the-new-feature`.\n\nKeystrokes saved: several!\n\n# Ship\n\nThe `ship` command pre-fills the commit message with the ticket information,\nallows you to edit the message and then runs `git town ship`.\n\nThe goal is to avoid copy-pasting all the bits and manually formatting the commit message into the expected format.\n\nProductivity increase: not insignificant!\n\n# API Key\n\nExport your API key as `LINEAR_API_KEY`.\n\nYou can create one in your Linear account settings under Security \u0026 access.\nOnly add READ permissions.\n\n# Usage\n\n\u003c!-- usage --\u003e\n```sh-session\n$ npm install -g @thekarel/spiral\n$ spiral COMMAND\nrunning command...\n$ spiral (--version)\n@thekarel/spiral/0.0.3 linux-x64 node-v20.19.3\n$ spiral --help [COMMAND]\nUSAGE\n  $ spiral COMMAND\n...\n```\n\u003c!-- usagestop --\u003e\n\n# Commands\n\n\u003c!-- commands --\u003e\n* [`spiral help [COMMAND]`](#spiral-help-command)\n\n## `spiral help [COMMAND]`\n\nDisplay help for spiral.\n\n```\nUSAGE\n  $ spiral help [COMMAND...] [-n]\n\nARGUMENTS\n  COMMAND...  Command to show help for.\n\nFLAGS\n  -n, --nested-commands  Include all nested commands in the output.\n\nDESCRIPTION\n  Display help for spiral.\n```\n\n_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.2.31/src/commands/help.ts)_\n\u003c!-- commandsstop --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthekarel%2Fspiral","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthekarel%2Fspiral","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthekarel%2Fspiral/lists"}