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.
Metadata
Release files for agentic-adoption-scan 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| agentic_adoption_scan-0.1.0-py3-none-win_arm64.whl | Python 3 | none | Windows ARM64 | Details |
| agentic_adoption_scan-0.1.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_x86_64.whl | Python 3 | none | Linux musl 1.2+ x86-64 | Details |
| agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_aarch64.whl | Python 3 | none | Linux musl 1.2+ ARM64 | Details |
| agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| agentic_adoption_scan-0.1.0-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| agentic_adoption_scan-0.1.0-py3-none-macosx_10_9_x86_64.whl | Python 3 | none | macOS 10.9+ x86-64 | Details |
Total release size: 61.0 MB
Release files / agentic_adoption_scan-0.1.0-py3-none-win_arm64.whl
| Download URL | agentic_adoption_scan-0.1.0-py3-none-win_arm64.whl |
|---|---|
| Size | 7.3 MB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
cc567ce6a49838df138c82d212ccd8617afbbc52b89ff63394600058cf2898df
|
|
BLAKE2b-256 checksum How to use checksums |
9ae58fb49ee4cc8cb20ae2df1f83ad41e195c0767832c599ade9f55b479b87d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 23, 2026.
Transparency logRelease files / agentic_adoption_scan-0.1.0-py3-none-win_amd64.whl
| Download URL | agentic_adoption_scan-0.1.0-py3-none-win_amd64.whl |
|---|---|
| Size | 8.0 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
60e473ac977b9d76dd4107522fde44745bbe8eaa19a665ce9f1bf280fb948b5d
|
|
BLAKE2b-256 checksum How to use checksums |
970db6c5ca5139146c20e64361d833ae380ff97d0b0098f458579345b7665b66
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 23, 2026.
Transparency logRelease files / agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_x86_64.whl
| Download URL | agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 7.8 MB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
a1b15e8eb33c4b966c4ac04faa63bac7c8c80fd76e1f88ab776f4efcc8eae4f0
|
|
BLAKE2b-256 checksum How to use checksums |
0ed9aa3aa778d9adacf7824b4f032ce7e374307e0f158a9228ea115727e19290
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 23, 2026.
Transparency logRelease files / agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_aarch64.whl
| Download URL | agentic_adoption_scan-0.1.0-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 7.3 MB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
a3f715bd576dea3fdd099efeeb72f8ec117c692f6340705aa9f59dd628c7332d
|
|
BLAKE2b-256 checksum How to use checksums |
b62ce63575a2427acc8156729c998da06554000135b967f06af7983e6f257484
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 23, 2026.
Transparency logRelease files / agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_x86_64.whl
| Download URL | agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_x86_64.whl |
|---|---|
| Size | 7.8 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
b274cdcda19742f9adcd9f4457b225df58e235896e5eda9c18ef7136242df84a
|
|
BLAKE2b-256 checksum How to use checksums |
29fd6b72e573048c3d5da4dfa2723c362d0e65ce776e488587e58299400c0a50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 23, 2026.
Transparency logRelease files / agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_aarch64.whl
| Download URL | agentic_adoption_scan-0.1.0-py3-none-manylinux_2_17_aarch64.whl |
|---|---|
| Size | 7.3 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
b6c86a243b6af32e54968b375bf6afe6b82db214e8e62259b4ed3cb9c3f1b127
|
|
BLAKE2b-256 checksum How to use checksums |
f817e26b0edd1c6a9bb2eea1f581875af49656ada311219918e638ab95b77cfc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 23, 2026.
Transparency logRelease files / agentic_adoption_scan-0.1.0-py3-none-macosx_11_0_arm64.whl
| Download URL | agentic_adoption_scan-0.1.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 7.5 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9e720ba46bfef4dc8b88ca2329659ddf41743cce2f1aebd88953be56d6c3a904
|
|
BLAKE2b-256 checksum How to use checksums |
83558900e76eeaf926c556f24073f15dea1929f7b3cd89891a366ea756a08bf7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 23, 2026.
Transparency logRelease files / agentic_adoption_scan-0.1.0-py3-none-macosx_10_9_x86_64.whl
| Download URL | agentic_adoption_scan-0.1.0-py3-none-macosx_10_9_x86_64.whl |
|---|---|
| Size | 8.0 MB |
| Tags | Python 3 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
17c6d0085883d00b3498a23a97b6cf8c2f5da610bbdba804343a06bc3fad594f
|
|
BLAKE2b-256 checksum How to use checksums |
1e9978158898e62d9149e7ac0d5b428d18970243079f975539c8b8a36f32e78f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 23, 2026.
Transparency log