Scan any GitHub repository for AI-native development primitives through the hosted web app, the VS Code extension, the GitHub CLI extension, or the standalone CLI.
Is it AI-Native inspects a repository's file tree and checks for AI-native development primitives across GitHub Copilot, Claude Code, and OpenAI Codex. Every surface uses the same shared scan engine and scoring model, so browser, editor, and CLI results stay aligned.
Available surfaces:
- Web app for browser-based scans, shared reports, and WebMCP preview support
- VS Code extension in packages/vscode-extension/README.md
- GitHub CLI extension in packages/gh-extension/README.md
- Standalone CLI in packages/cli/README.md
| Verdict | Strongest Assistant Score |
|---|---|
| AI-Native | ≥ 60 % |
| AI-Assisted | 30 – 59 % |
| Traditional | < 30 % |
- Repository inputs: GitHub repository URLs,
owner/reporeferences, or local workspaces depending on the surface you use - Assistant coverage: GitHub Copilot, Claude Code, and OpenAI Codex
- Primitive categories: Instructions, Prompts, Agents, Skills, MCP Config, and Agent Hooks
- Result shape: overall score, verdict, preferred assistant, per-assistant breakdown, and primitive-level matches
- Shared scan engine across the web app, VS Code extension, GitHub CLI extension, and standalone CLI
- Configuration-driven detection through JSON assistant and primitive definitions in docs/configuration.md
- Per-assistant scoring with an overall verdict based on the strongest assistant score
- GitHub API token support for higher rate limits on repeated remote scans
- Weekly maintenance automation that reviews assistant-related configuration drift before proposing minimal draft PRs
Important
Repo-maintained AI skills power this project. This application uses the WebMCP and GitHub Agentic Workflows skills maintained in the companion webmaxru/agent-skills repository.
Skills currently exposed by the agent-skills repo:
- Agent Package Manager
- GitHub Agentic Workflows
- Language Detector API
- Prompt API
- Proofreader API
- Translator API
- WebMCP
- WebNN
- Writing Assistance APIs
These skills are reviewed regularly and manually validated before changes are relied on in the app's workflows, scanner maintenance, and supporting automation.
The web app is the primary browser-based surface. It provides the quickest path for scanning public GitHub repositories without installing editor or terminal tooling.
Web app capabilities:
- Browser-based scanning backed by the shared repository scan engine
- Shareable reports under
/_/report/<uuid>with 90-day expiry when sharing is enabled - WebMCP preview in Chromium-based browsers when
about://flags/#enable-webmcp-testingis enabled - Split Azure hosting with the static SPA on Azure Static Web Apps Free and the API on Azure Container Apps
WebMCP preview tools:
list_available_toolsviamodelContext.registerTool(...)— a read-only discovery tool that lists every WebMCP tool the page exposes, including each tool's input and result schemascan_repository_formvia the annotated repo scan form — scans a GitHub repository and returns a structured result described by a published result schema
Architecture:
┌──────────────┐ ┌──────────────────────────┐
│ Browser │─────▶│ Azure Static Web Apps │
│ │ │ Free: HTML, JS, CSS, CDN │
└──────┬───────┘ └──────────────────────────┘
│ HTTPS API calls with exact-origin CORS
▼
┌──────────────────────┐ ┌──────────────────┐
│ Azure Container Apps │─────▶│ GitHub API │
│ Express API │ │ repository scan │
└──────────┬───────────┘ └──────────────────┘
▼
┌──────────────────────┐
│ Azure Files │
│ shared reports │
└──────────────────────┘
Use the component-specific READMEs for installation and usage details outside the browser:
- packages/vscode-extension/README.md
- packages/gh-extension/README.md
- packages/cli/README.md
- docs/configuration.md for assistant and primitive configuration
Scan a GitHub repository.
Request body:
{ "repo_url": "https://github.com/owner/repo", "branch": "main" }branch is optional. The response includes the scan result plus metadata such as the scanned branch, source, and paths_scanned.
Save a scan result for sharing when ENABLE_SHARING=true.
Request body:
{ "result": { /* scan result object */ } }Response:
{ "id": "uuid", "url": "/_/report/uuid" }Retrieve a shared report by ID when ENABLE_SHARING=true.
Health check endpoint returning only the runtime capability flags needed for liveness checks and lightweight diagnostics: scan token availability, report sharing status, and Application Insights telemetry status.
The repository includes a GitHub Agentic Workflow at .github/workflows/weekly-assistant-config-review.md to keep supporting skills, prompts, and scanner configuration aligned with current assistant platform documentation.
The workflow:
- fetches vendor documentation sources listed in docs/configuration.md
- compares them against the current repository-scoped assistant model
- narrows detected drift to the smallest justified change set
- creates a draft PR instead of merging directly
The static frontend runs on Azure Static Web Apps Free. The Express API remains on Azure Container Apps Consumption. Static Web Apps linked backends require the Standard plan, so the Free topology embeds the ACA origin and public frontend settings in runtime-config.js at build time, then allows only the generated SWA origin plus the configured public site origin through backend CORS.
All Azure resources are defined in infra/main.bicep with defaults in infra/main.bicepparam.
| Resource | Purpose |
|---|---|
| Log Analytics Workspace | Centralized logs and diagnostics |
| Application Insights | Scan, report, view, and rate-limit telemetry |
| Shared Azure Workbook | Growth and engagement dashboard over page views, sessions, CTA clicks, shares, and report activity |
| Azure Static Web App | Free-plan global hosting for the generated frontend artifact |
| Container Apps Environment | Consumption-plan hosting environment |
| Container App | Backend API runtime with probes and autoscaling |
| Azure Storage Account + File Share | Optional persistence for shared reports |
| Action Group + Availability Test + Alert Rule | Optional email alerting for site availability |
Optional deployment features:
acrNamefor Azure Container Registry image pullsstaticWebAppCustomDomainNamefor the frontend hostname after its DNS TXT validation record existsmonitoringAlertEmailandmonitoringUrlfor low-cost availability monitoringenableEngagementWorkbook=falseif you need to skip workbook deployment while keeping Application Insights enabled
Container scale settings are configured in infrastructure, not via the public API:
- For manual deployments,
containerStartupStrategydefaults toscale-to-zero; pass--parameters containerStartupStrategy=keep-warmonly when faster cold-start recovery justifies an idle replica. - For the GitHub Actions production deployment, set the inline
containerStartupStrategy=...override in .github/workflows/cd.yml. minReplicasis derived fromcontainerStartupStrategyin infra/main.bicep.maxReplicasis set directly in thetemplate.scale.maxReplicasblock in infra/main.bicep.
| Workflow | File | Trigger | Purpose |
|---|---|---|---|
| CI | .github/workflows/ci.yml |
Push to non-main branches, PRs to main |
Test and build the static frontend, test the backend, scan the backend image |
| CD | .github/workflows/cd.yml |
Push to main |
Deploy the backend image and Bicep resources, build the frontend with the ACA origin, then upload it to SWA |
The main Azure deployment now provisions the shared workbook automatically whenever enableAppInsights=true and enableEngagementWorkbook=true.
The workbook combines workspace-based AppPageViews and AppEvents telemetry so you can monitor promo traffic and product engagement in one place. Primary custom event names now include:
cta_clicked_clientlanding_section_viewed_clientoutbound_doc_link_clicked_clientscan_requested_clientscan_succeeded_clientscan_completedscan_failedreport_createdreport_share_requested_clientreport_shared_clientshared_report_viewed
Use the workspace-based AppPageViews and AppEvents tables for workbook queries.
To deploy the workbook by itself into an existing resource group and workspace, run:
$resourceGroup = '<resource-group>'
$workspaceId = az monitor log-analytics workspace show --resource-group $resourceGroup --workspace-name is-ai-native-logs --query id -o tsv
az deployment group create --resource-group $resourceGroup --template-file infra/workbooks/is-ai-native-monitoring.workbook.bicep --parameters workbookSourceId=$workspaceIdTo provision the Azure resources and deploy the ACA backend manually, run:
az deployment group create --resource-group <resource-group> --template-file infra/main.bicep --parameters @infra/main.bicepparam --parameters containerImage=<image> githubToken=<token>The production CD workflow performs the additional Static Web Apps artifact upload. See docs/migrations/swa-frontend-migration.md for the custom-domain cutover sequence.
| Tool | Version | Required for |
|---|---|---|
| Node.js | 24+ | Backend development and tests |
| Docker | 20+ | Container builds |
| Docker Compose | v2+ | Full-stack local run |
| Azure CLI | 2.x | Manual Azure deployment |
cd webapp/backend
npm install
npm run devThe API runs at http://localhost:3000.
cd webapp/backend
npm install
npm run dev:fullThis serves the SPA from webapp/frontend/ on the same origin as the API.
Build the standalone static artifact with:
$env:FRONTEND_API_ORIGIN = 'http://localhost:3000'
$env:ENABLE_SHARING = 'false'
$env:PUBLIC_APPLICATIONINSIGHTS_CONNECTION_STRING = ''
$env:SITE_ORIGIN = 'http://localhost:8080'
npm run build:frontenddocker compose up --buildOpen the frontend at http://localhost:8080; the backend remains available at http://localhost:3000.
Stop it with:
docker compose downdocker build -t is-ai-native .
docker run -p 3000:3000 -e NODE_ENV=production is-ai-nativeThe production image is API-only and does not contain frontend files.
Backend tests:
cd webapp/backend
npm install
npm test
npm run test:unit
npm run test:contract
npm run test:integrationWorkspace tests:
npm install
npm run test:frontend
npm run test:core
npm run test:cli
npm run test:gh-extension
npm run test:vscode-extension
npm run build:cli
npm run build:vscode-extension| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
Express server port |
NODE_ENV |
— | Set to production in deployed environments |
GH_TOKEN_FOR_SCAN |
— | GitHub PAT for higher scan API rate limits |
ENABLE_SHARING |
false |
Enable shared reports in the backend and static frontend build |
APPLICATIONINSIGHTS_CONNECTION_STRING |
— | Server-side Application Insights connection string |
PUBLIC_APPLICATIONINSIGHTS_CONNECTION_STRING |
— | Browser telemetry connection string embedded in the static frontend build |
REPORTS_DIR |
./data/reports |
Shared report storage directory |
FRONTEND_PATH |
unset | Path to a source-checkout frontend directory |
TRUST_PROXY |
1 in production, otherwise false |
Express trust proxy setting |
SCAN_RATE_LIMIT_WINDOW_MS |
900000 |
/api/scan rate-limit window |
SCAN_RATE_LIMIT_MAX |
120 |
/api/scan rate-limit max requests |
REPORT_RATE_LIMIT_WINDOW_MS |
900000 |
/api/report rate-limit window |
REPORT_RATE_LIMIT_MAX |
240 |
/api/report rate-limit max unsafe requests |
ALLOWED_ORIGINS |
unset | Comma-separated exact frontend origins allowed by backend CORS |
FRONTEND_API_ORIGIN |
same origin | ACA origin embedded in the static frontend artifact at build time |
SITE_ORIGIN |
SWA or configured custom-domain URL in Azure | Public frontend origin for canonical tags, static site files, monitoring, and backend CORS |
SITE_NAME |
IsAINative |
Product name used by the optional Express frontend renderer |
SITE_SHORT_NAME |
SITE_NAME |
Short product name used by the optional Express frontend renderer |
DEFAULT_PAGE_TITLE |
built-in default | Homepage title used by the optional Express frontend renderer |
DEFAULT_META_DESCRIPTION |
built-in default | Homepage description used by the optional Express frontend renderer |
TWITTER_HANDLE |
unset | Social attribution used by the optional Express frontend renderer |
ALLOW_SITE_INDEXING |
true in production, otherwise false |
Indexing control used by the optional Express frontend renderer |
├── webapp/
│ ├── backend/
│ └── frontend/
├── packages/
│ ├── core/
│ ├── cli/
│ ├── gh-extension/
│ └── vscode-extension/
├── infra/
├── docs/
├── .github/
├── Dockerfile
├── docker-compose.yml
└── README.md
This project is licensed under the MIT License.