Skip to main content

is-it-claimed

Check whether a GitHub issue is already being worked on — before you write the patch.

$ is-it-claimed owner/repo#606
CLAIMED (high confidence)
  owner/repo#606  serve backend hand-rolls its own prompt

  ! @contributor has an OPEN PR for this — fix: apply the model's chat template
    https://github.com/owner/repo/pull/607

No dependencies. Python 3.9+.

Why

An issue with no assignee and no comments looks free. It often isn't.

This tool exists because of a specific afternoon: an issue was filed at 16:27, a pull request fixing it was opened 50 seconds later, and a second contributor — who had checked the issue for a claim and found none — started the same work at 16:52 and finished it. Two people wrote the same patch, and a maintainer had to spend their time choosing between them.

Nothing was done wrong. The claim simply wasn't anywhere the second contributor looked. GitHub records a referencing PR in the issue's timeline, not in its comments, so gh issue view does not show it and neither does the web page's comment thread.

is-it-claimed looks in all four places a claim actually hides.

Install

pip install is-it-claimed
# or, without installing:
uvx is-it-claimed owner/repo#123

Use

is-it-claimed owner/repo#123
is-it-claimed https://github.com/owner/repo/issues/123
is-it-claimed owner/repo#123 --forks     # also scan forks for a matching branch
is-it-claimed owner/repo#123 --json      # machine-readable

Exit codes make it scriptable — 0 available, 1 claimed, 2 error:

is-it-claimed "$ISSUE" || { echo "someone is already on it"; exit 1; }

What it checks

Signal Weight Why it matters
Open/merged PR referencing the issue 4 Near-proof. The work exists, not just the intent. This is the one gh issue view doesn't show you.
Assignee 3 The explicit signal — and the least used.
A comment claiming it 2 "I'll take this", "working on it", …
A fork with a branch naming the issue 1 Work started, no PR yet. Opt-in via --forks.
Closed PR referencing the issue 1 Someone tried and stopped — worth knowing, not a blocker.

Weights add up into a confidence level, because these signals are not equal. A fork branch alone is a hint; someone may have abandoned it months ago. An open PR is as close to certain as this gets.

Claim phrases are matched conservatively. "Can I work on this?" is a question, not a claim, and treating it as one would tell you an issue is taken when it is merely being discussed.

Authentication

Optional, but recommended — unauthenticated GitHub allows 60 requests/hour, and --forks can spend that on one check.

The token is picked up from GITHUB_TOKEN, GH_TOKEN, or the credentials the gh CLI already stores, so if you have gh auth login there is nothing to do.

Partial results

If one check fails — rate limit, a deleted fork — the others still run and the failure is reported:

AVAILABLE
  no claim found in: assignee, comments
  ? could not check fork branches: refused (403)

A definitive answer already found in the timeline is not thrown away because a later, weaker check failed.

Limits

  • A claim made somewhere else entirely — Discord, a mailing list, a maintainer's head — is invisible here. AVAILABLE means "no public signal", not "nobody is working on it".
  • --forks scans the 30 most recently pushed forks by default. A very popular repository has more.
  • Claim-phrase matching is English-only.

Licence

MIT

Metadata

Release files for is-it-claimed 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for is-it-claimed 0.1.1
File Size Uploaded
is_it_claimed-0.1.1.tar.gz 23.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for is-it-claimed 0.1.1
File Interpreter ABI Platform
is_it_claimed-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 36.0 kB

Release files / is_it_claimed-0.1.1.tar.gz

Download URL is_it_claimed-0.1.1.tar.gz
Size 23.2 kB
Tags Source
SHA-256 checksum
How to use checksums
1e78cd7a21c8613fb6d4fa74153ee0d295ec3ad58f51fdf689a2437edf5d3bba
BLAKE2b-256 checksum
How to use checksums
5dc4bbf0a93ae69e6f48c99de29cffb8fa0af38663673d954867997b20bc6cf4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / is_it_claimed-0.1.1-py3-none-any.whl

Download URL is_it_claimed-0.1.1-py3-none-any.whl
Size 12.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
336a3607504e31b8dfc1322f07eaf7443c7f0223c34f618ffe23f024b3667b0a
BLAKE2b-256 checksum
How to use checksums
9eedc5c5e11a149939a6cd48d5c225c78a87ae9bfec590de027ec825f6152722
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page