Current version: v0.7.0
Cloud security posture management, compliance, and live request tracing — for AWS and GCP — in a single dashboard.
Watchmen scans your cloud infrastructure for misconfigurations, runs SOC 2 Type II and ISO 27001:2022 compliance checks, answers natural-language questions about your environment, and lets you watch live Kubernetes request traffic flow in real time.
v0.7.0 is planned around guided agentic workflows that help users investigate findings, plan safe remediation, and verify fixes using Watchmen's existing scan, compliance, attack path, request log, and Terraform/GitHub capabilities.
See Watchmen v0.7.0 Agentic Roadmap for the implementation plan, milestone sequence, safety requirements, and out-of-scope boundaries.
This release focuses on making Watchmen more usable as a real multi-cloud operator console: better AWS/GCP parity, clearer scan status, faster navigation, safer task cleanup, and more resilient auth and cloud API handling.
- Added AWS/GCP filters to Findings, so the main findings page can show all cloud issues together or focus on one provider.
- Added AWS/GCP filters to Attack Path Analysis.
- Added AWS/GCP filters to Compliance, including recalculated score, counts, CSV export, and project breakdown for the selected provider.
- Normalized AWS findings into shared multi-cloud UI models where useful, while keeping GCP-specific remediation flows scoped to GCP.
- Fixed merged compliance category collisions by namespacing internal category/control IDs by provider (
gcp:*,aws:*) while keeping readableCC6,CC6.1.a, etc. labels in the UI. - Added visible GCP/AWS badges in multi-cloud Compliance and Findings screens.
- Added richer AWS sync logs in the UI, including credential checks, request lifecycle events, scan IDs, active task state, and snapshot summaries.
- Brought GCP sync logs closer to the AWS logging experience.
- Manual sync buttons now fetch fresh scan data and surface progress in the logs section.
- Added no-credentials handling for AWS with clear settings links instead of silent long-running scans.
- Added matching no-credentials UX patterns for GCP where applicable.
- Added structured server-side scan logging with scan IDs for AWS and GCP scan routes.
- Hid noisy partial scan coverage warnings from the main GCP dashboard while keeping full scan coverage available in the dedicated coverage screen.
- Added Clear All Tasks behavior in the dashboard and task center.
- Added pruning for old finished tasks to prevent task menu buildup.
- Added stale active task handling so restored old sessions do not show ancient tasks as still running.
- Improved task error envelopes for GCP/AWS scan streams with scan IDs and credential-required metadata.
- Added global dashboard shortcuts:
G-> GCPA-> AWST-> TasksR-> TraceF-> FindingsP-> Attack PathsD-> ContainersC-> ComplianceH-> HistoryS-> Settings
- Added
?shortcut help modal. - Added a centered shortcut confirmation badge so route changes feel registered immediately.
- Made shortcut handling more reliable by using document-level capture and ignoring typing targets.
- Hardened Google token refresh handling so expired or unreachable refresh flows redirect cleanly instead of causing retry loops.
- Added friendlier login notices for expired sessions and sign-in failures.
- Reduced noisy auth refresh stack traces and preserved actionable error state.
- Fixed GCP API error parsing when Google returns numeric error codes.
- Added a regression test for numeric GCP API error classification.
- Normalized BigQuery dataset metadata handling to avoid runtime type errors.
- Improved AWS and GCP dashboard sync behavior to avoid repeated scan loops.
- Added clearer settings links when cloud credentials are missing.
- Kept AWS-specific and GCP-specific remediation boundaries explicit in shared views.
- Updated visible app version text to v0.4.0.
- TypeScript type-check passes with
npm run type-check. - Added
lib/gcp/client.test.tsfor the numeric Google API error regression.
| Category | Capabilities |
|---|---|
| GCP scanning | IAM, service accounts, storage buckets, GKE, Cloud Run, Cloud SQL, BigQuery, Pub/Sub, Secret Manager, Compute VMs, firewall rules |
| AWS scanning | IAM users & roles, EC2, EKS, RDS, Lambda, S3, Security Groups, SNS, Secrets Manager, Redshift, Load Balancers |
| Security findings | Automated detection of critical misconfigurations with AI-powered remediation guides |
| Compliance | SOC 2 Type II (18 controls) and ISO 27001:2022 (18 controls) with score trending and risk acceptance |
| AI assistant | Natural-language queries powered by Claude, Gemini, or GPT-4o — press / to open from anywhere |
| AI log analysis | Ask freeform questions about live container logs directly in the topology view |
| Request tracing | Live topology graph of Kubernetes traffic with animated pulse on real requests |
| Multi-user | Per-user encrypted cloud credentials, AI keys, and compliance history |
flowchart LR
subgraph Users["Users (browser)"]
U1["Engineer"]
U2["Security team"]
end
subgraph Watchmen["Watchmen (Next.js)"]
AUTH["Auth\nGoogle OAuth"]
SCAN["Scanner\nGCP + AWS APIs"]
SNAP[("Snapshot\nPostgreSQL")]
NLP["AI Pipeline\nNLP queries"]
COMP["Compliance\nSOC 2 · ISO 27001"]
FIND["Findings\nSecurity rules"]
TRACE["Tracer\nLive K8s graph"]
end
subgraph Cloud["Cloud Infrastructure"]
GCP["GCP\n10+ services"]
AWS["AWS\n10+ services"]
K8S["Kubernetes\n+ Istio"]
end
subgraph AI["AI Providers\n(user-owned keys)"]
LLM["Claude · Gemini · GPT-4o"]
end
U1 --> AUTH
U2 --> AUTH
AUTH --> SCAN
SCAN -->|cache| SNAP
SNAP --> NLP
SNAP --> COMP
SNAP --> FIND
NLP --> LLM
TRACE --> K8S
SCAN --> GCP
SCAN --> AWS
No cloud credentials needed. Uses fixture data.
git clone https://github.com/YOUR_ORG/watchmen.git
cd watchmen
npm install
cp .env.local.example .env.localEdit .env.local:
AUTH_SECRET=<openssl rand -base64 32>
DEMO_MODE=true
USE_MOCK_DATA=true
POSTGRES_URL=postgresql://postgres:dev@localhost:5432/watchmen
Start a local database:
docker run -d --name watchmen-pg \
-e POSTGRES_PASSWORD=dev -e POSTGRES_DB=watchmen \
-p 5432:5432 postgres:16-alpine
psql postgresql://postgres:dev@localhost:5432/watchmen < scripts/migrate.sqlnpm run dev # normal mode
npm run dev:debug # debug mode with structured server logsSign in with the Enter Demo button. Go to Settings → AI Keys to add a Gemini, Claude, or OpenAI key to enable natural-language queries and AI recommendations.
| Guide | Contents |
|---|---|
| Deployment Guide | Environment variables, GCP + AWS setup, Google OAuth, database, Vercel, Cloud Run, Kubernetes (full stack + Istio), CI/CD |
| User Guide | Signing in, adding AI keys, queries, findings, compliance, risk acceptance |
| Architecture | System diagrams, component map, database schema, request flow |
graph TD
subgraph K8s["Kubernetes (optional — for live tracing)"]
PROC["watchmen-processor\n(Go)"]
ECHO["wm-echo + nginx\n+ istio-proxy"]
end
subgraph App["Watchmen App (Next.js 15)"]
API["API Routes"]
UI["React UI"]
end
subgraph Data["Persistence"]
PG[("PostgreSQL")]
end
subgraph CloudAPIs["Cloud APIs"]
GCP["GCP\nIAM · GKE · Cloud SQL\nCloud Run · BigQuery…"]
AWS["AWS\nIAM · EC2 · S3 · RDS\nLambda · EKS…"]
end
subgraph AIProviders["AI (user-owned keys)"]
AI["Claude · Gemini · GPT-4o"]
end
Browser["Browser"] --> UI
UI --> API
API --> PG
API --> GCP
API --> AWS
API --> AI
API --> PROC
PROC --> ECHO
See docs/architecture.md for the full diagrams including request flow, compliance engine, database schema, and Kubernetes topology.
| Layer | Technology |
|---|---|
| Framework | Next.js 15 (App Router), React 19 |
| Language | TypeScript (strict) |
| Auth | NextAuth v5, Google OAuth |
| Database | PostgreSQL (Vercel Postgres / Neon / Cloud SQL / self-hosted) |
| AI | Anthropic Claude, Google Gemini, OpenAI GPT-4o |
| Cloud APIs | Google APIs (googleapis), AWS SDK v3 |
| UI | Tailwind CSS, Framer Motion, Lucide |
| Container | Docker (multi-stage, non-root, read-only filesystem) |
| Orchestration | Kubernetes + optional Istio service mesh |
| Tracing | OpenTelemetry → GCP Cloud Trace |
| Processor | Go 1.22 sidecar service |
watchmen/
├── app/ Next.js app router pages and API routes
│ ├── api/ REST API endpoints
│ └── dashboard/ All dashboard pages (GCP, AWS, compliance, trace, settings)
├── lib/ Shared utilities
│ ├── aws/ AWS SDK wrappers and resource scanners
│ ├── gcp/ GCP API wrappers and resource scanners
│ ├── ai/ Provider-agnostic AI client (Claude / Gemini / OpenAI)
│ ├── compliance/ SOC 2 and ISO 27001 control checks
│ └── encryption.ts AES-256-GCM key storage
├── services/
│ ├── request-processor/ Go service — traces in-cluster HTTP requests
│ └── test-echo/ Lightweight echo app for topology demos
├── ../watchmen-infra/k8s/ Kubernetes manifests
│ └── istio/ Optional Istio mTLS and access-log telemetry
├── scripts/
│ ├── migrate.sql Database schema
│ └── terraform/ GCP + AWS test infrastructure (demo environments)
└── docs/ Extended guides and diagrams
| Variable | Required | Description |
|---|---|---|
AUTH_SECRET |
✅ | openssl rand -base64 32 |
GOOGLE_CLIENT_ID |
✅* | Google OAuth client ID |
GOOGLE_CLIENT_SECRET |
✅* | Google OAuth client secret |
ALLOWED_EMAILS |
✅** | Comma-separated allowed emails |
ALLOWED_DOMAIN |
✅** | e.g. yourcompany.com |
POSTGRES_URL |
✅ | PostgreSQL connection string |
GCP_PROJECTS |
— | Comma-separated GCP project IDs |
GCP_SERVICE_ACCOUNT_KEY |
— | Base64-encoded service account JSON |
GCP_ORG_ID |
— | Enumerate all org projects automatically |
USE_MOCK_DATA |
— | true → use fixture data (no cloud API calls) |
DEMO_MODE |
— | true → auto sign-in, fixture data, no OAuth needed |
WATCHMEN_DEBUG |
— | true or 1 → enable structured debug logs and timing in key API flows |
NEXT_PUBLIC_WATCHMEN_DEBUG |
— | true or 1 → expose debug mode to browser code when needed |
PROCESSOR_URL |
— | Internal processor service URL (Kubernetes only) |
* Not required in DEMO_MODE=true.
** At least one required (not needed in DEMO_MODE=true).
AWS and GCP credentials for individual users are stored encrypted in the database via Settings → Cloud Credentials — no per-deployment AWS env vars needed.
npm run type-check # TypeScript — no emit
npm run lint # ESLint
npm test # Jest unit testsPull requests welcome. See docs/deployment.md for full setup instructions.







