GitHub Integration
Link a GitHub repository to a Willet project so pull requests can update ticket statuses automatically.
How it works
When a pull request is opened in a linked repository and references a Willet ticket with a closing keyword, the ticket moves to in_progress. When the pull request is merged, the ticket moves to done. The integration only ever advances a ticket's status — already-done or cancelled tickets are never touched, and a reopened or reverted PR does not roll a ticket back. Status changes are attributed to "Willet (GitHub)" and the PR URL is recorded in the ticket's history.
Setup
Linking is managed through Willet's MCP tools, not the dashboard. Ask any AI agent connected to Willet to set this up for you, or run the tools directly. You'll need the admin or owner role on the Willet organization, and admin access on the GitHub repository.
- Sign in to Willet with GitHub. We'll request the permissions needed to register webhooks on your repos.
- Ask your agent to call the link_github_repo tool with your org slug, project slug, and the repo in owner/repo form.
- If your stored GitHub authorization is missing scopes, the tool will hand back a URL — open it, re-authorize, then run link_github_repo again.
link_github_repo org_slug=<org> project_slug=<project> repo=<owner>/<repo>Referencing tickets in PRs
Reference a ticket by its human-readable key (the project's prefix plus the ticket number, like WD-42) or by its 26-character ULID. Drop the reference anywhere in the PR title, description, or branch name, and pair it with a closing keyword. Put as many tickets after one keyword as you want.
Fixes WD-12, WD-13 and WD-14Closing keywords
Matching is case-insensitive and accent-tolerant, and works in every language Willet supports. The standard English keywords (close/closes/closed, fix/fixes/fixed, resolve/resolves/resolved, complete/completes/completed) work, plus their natural equivalents in German, Spanish, French, Italian, Japanese, Korean, and Turkish. Either ordering works — "fix <ticket>" or "<ticket> fixed" — to accommodate languages where the verb naturally trails.
Security
Each linked repo gets its own per-mapping HMAC webhook secret, so an unsigned or replayed webhook can't move tickets. Webhook events from a repo with no Willet mapping are dropped. The integration trusts the repo↔project mapping itself: anyone who can merge a PR in the linked repo can advance ticket status, so don't link repos whose contributors shouldn't be able to update your tickets.