Skip to content

Repository files navigation

🤖 Is it AI-Native?

Is AI-Native social card

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:

Verdict Strongest Assistant Score
AI-Native ≥ 60 %
AI-Assisted 30 – 59 %
Traditional < 30 %

Overview

  • Repository inputs: GitHub repository URLs, owner/repo references, 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

Common Features

  • 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.

Web App

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-testing is 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_tools via modelContext.registerTool(...) — a read-only discovery tool that lists every WebMCP tool the page exposes, including each tool's input and result schema
  • scan_repository_form via 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       │
└──────────────────────┘

Related Components

Use the component-specific READMEs for installation and usage details outside the browser:

API Reference

POST /api/scan

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.

POST /api/report

Save a scan result for sharing when ENABLE_SHARING=true.

Request body:

{ "result": { /* scan result object */ } }

Response:

{ "id": "uuid", "url": "/_/report/uuid" }

GET /api/report/:id

Retrieve a shared report by ID when ENABLE_SHARING=true.

GET /api/health

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.

Supporting Automation

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

Cloud Deployment (Azure)

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.

Infrastructure as Code

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:

  • acrName for Azure Container Registry image pulls
  • staticWebAppCustomDomainName for the frontend hostname after its DNS TXT validation record exists
  • monitoringAlertEmail and monitoringUrl for low-cost availability monitoring
  • enableEngagementWorkbook=false if 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, containerStartupStrategy defaults to scale-to-zero; pass --parameters containerStartupStrategy=keep-warm only 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.
  • minReplicas is derived from containerStartupStrategy in infra/main.bicep.
  • maxReplicas is set directly in the template.scale.maxReplicas block in infra/main.bicep.

CI / CD Pipelines

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

Azure Workbook Monitoring

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_client
  • landing_section_viewed_client
  • outbound_doc_link_clicked_client
  • scan_requested_client
  • scan_succeeded_client
  • scan_completed
  • scan_failed
  • report_created
  • report_share_requested_client
  • report_shared_client
  • shared_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=$workspaceId

To 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.

Development And Local Deployment

Prerequisites

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

Local Development

Backend Only

cd webapp/backend
npm install
npm run dev

The API runs at http://localhost:3000.

Full Stack Without Docker

cd webapp/backend
npm install
npm run dev:full

This 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:frontend

Full Stack With Docker Compose

docker compose up --build

Open the frontend at http://localhost:8080; the backend remains available at http://localhost:3000.

Stop it with:

docker compose down

Backend Container

docker build -t is-ai-native .
docker run -p 3000:3000 -e NODE_ENV=production is-ai-native

The production image is API-only and does not contain frontend files.

Testing

Backend tests:

cd webapp/backend
npm install
npm test
npm run test:unit
npm run test:contract
npm run test:integration

Workspace 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

Environment Variables

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

Project Structure

├── webapp/
│   ├── backend/
│   └── frontend/
├── packages/
│   ├── core/
│   ├── cli/
│   ├── gh-extension/
│   └── vscode-extension/
├── infra/
├── docs/
├── .github/
├── Dockerfile
├── docker-compose.yml
└── README.md

License

This project is licensed under the MIT License.

About

Audit public GitHub repositories for AI coding readiness across Copilot, Claude Code, and Codex.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages