Universal Codebase Intelligence for CI & Teams
Analyze any repository in seconds. Get a maintainability grade, risk level, onboarding difficulty, and a CI-ready quality gate β zero configuration.
pipx install devscope
devscope scan .On macOS:
brew install devscope
devscope scan .Or install from source:
git clone https://github.com/EhsanAzish80/Devscope.git
cd Devscope
uv sync
uv run devscope scan .That's it. No config files. No setup. Just intelligence.
Try it now:
devscope summary --compactDevscope: B Β· Low risk Β· Easy onboarding Β· 1.00 tests Β· 0.06s β‘
| Feature | devscope | cloc | tokei |
|---|---|---|---|
| Maintainability grade | β A-F scoring | β | β |
| CI quality gate | β Exit codes | β | β |
| Multi-language repo intelligence | β Full context | ||
| Shareable PR summaries | β Markdown + badges | β | β |
| Intelligent caching | β 10-20x speedup | β | β |
| Risk & onboarding metrics | β Built-in | β | β |
| Test coverage detection | β Automatic | β | β |
See devscope analyzing popular open-source projects:
Devscope: A Β· Low risk Β· Moderate onboarding Β· 1.46 tests Β· 0.71s β‘
Devscope: B Β· Low risk Β· Hard onboarding Β· 2.80 tests Β· 1.27s β‘
Devscope: A Β· Low risk Β· Moderate onboarding Β· 0.98 tests Β· 0.10s β‘
Devscope: B Β· Low risk Β· Easy onboarding Β· 1.82 tests Β· 0.05s β‘
Benchmarks run on GitHub Actions (2-core Linux VM).
π Want more examples? See the
/researchdirectory for detailed analysis reports of popular repositories, including full markdown summaries and scan metadata.
First scan:
$ devscope scan .
β Analysis complete in 2.45sCached scan (same repo):
$ devscope scan .
β Analysis complete in 0.15s (cache: 100% hit rate, ~2.3s saved)10-20x faster on large repos. Automatic cache invalidation when files change.
This repository is continuously analyzed by devscope.
Repo: Devscope
Files: 53
Lines: 10,639
Languages: Python (53%) Β· Markdown (21%) Β· Shell (11%)
Health: B (85.5)
Risk: Low
Onboarding: Easy
Tests: 0.87 ratio
Last commit: today
Top hotspot: README.md (855 LOC, Very large file (855 LOC), No nearby tests)
β‘ Scan time: 0.07s
This report is automatically updated on every push.
- CI quality gate β Fail builds on grade drops (
--fail-under B) - PR health comment β One-line summary in every PR (
devscope summary --compact) - Client code audit β Instant maintainability report for stakeholders
- Monorepo onboarding β Estimate ramp-up time for new engineers
devscope summary --badges > HEALTH.mdOutput:
## π Devscope Report



**Health:** B (82.1) Β· **Risk:** Low Β· **Onboarding:** Easy
**Files:** 1,247 Β· **Lines:** 45,892 Β· **Tests:** 0.78 ratio
β‘ Scan time: 0.82s (cache: 100% hit rate)- name: Add health check to PR
run: |
devscope summary --compact >> $GITHUB_STEP_SUMMARYOutput:
Devscope: B Β· Low risk Β· Easy onboarding Β· 0.78 tests Β· 0.82s β‘
devscope summary --json | jq '.health'Perfect for Slack notifications, status pages, or custom integrations.
βββββββββββββββββββββββββββββββββββββββββ
β devscope v0.1.0 β
β Code Intelligence at a glance β
βββββββββββββββββββββββββββββββββββββββββ
π my-project
Repository my-project
Health Grade B (82.5)
Risk Level Low
Onboarding Easy
Total Files 1,247
Total Lines 45,892
Languages
Python 45.2%
TypeScript 32.8%
JavaScript 12.1%
Tests 0.78 ratio
Top Hotspot src/analyzer.py (321 LOC)
β Analysis complete in 0.82s
Devscope: B Β· Low risk Β· Easy onboarding Β· 0.78 tests Β· 0.82s β‘
{
"health_score": {
"maintainability_grade": "B",
"risk_level": "Low",
"onboarding_difficulty": "Easy",
"score_breakdown": {
"overall": 82.5,
"complexity": 80.2,
"tests": 78.0,
"git_activity": 90.0
}
},
"total_files": 1247,
"total_lines": 45892,
"test_ratio": 0.78,
"scan_time": 0.82
}π Full JSON Schema
{
"analysis": {
"complexity": {
"avg_file_size": 368.5,
"deep_nesting_warning": false,
"largest_files": [
{"file_path": "src/analyzer.py", "size_bytes": 9856}
],
"max_directory_depth": 3
},
"dependencies": [
{
"ecosystem": "Python",
"manifest_file": "pyproject.toml",
"dependency_count": 8,
"dependencies": ["click", "rich", "gitpython", "pathspec"]
}
],
"git_metrics": {
"is_git_repo": true,
"commit_count": 42,
"contributor_count": 2,
"days_since_last_commit": 0
},
"health_score": {
"maintainability_grade": "B",
"risk_level": "Low",
"onboarding_difficulty": "Easy",
"score_breakdown": {
"overall": 82.5,
"complexity": 80.2,
"structure": 90.0,
"tests": 78.0,
"git_activity": 90.0,
"hotspots": 85.0
}
},
"hotspots": [
{
"file_path": "src/analyzer.py",
"lines_of_code": 321,
"depth": 2,
"has_nearby_tests": true,
"reason": "Large file with high complexity",
"risk_score": 75.3
}
],
"languages": {
"Python": 52.9,
"Markdown": 17.6,
"Shell": 11.8
},
"test_metrics": {
"has_tests": true,
"test_file_count": 8,
"source_file_count": 12,
"test_ratio": 0.667
},
"cache_stats": {
"enabled": true,
"hits": 55,
"misses": 5,
"total_files": 60,
"hit_rate": 91.67,
"time_saved_estimate": 0.005
},
"total_files": 60,
"total_lines": 3800,
"scan_time": 0.15
},
"devscope_version": "0.1.0",
"schema_version": "1.0"
}Exit codes:
0= Analysis passed all thresholds1= Runtime error (invalid path, permissions)2= Threshold violated (grade/risk/onboarding)
- name: Code health check
run: |
devscope ci . \
--fail-under B \
--max-risk Medium \
--max-onboarding ModerateIf health drops below B, the job fails with exit code 2.
analyze:
script:
- devscope ci . --fail-under B --json > analysis.json
artifacts:
reports:
codequality: analysis.json#!/bin/bash
devscope ci . --fail-under C
if [ $? -eq 2 ]; then
echo "β Code quality below threshold"
exit 1
fiThe easiest way to integrate Devscope into your workflow β official GitHub Action with automatic PR comments and quality gates.
Add to .github/workflows/devscope.yml:
name: Code Health
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
pull-requests: write
jobs:
health-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: EhsanAzish80/devscope-action@v1
with:
fail-under: B
max-risk: MediumWhat you get:
- β Automatic PR comments with health metrics
- β Sticky updates (no spam)
- β CI quality gates with configurable thresholds
- β Fast caching (5-8s cached runs)
- β Works on public & private repos
Use outputs in other steps:
- uses: EhsanAzish80/devscope-action@v1
id: devscope
- name: Check critical health
run: |
if [ "${{ steps.devscope.outputs.grade }}" == "F" ]; then
echo "::error::Code health is critical!"
fiAnalyze specific directory:
- uses: EhsanAzish80/devscope-action@v1
with:
path: ./src
fail-under: BPR comment preview:
π Devscope Report
Maintainability: π’ B
Risk: π’ Low
Onboarding: Easy
β‘ 0.82s
Analyze your repo β pipx install devscope
Learn more: devscope-action
Get instant code health in every pull request β zero setup, just copy the workflow.
Add this file to your repo: .github/workflows/devscope-pr.yml
name: Devscope PR Health Check
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
jobs:
devscope-health:
name: Post Health Summary
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Full history for git metrics
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install pipx
run: |
python -m pip install --user pipx
python -m pipx ensurepath
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Install devscope
run: pipx install devscope
- name: Run Devscope analysis
id: devscope
run: |
set +e # Don't fail on non-zero exit
OUTPUT=$(devscope summary --compact 2>&1)
EXIT_CODE=$?
# Escape output for GitHub Actions
OUTPUT="${OUTPUT//'%'/'%25'}"
OUTPUT="${OUTPUT//$'\n'/'%0A'}"
OUTPUT="${OUTPUT//$'\r'/'%0D'}"
echo "output=$OUTPUT" >> $GITHUB_OUTPUT
echo "exit_code=$EXIT_CODE" >> $GITHUB_OUTPUT
exit 0 # Always succeed job
- name: Post or update PR comment
uses: actions/github-script@v7
with:
script: |
const output = `${{ steps.devscope.outputs.output }}`;
const exitCode = `${{ steps.devscope.outputs.exit_code }}`;
let commentBody;
if (exitCode === '0') {
commentBody = `## π Devscope Health Check\n\n\`\`\`\n${output}\n\`\`\`\n\n---\n*Updated: ${new Date().toUTCString()}*`;
} else {
commentBody = `## π Devscope Health Check\n\nβ οΈ **Analysis failed**\n\n<details>\n<summary>Error output</summary>\n\n\`\`\`\n${output}\n\`\`\`\n</details>\n\n---\n*Updated: ${new Date().toUTCString()}*`;
}
// Find existing Devscope comment
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const existingComment = comments.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes('π Devscope Health Check')
);
if (existingComment) {
// Update existing comment
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existingComment.id,
body: commentBody,
});
console.log('Updated existing Devscope comment');
} else {
// Create new comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: commentBody,
});
console.log('Created new Devscope comment');
}What it does:
- Runs on every PR (open, update, reopen)
- Installs devscope and analyzes your code
- Posts a sticky comment that updates automatically on new commits
- Fails gracefully if analysis errors
- No secrets required β works on public repos
Example PR comment:
## π Devscope Health Check
Devscope: B Β· Low risk Β· Easy onboarding Β· 0.78 tests Β· 0.82s β‘
---
Updated: Thu, 13 Feb 2026 14:52:33 GMT
Features:
- β Sticky comment (updates instead of spamming)
- β Shows health trend over PR lifetime
- β Zero configuration
- β Works on forks (read-only)
Analyze a codebase with beautiful terminal output.
devscope scan # Current directory
devscope scan /path/to/project # Specific path
devscope scan --json # JSON output
devscope scan --basic # Fast scan (no intelligence)
devscope scan --no-git # Skip git detection
devscope scan --no-cache # Disable caching
devscope scan --clear-cache # Clear cache before scanCI-optimized command (always outputs JSON).
devscope ci # Current directory
devscope ci --fail-under B # Fail if grade < B
devscope ci --max-risk High # Fail if risk > High
devscope ci --max-onboarding Hard # Fail if onboarding > HardGenerate shareable summaries.
devscope summary # Markdown report
devscope summary --badges # Include shields.io badges
devscope summary --compact # One-line summary
devscope summary --json # JSON with badgesInject health metrics into README between markers. Auto-updating health blocks!
devscope inject # Inject into ./README.md
devscope inject docs/STATUS.md # Inject into specific file
devscope inject --check # Check if update needed (exit 2 if yes)
devscope inject --repo ./src # Analyze different directorySetup: Add markers to your README:
# My Project
<!-- DEVSCOPE_START -->
<!-- DEVSCOPE_END -->Result: Health block auto-injected between markers:
<!-- DEVSCOPE_START -->
## π Devscope Report


