@coldic3/slipway 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kevin Kaniaburka
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,143 @@
1
+ <p align="center">
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset=".github/assets/slipway-logo-dark.svg">
4
+ <img src=".github/assets/slipway-logo-light.svg" alt="Slipway" width="400">
5
+ </picture>
6
+ </p>
7
+
8
+ <p align="center">
9
+ A local pull-request server for coding agents. Review on your machine, publish to GitHub only what you approved.
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="LICENSE"><img alt="MIT license" src="https://img.shields.io/badge/license-MIT-f2a43a"></a>
14
+ <img alt="macOS and Linux" src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux-9aa1aa">
15
+ <img alt="Claude Code plugin" src="https://img.shields.io/badge/Claude%20Code-plugin-2a2d31">
16
+ </p>
17
+
18
+ ---
19
+
20
+ **Slipway** is three parts:
21
+
22
+ - **A local Git server.** Bound to `127.0.0.1`, with merging disabled. It hosts a copy of each registered repository and its pull
23
+ requests, and gives you a web UI to review them.
24
+ - **A Claude Code plugin.** An MCP server, skills and a hook. Claude Code pushes branches and opens pull requests in Slipway instead of
25
+ on GitHub, reads your review comments and answers them.
26
+ - **A CLI, `slipway`.** It starts and stops the server, registers repositories and promotes approved pull requests to GitHub.
27
+
28
+ ## How it works
29
+
30
+ ```mermaid
31
+ sequenceDiagram
32
+ actor Y as 👤 You
33
+ participant S as ⚓ Slipway<br/>127.0.0.1
34
+ participant A as 🤖 AI agent<br/>+ Slipway plugin
35
+ participant H as ☁️ Git host
36
+
37
+ A->>S: push the task branch, open the PR
38
+ loop until you approve
39
+ Y->>S: review code, title, description
40
+ S-->>A: review comments
41
+ A->>S: fix commits, force-push, reply
42
+ end
43
+ Y->>S: approve
44
+ rect rgba(242, 164, 58, 0.18)
45
+ Note over S,H: promote
46
+ A->>S: approval on the current head?
47
+ A->>A: secret scan, base up to date?
48
+ A->>H: push the same commits, open the PR<br/>with the approved title and description
49
+ end
50
+ ```
51
+
52
+ 1. Claude Code works on its own task branch, named by the repository's rules (`agent/<task>-<slug>` when there are none), and
53
+ opens the pull request in Slipway with a title and description that follow the repository's PR conventions.
54
+ 2. You review it in the browser: the code, the title and the description.
55
+ 3. Claude Code reads the review, folds each fix into the commit it belongs to and replies to every thread. Repeat as needed.
56
+ 4. You approve.
57
+ 5. On `promote`, Slipway checks your approval on the current head, scans the commits with gitleaks and pushes exactly those commits to
58
+ GitHub with the approved title and description. Your GitHub access comes from `gh` at that moment and is never stored.
59
+
60
+ If `main` moved on GitHub in the meantime, promotion stops. Claude Code rebases in Slipway and the pull request needs a fresh approval.
61
+
62
+ ## Install
63
+
64
+ Requirements: macOS or Linux, `git`, and the [GitHub CLI](https://cli.github.com) signed in (`gh auth login`).
65
+
66
+ ```bash
67
+ brew install coldic3/tap/slipway # or: npm install -g @coldic3/slipway (Node 22+)
68
+ slipway init
69
+ ```
70
+
71
+ `slipway init` asks which agent to set up, starts the server, creates your login and installs the Claude Code plugin. Then open
72
+ http://127.0.0.1:3514 and sign in as **slipway** / **slipway**.
73
+
74
+ Register a repository (its `origin` must be on GitHub):
75
+
76
+ ```bash
77
+ cd your-project
78
+ slipway repo add .
79
+ ```
80
+
81
+ In Claude Code: *"Implement X and open a Slipway PR."* After your review: *"Fix the review."* After your approval: *"Promote it."*
82
+
83
+ ### Options
84
+
85
+ | | |
86
+ |---|---|
87
+ | Runtime | The server runs as a native binary in `~/.slipway` (downloaded once, sha256-pinned). Use Docker instead: `slipway init --docker`. |
88
+ | Port | Default `3514`. If it is taken, `slipway init` offers a free one. Override: `--port N` or `SLIPWAY_PORT`. |
89
+ | After a reboot | The plugin starts the server on its first call. Or run `slipway up`. |
90
+ | Plugin by hand | `/plugin marketplace add coldic3/slipway`, then `/plugin install slipway@slipway`. |
91
+
92
+ ## Supported platforms
93
+
94
+ Slipway currently supports Claude Code as the AI agent and GitHub as the Git host, and both are built in directly. The plan is to make
95
+ Slipway extensible, so that other AI agents and Git hosts (such as GitLab) can be added as integrations in future releases.
96
+ Contributions are welcome.
97
+
98
+ ## Commands
99
+
100
+ ```bash
101
+ slipway init [--agent claude-code|none] [--port N] [--docker] [--yes]
102
+ slipway up [--port N] [--docker] # start the server
103
+ slipway down [--purge] # stop it (--purge deletes all Slipway data)
104
+ slipway status
105
+ slipway repo add <clone> [--name n] [--github owner/repo] [--base main]
106
+ slipway promote <repo> <pr> [--draft] [--base b] [--test-cmd "…"] [--force]
107
+ slipway sync-main <repo>
108
+ slipway setup | --help | --version
109
+ ```
110
+
111
+ The full guide (the review loop, the plugin's tools and skills, troubleshooting) is in [docs/plugin.md](docs/plugin.md).
112
+
113
+ ## Guarantees
114
+
115
+ | | |
116
+ |---|---|
117
+ | Local only | The server listens on `127.0.0.1` and requires sign-in. |
118
+ | No merges | Every merge style is disabled and `main` is protected. Code leaves only through promotion. |
119
+ | Separate accounts | You review as `slipway`, a plain user. Claude Code has its own user that can push and comment, but not approve or merge. Repositories belong to the `repos` org, run by a technical `admin` account. |
120
+ | Exact promotion | Only with your approval on the current head; the commits you reviewed are the commits that reach GitHub. |
121
+ | Secret scan | gitleaks fails closed: a finding, an error or a missing scanner blocks promotion. |
122
+ | No stored GitHub token | The token is read from `gh` at promotion time and never written to disk. |
123
+ | Push guard | The plugin's hook blocks `git push` and `gh pr create` to GitHub for branches whose Slipway pull request is open or missing. |
124
+
125
+ Slipway is a workflow tool, not a sandbox: the agent runs as your OS user and could bypass it on purpose. Avatars are loaded from
126
+ Gravatar (an e-mail hash is sent to gravatar.com).
127
+
128
+ ## Development
129
+
130
+ ```bash
131
+ npm install
132
+ bin/slipway --help # the CLI from source
133
+ npm test # unit + functional (Vitest)
134
+ npm run test:e2e # Playwright against an isolated server on port 3300 (SLIPWAY_E2E_RUNTIME=docker for Docker)
135
+ npm run build:plugin # rebuild plugin/dist after changing src/ (committed; a test fails if stale)
136
+ ```
137
+
138
+ Design decisions: [docs/adr](docs/adr). Releasing: [docs/releasing.md](docs/releasing.md). After changing the logo or the web UI
139
+ styles, run `npm run build:brand`.
140
+
141
+ ## License
142
+
143
+ [MIT](LICENSE)