Skip to main content

Citizen Coder Governance

Feature row 32 — Sprint CC

Citizen Coder Governance is included on the Enterprise plan.

What this is

Citizen Coder platforms — Replit, Lovable, Bolt, v0 / Vercel, Cursor, Windsurf — have made it trivial for non-engineers to ship working software with an AI assistant. That is great for velocity and terrifying for security teams: these apps rarely pass through a formal review, often hold secrets in the wrong place, and frequently call production APIs with no awareness of the blast radius.

Citizen Coder Governance discovers those apps, scores them against an 8-signal model, and grades them with an AppSec letter grade from A to F. You get a ranked list of apps that deserve attention before they make the news.

Discovery

The citizen-coder discovery layer (backend/behavry/discovery/citizen/) pulls app lists from:

  • Replit — Teams / Deployments API
  • Lovable — Projects API
  • Bolt — Projects API
  • v0 / Vercel — Projects API, filtered for v0-generated projects
  • Cursor — Team activity feed + deployment metadata
  • Windsurf — Team workspace API

Connectors live under backend/behavry/discovery/connectors/ and are configured per-tenant in Settings → Integrations. A single scheduled sync task (sync_task.py) refreshes all citizen-coder sources every hour by default.

The 8 signals

Each discovered app is scored on 8 signals. The result is a weighted score and a letter grade.

SignalWhat it measures
Secret exposureSecrets in source / env, rotated recently, scoped properly
AuthAuthentication present, password policy, SSO configured
Data egressExternal API calls, where they go, whether they're on an allow-list
Input validationForms/inputs validated, sanitized, rate-limited
Dependency hygieneDependency ages, known-vulnerable versions, CVE count
Infra exposurePublicly reachable? Behind a VPN? Debug routes disabled?
TelemetryErrors logged, crash reports, audit trail
OwnershipHas a named owner, active maintainer, review cadence

Signals are computed by the classifier in backend/behavry/discovery/classifier.py, which combines live connector data with a static rule set.

Grades

GradeMeaningTypical action
AClean across all signalsMonitor
BMinor issues in 1–2 signalsOwner FYI
CReal issues in 2–3 signalsRequire review
DMultiple critical signals failingRequire remediation before continued use
FDangerous configuration (exposed secrets, public data egress, no auth)Quarantine immediately

Grades are recomputed every sync. When a grade drops (e.g. B → D), an alert fires and the app owner is notified.

Dashboard

Discovery → Citizen Coder shows:

  • Apps grouped by platform with their grades
  • Filters: grade, platform, owner, tenant tag
  • Per-app drawer with the full signal breakdown, remediation tips, and a link back to the upstream platform

API

Routes: backend/behavry/discovery/citizen/ + routes.py.

MethodPathPurpose
GET/api/v1/discovery/citizenList discovered apps with grades
GET/api/v1/discovery/citizen/{id}App detail with signal breakdown
POST/api/v1/discovery/citizen/syncForce a sync now
POST/api/v1/discovery/citizen/{id}/quarantineMark an F-graded app as quarantined