**Repo:** my-project
**Files:** 1,247
**Lines:** 45,892
**Languages:** Python (45%) Β· TypeScript (33%)
**Health:** B (82.5)
**Risk:** Low
**Onboarding:** Easy
β‘ Scan time: 0.82s
<!-- DEVSCOPE_END -->CI integration:
- name: Update health block
run: |
devscope inject
if git diff --quiet README.md; then
echo "No changes"
else
git config user.name "devscope-bot"
git config user.email "bot@devscope"
git add README.md
git commit -m "chore: update health metrics [skip ci]"
git push
fiFeatures:
- β Deterministic output (no change = no commit)
- β Automatic badge generation
- β Custom markers supported
- β Check mode for CI validation
| Metric | Value |
|---|---|
| Tests | 133 passing |
| Coverage | 82% |
| Type checking | mypy strict mode |
| Platforms | Linux Β· macOS Β· Windows |
| Python | 3.9+ |
This project follows rigorous engineering standards:
- β Full type annotations
- β Comprehensive test suite
- β Zero runtime dependencies conflicts
- β Cross-platform compatibility tested
- Maintainability grading (A-F)
- Risk & onboarding assessment
- CI quality gates with exit codes
- Intelligent caching (10-20x speedup)
- Shareable markdown summaries
- Shields.io badge generation
- Test coverage detection
- JSON automation API
- Configuration file (
.devscope.yml) - Historical trend tracking
- Team analytics dashboard
- Security scanning (CVE detection)
git clone https://github.com/EhsanAzish80/Devscope.git
cd Devscope
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync --all-extras
uv run devscope scanuv run pytest # All tests
uv run pytest --cov # With coverage
uv run pytest tests/test_analyzer.py # Specific fileuv run ruff format . # Format
uv run ruff check . # Lint
uv run mypy src/devscope # Type checkdevscope/
βββ src/devscope/
β βββ cli.py # Command-line interface
β βββ analyzer.py # Core analysis engine
β βββ models.py # Type-safe data models
β βββ formatters.py # Summary & badge generation
β βββ cache.py # Intelligent caching layer
β βββ utils.py # Shared utilities
βββ tests/
β βββ test_analyzer.py
β βββ test_cli.py
β βββ test_cache.py
β βββ test_summary.py
β βββ test_ci_thresholds.py
βββ pyproject.toml # Dependencies & config
Design principles:
- Separation of concerns β CLI, analysis, formatting isolated
- Type safety β Full mypy strict mode compliance
- Performance β Smart caching with automatic invalidation
- Extensibility β Plugin-ready analyzer system
- User experience β Beautiful terminal output with Rich
Core components:
- Analyzer β File system traversal, language detection, metrics calculation
- Cache Manager β File metadata caching with invalidation on change
- Formatters β Output generation (terminal/JSON/markdown/compact)
- CLI β Click-based interface with rich error handling
MIT License - see LICENSE file.
Contributions welcome! Please:
- Fork the repo
- Create a feature branch (
git checkout -b feature/amazing) - Run tests (
./scripts/check.sh) - Submit a PR
For major changes, open an issue first.
Built with:
- π Report a bug
- π‘ Request a feature
- π Documentation