Detect agentic coding tool adoption across GitHub organizations
Project description
eng-effectiveness-metrics-tools
Tools for measuring and tracking engineering effectiveness, with a focus on agentic coding tool adoption.
agentic-adoption-scan
A CLI tool that scans all repositories in a GitHub organization to detect adoption of agentic coding tools (Claude Code, GitHub Copilot, Cursor, MCP servers, evals frameworks, and more). Produces tidy-format CSV data suitable for analysis and visualization.
Install
macOS (Intel and Apple Silicon):
curl -fsSL "https://github.com/posit-dev/eng-effectiveness-metrics-tools/releases/latest/download/agentic-adoption-scan_darwin_$(uname -m | sed 's/x86_64/amd64/').tar.gz" | tar -xz && sudo mv agentic-adoption-scan /usr/local/bin/
Linux (x86_64 and arm64):
curl -fsSL "https://github.com/posit-dev/eng-effectiveness-metrics-tools/releases/latest/download/agentic-adoption-scan_linux_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar -xz && sudo mv agentic-adoption-scan /usr/local/bin/
Via pip/pipx (macOS, Linux, Windows):
pipx install agentic-adoption-scan
Prerequisites
The tool uses the gh CLI for GitHub authentication. Make sure you have it installed and authenticated:
gh auth login
Usage
Scan an organization for agentic tool indicators:
agentic-adoption-scan scan --org your-org --output results.csv
Fetch and analyze content of detected indicators:
agentic-adoption-scan inspect --org your-org --scan-results results.csv --output inspect-results.csv
Generate a customizable indicators config file:
agentic-adoption-scan init-config --output indicators.yaml
Run as an MCP server for Claude Code integration:
agentic-adoption-scan serve
Scan flags
| Flag | Default | Description |
|---|---|---|
--org |
(required) | GitHub organization to scan |
--output |
stdout | Output CSV file path |
--days |
90 | Only include repos active in the last N days |
--include-archived |
false | Include archived repos |
--force |
false | Bypass cache and rescan everything |
--cache-dir |
.agentic-scan-cache |
Directory for scan state cache |
--config |
Path to custom indicators YAML config | |
--verbose |
false | Enable verbose logging |
What it detects
The tool checks for 25+ built-in indicators across 7 categories:
| Category | Examples |
|---|---|
claude-code |
CLAUDE.md, .claude/ directory, settings.json, custom commands |
github-copilot |
copilot-instructions.md, .copilot/ directory |
cursor |
.cursorrules, .cursor/rules/ directory |
agents-config |
AGENTS.md, .agents/ directory |
mcp |
mcp.json, .mcp.json, MCP server configs |
evals |
evals directories, promptfoo, inspect_ai, mcp-evals |
workflows-ai |
claude-code-action, Copilot references, AI review actions |
You can extend or override these indicators via a YAML config file (init-config generates a starter).
Output format
Scan results are written as tidy CSV — one row per (repo × indicator) observation:
scan_timestamp,org,repo,repo_visibility,repo_language,repo_pushed_at,category,indicator,found,file_path,details
This format makes it easy to filter, pivot, and visualize in R, Python, or any BI tool.
MCP server
The tool can run as an MCP server, exposing tools for use directly within Claude Code:
{
"mcpServers": {
"agentic-adoption-scan": {
"command": "agentic-adoption-scan",
"args": ["serve"]
}
}
}
Available MCP tools: scan_org, inspect_repo, list_indicators, get_repo_summary, get_adoption_summary.
Deploying to Posit Connect
You can deploy the MCP server to Posit Connect so that AI clients across your organization can access it without running anything locally. The connect/ directory contains a Python entry point that wraps the binary for Connect's ASGI runtime.
Prerequisites
- rsconnect-python installed:
pip install rsconnect-python - The
ghCLI installed and available inPATHon the Connect server (the binary uses it for GitHub API calls) - A Posit Connect server URL and API key
1. Set environment variables
In your Connect content's Vars settings (or pass via --environment at deploy time), set:
GITHUB_TOKEN=<your-github-pat>
The gh CLI reads GITHUB_TOKEN automatically, so no interactive gh auth login is needed on the server.
2. Write the manifest
cd connect/
rsconnect write-manifest fastapi --overwrite --entrypoint server:mcp .
This creates connect/manifest.json (and connect/requirements.txt if not already present) for later or CI-driven deployments.
3. Deploy
rsconnect deploy fastapi \
--server https://your-connect-server.example.com \
--api-key YOUR_API_KEY \
--entrypoint server:mcp \
--title "agentic-adoption-scan" \
.
Or if you have already saved your server with rsconnect add:
rsconnect deploy fastapi \
--name your-server-nickname \
--entrypoint server:mcp \
--title "agentic-adoption-scan" \
.
4. Use from Claude Code
Once deployed, add the Connect-hosted MCP server to your Claude Code configuration:
{
"mcpServers": {
"agentic-adoption-scan": {
"type": "streamable-http",
"url": "https://your-connect-server.example.com/content/<content-id>/mcp"
}
}
}
Replace <content-id> with the numeric ID shown in the Connect dashboard for this content item.
Performance tip
Set Min processes to 1 in the content's runtime settings so the server is always warm and avoids cold-start delays when clients connect.
Other scripts
Record a deployment event into GitHub:
./record-deployment.sh posit-dev/eng-effectiveness-metrics-tools main testing
Releases
Releases are fully automated via python-semantic-release on every merge to main. The version bump is determined automatically from Conventional Commit PR titles (enforced by the pr-title workflow):
| PR title prefix | Version bump |
|---|---|
fix: |
patch — 0.1.0 → 0.1.1 |
feat: |
minor — 0.1.1 → 0.2.0 |
feat!: / BREAKING CHANGE: |
major — 0.2.0 → 1.0.0 |
chore:, docs:, refactor:, etc. |
no release |
On every merge to main, semantic-release analyzes commits since the last tag. If there are releasable changes, it creates a CHANGELOG.md entry, commits it, tags the new version (e.g. v0.2.0), and publishes a GitHub release — all in one step. That tag push then triggers the publish workflow, which:
- Builds native binaries for macOS (amd64/arm64) and Linux (amd64/arm64) via GoReleaser
- Publishes Python wheels for all platforms to PyPI via go-to-wheel
One-time setup required
Deploy key — semantic-release pushes back to main and needs to trigger the publish workflow. The default GITHUB_TOKEN cannot do this, so an SSH deploy key is required:
ssh-keygen -t ed25519 -C "semantic-release" -f deploy_key -N ""
- Add
deploy_key.pubas a repo Deploy key with write access: Settings → Deploy keys - Add
deploy_key(private) as an Actions secret namedDEPLOY_KEY: Settings → Secrets and variables → Actions
PyPI Trusted Publisher — the publish workflow uses OIDC Trusted Publishing (no API token needed). Configure a Trusted Publisher on PyPI for this repository pointing to the publish.yml workflow and the pypi environment.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentic_adoption_scan-0.1.0-py3-none-win_arm64.whl.
File metadata
- Download URL: agentic_adoption_scan-0.1.0-py3-none-win_arm64.whl
- Upload date:
- Size: 7.3 MB
- Tags: Python 3, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc567ce6a49838df138c82d212ccd8617afbbc52b89ff63394600058cf2898df
|
|
| MD5 |
45136381420c43c7a3658693e75246e2
|
|
| BLAKE2b-256 |
9ae58fb49ee4cc8cb20ae2df1f83ad41e195c0767832c599ade9f55b479b87d2
|
Provenance
The following attestation bundles were made for agentic_adoption_scan-0.1.0-py3-none-win_arm64.whl:
Publisher:
publish.yml on posit-dev/eng-effectiveness-metrics-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_adoption_scan-0.1.0-py3-none-win_arm64.whl -
Subject digest:
cc567ce6a49838df138c82d212ccd8617afbbc52b89ff63394600058cf2898df - Sigstore transparency entry: 1161879247
- Sigstore integration time:
-
Permalink:
posit-dev/eng-effectiveness-metrics-tools@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/posit-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentic_adoption_scan-0.1.0-py3-none-win_amd64.whl.
File metadata
- Download URL: agentic_adoption_scan-0.1.0-py3-none-win_amd64.whl
- Upload date:
- Size: 8.0 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60e473ac977b9d76dd4107522fde44745bbe8eaa19a665ce9f1bf280fb948b5d
|
|
| MD5 |
5977e7a2ec38c6fbfffe81507c3fb409
|
|
| BLAKE2b-256 |
970db6c5ca5139146c20e64361d833ae380ff97d0b0098f458579345b7665b66
|
Provenance
The following attestation bundles were made for agentic_adoption_scan-0.1.0-py3-none-win_amd64.whl:
Publisher:
publish.yml on posit-dev/eng-effectiveness-metrics-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_adoption_scan-0.1.0-py3-none-win_amd64.whl -
Subject digest:
60e473ac977b9d76dd4107522fde44745bbe8eaa19a665ce9f1bf280fb948b5d - Sigstore transparency entry: 1161879380
- Sigstore integration time:
-
Permalink:
posit-dev/eng-effectiveness-metrics-tools@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/posit-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 7.8 MB
- Tags: Python 3, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1b15e8eb33c4b966c4ac04faa63bac7c8c80fd76e1f88ab776f4efcc8eae4f0
|
|
| MD5 |
71cce5e7573700493ac0fc92c71e1f1a
|
|
| BLAKE2b-256 |
0ed9aa3aa778d9adacf7824b4f032ce7e374307e0f158a9228ea115727e19290
|
Provenance
The following attestation bundles were made for agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_x86_64.whl:
Publisher:
publish.yml on posit-dev/eng-effectiveness-metrics-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_x86_64.whl -
Subject digest:
a1b15e8eb33c4b966c4ac04faa63bac7c8c80fd76e1f88ab776f4efcc8eae4f0 - Sigstore transparency entry: 1161879676
- Sigstore integration time:
-
Permalink:
posit-dev/eng-effectiveness-metrics-tools@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/posit-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 7.3 MB
- Tags: Python 3, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3f715bd576dea3fdd099efeeb72f8ec117c692f6340705aa9f59dd628c7332d
|
|
| MD5 |
63260b760c88eb7dd64aa2d600221544
|
|
| BLAKE2b-256 |
b62ce63575a2427acc8156729c998da06554000135b967f06af7983e6f257484
|
Provenance
The following attestation bundles were made for agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_aarch64.whl:
Publisher:
publish.yml on posit-dev/eng-effectiveness-metrics-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_aarch64.whl -
Subject digest:
a3f715bd576dea3fdd099efeeb72f8ec117c692f6340705aa9f59dd628c7332d - Sigstore transparency entry: 1161879116
- Sigstore integration time:
-
Permalink:
posit-dev/eng-effectiveness-metrics-tools@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/posit-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 7.8 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b274cdcda19742f9adcd9f4457b225df58e235896e5eda9c18ef7136242df84a
|
|
| MD5 |
7e9f17f9e8531d788ced77d7cad64558
|
|
| BLAKE2b-256 |
29fd6b72e573048c3d5da4dfa2723c362d0e65ce776e488587e58299400c0a50
|
Provenance
The following attestation bundles were made for agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_x86_64.whl:
Publisher:
publish.yml on posit-dev/eng-effectiveness-metrics-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_x86_64.whl -
Subject digest:
b274cdcda19742f9adcd9f4457b225df58e235896e5eda9c18ef7136242df84a - Sigstore transparency entry: 1161879195
- Sigstore integration time:
-
Permalink:
posit-dev/eng-effectiveness-metrics-tools@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/posit-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_aarch64.whl.
File metadata
- Download URL: agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_aarch64.whl
- Upload date:
- Size: 7.3 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6c86a243b6af32e54968b375bf6afe6b82db214e8e62259b4ed3cb9c3f1b127
|
|
| MD5 |
4541a1053a882d7a5f73b6a4e130ec7e
|
|
| BLAKE2b-256 |
f817e26b0edd1c6a9bb2eea1f581875af49656ada311219918e638ab95b77cfc
|
Provenance
The following attestation bundles were made for agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_aarch64.whl:
Publisher:
publish.yml on posit-dev/eng-effectiveness-metrics-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_aarch64.whl -
Subject digest:
b6c86a243b6af32e54968b375bf6afe6b82db214e8e62259b4ed3cb9c3f1b127 - Sigstore transparency entry: 1161879565
- Sigstore integration time:
-
Permalink:
posit-dev/eng-effectiveness-metrics-tools@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/posit-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentic_adoption_scan-0.1.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: agentic_adoption_scan-0.1.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 7.5 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e720ba46bfef4dc8b88ca2329659ddf41743cce2f1aebd88953be56d6c3a904
|
|
| MD5 |
6b536e2d5e51922d769d4bbc76efdce8
|
|
| BLAKE2b-256 |
83558900e76eeaf926c556f24073f15dea1929f7b3cd89891a366ea756a08bf7
|
Provenance
The following attestation bundles were made for agentic_adoption_scan-0.1.0-py3-none-macosx_11_0_arm64.whl:
Publisher:
publish.yml on posit-dev/eng-effectiveness-metrics-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_adoption_scan-0.1.0-py3-none-macosx_11_0_arm64.whl -
Subject digest:
9e720ba46bfef4dc8b88ca2329659ddf41743cce2f1aebd88953be56d6c3a904 - Sigstore transparency entry: 1161879316
- Sigstore integration time:
-
Permalink:
posit-dev/eng-effectiveness-metrics-tools@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/posit-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentic_adoption_scan-0.1.0-py3-none-macosx_10_9_x86_64.whl.
File metadata
- Download URL: agentic_adoption_scan-0.1.0-py3-none-macosx_10_9_x86_64.whl
- Upload date:
- Size: 8.0 MB
- Tags: Python 3, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17c6d0085883d00b3498a23a97b6cf8c2f5da610bbdba804343a06bc3fad594f
|
|
| MD5 |
857619dec44677644150f799f7981106
|
|
| BLAKE2b-256 |
1e9978158898e62d9149e7ac0d5b428d18970243079f975539c8b8a36f32e78f
|
Provenance
The following attestation bundles were made for agentic_adoption_scan-0.1.0-py3-none-macosx_10_9_x86_64.whl:
Publisher:
publish.yml on posit-dev/eng-effectiveness-metrics-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentic_adoption_scan-0.1.0-py3-none-macosx_10_9_x86_64.whl -
Subject digest:
17c6d0085883d00b3498a23a97b6cf8c2f5da610bbdba804343a06bc3fad594f - Sigstore transparency entry: 1161879461
- Sigstore integration time:
-
Permalink:
posit-dev/eng-effectiveness-metrics-tools@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/posit-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1bd431c97be5da4c8a22e4389f02709cc93422a8 -
Trigger Event:
push
-
Statement type: