>_

Docs

Get started with Twing

On GitHub? See Using GitHub. Otherwise, see Not on GitHub.

Using GitHub

Developers: one command, once per machine

curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/install.sh | sh

Requires Node.js 22.5 or later, npm, and macOS or Linux. Then open Claude Code, Codex or OpenCode and work normally. If the repository already has .twing/twing.yml, there is nothing else to do. You only need gh auth login if the coordinator has to verify your GitHub identity and gh has no token.

Admins: onboard a repository

Choose a coordinator, then run init in the repository you want to onboard. init writes the server URL to .twing/twing.yml; review and commit that change.

Use Twing's server

For a GitHub-hosted repository, an admin or maintainer can use Twing's public coordinator:

cd ~/path/to/repo
npx --yes @twing/cli@latest init --server https://coordination-server.twing.dev

init verifies GitHub access using gh when available, otherwise a GitHub device flow. An admin or maintainer founds the project, and other GitHub users join with their GitHub role. On the admin's run, init also writes the bootstrap hook. Commit it so future clones bootstrap automatically:

git add .twing/twing.yml .twing/bootstrap-hook.sh .claude/settings.json
git commit -m "Configure twing"
git push
Use your own server

Pick how the coordinator authenticates people.

With authentication (public HTTPS)

Install the server. Its domain must already point at this machine, with ports 80 and 443 available:

curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/deploy/install-server.sh | sh -s -- install \
  --domain twing.example.com --mode auth

Then configure a GitHub repository:

npx --yes @twing/cli@latest init --server https://twing.example.com
git add .twing/twing.yml .twing/bootstrap-hook.sh .claude/settings.json
git commit -m "Configure twing"
Without authentication (one developer or a trusted private network)

Use this only for one developer or a private network you trust. Anyone who can reach a no-auth coordinator can claim any developer identity.

curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/deploy/install-server.sh | sh -s -- install \
  --insecure-http --bind 0.0.0.0 --port 8787 --mode no-auth

Then configure a repository:

npx --yes @twing/cli@latest init --server http://<server-host>:8787 --no-auth --enable-enforcement
git add .twing/twing.yml .twing/bootstrap-hook.sh .claude/settings.json
git commit -m "Configure twing"
Enable semantic conflict checks

Plan extraction and semantic conflict checks need an LLM provider on your coordinator. The server auto-detects credentials in this order: AWS Bedrock, GCP Vertex AI, OpenRouter, then Bifrost. Without one, those checks pass silently; the edit gate still requires a registered design. Set one provider's variables in the server's server.env, then upgrade:

# OpenRouter, for example
OPENROUTER_API_KEY=...
curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/deploy/install-server.sh | sh -s -- upgrade

Monitor your team

Once you're set up, see designs, reviews, and activity across your repo at monitor.twing.dev when you use Twing's server. If you run your own server, you can install your own monitor.


Not on GitHub

Run your own coordinator without authentication. This suits a single developer or a private network you trust.

Admins
curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/deploy/install-server.sh | sh -s -- install \
  --insecure-http --bind 0.0.0.0 --port 8787 --mode no-auth

Then, in your repository:

npx --yes @twing/cli@latest init --server http://<server-host>:8787 --no-auth --enable-enforcement
git add .twing/twing.yml .twing/bootstrap-hook.sh .claude/settings.json
git commit -m "Configure twing"
git push

For a project that is already onboarded, turn on enforcement with:

twing project enable-enforcement
Developers
curl -fsSL https://raw.githubusercontent.com/Twing-dev/twing-cli/main/install.sh | sh

Then open Claude Code, Codex or OpenCode in the repository and work normally. --no-auth is cached per coordinator, so later setup doesn't need the flag.