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 - Single-container hosting model where Express serves both the SPA and the API
WebMCP preview tools:
scan_repositoryvianavigator.modelContext.registerTool(...)scan_repository_formvia the annotated repo scan form
Architecture:
┌──────────────┐ ┌────────────────┐
│ Browser │──3000─▶│ Express App │
│ (SPA) │ │ SPA + API │
└──────────────┘ └───────┬────────┘
│
┌────────▼────────┐
│ GitHub API │
│ (repo scan) │
└────────┬────────┘
│
┌────────▼──────────────┐
│ File-backed report │
│ store (optional) │
│ for 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.
Returns server configuration flags.
Response:
{ "sharingEnabled": false }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 web app is designed to run on Azure Container Apps on the Consumption plan.
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 |
| Container Apps Environment | Consumption-plan hosting environment |
| Container App | Web app runtime with probes, autoscaling, and managed identity |
| 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 pullscustomDomainNameandmanagedCertNamefor managed TLS on a custom hostnamesecondaryCustomDomainNameandsecondaryManagedCertNamefor dual-hostname migrationsmonitoringAlertEmailandmonitoringUrlfor 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, set
containerStartupStrategyin infra/main.bicepparam or pass--parameters containerStartupStrategy=keep-warmwhen runningaz deployment group create. - 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, build image, run Trivy scan, upload SARIF |
| CD | .github/workflows/cd.yml |
Push to main |
Build and push image, run Trivy, deploy to Azure via OIDC |
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 deploy the full stack, including the workbook, with the repo defaults, run:
az deployment group create --resource-group <resource-group> --template-file infra/main.bicep --parameters @infra/main.bicepparam --parameters containerImage=<image> githubToken=<token>| 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.
docker compose up --buildStop it with:
docker compose downdocker build -t is-ai-native .
docker run -p 3000:3000 -e NODE_ENV=production is-ai-nativeBackend 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 |
APPLICATIONINSIGHTS_CONNECTION_STRING |
— | Server-side Application Insights connection string |
PUBLIC_APPLICATIONINSIGHTS_CONNECTION_STRING |
APPLICATIONINSIGHTS_CONNECTION_STRING |
Frontend telemetry connection string |
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_ORIGIN |
false |
Allowed CORS origin |
SITE_ORIGIN |
unset | Public base URL for canonical tags and social cards |
SITE_NAME |
IsAINative |
Product name used in structured data and manifest |
SITE_SHORT_NAME |
SITE_NAME |
Short product name used in the manifest |
DEFAULT_PAGE_TITLE |
built-in default | Homepage title |
DEFAULT_META_DESCRIPTION |
built-in default | Homepage meta description |
TWITTER_HANDLE |
unset | Optional social card handle |
ALLOW_SITE_INDEXING |
true in production, otherwise false |
Search indexing control |
├── 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.