{"name":"Cloak Harbor Personal Exposure Defense","tagline":"AI-native operating layer for Personal Exposure Defense","version":"0.3.0-demo","mode":"authorized-local-with-synthetic-fallback","posture":"defensive","magicRule":"One authorized client, one real exposure-defense loop, zero fake actions.","notForUse":["people-search","doxxing","osint-crawling","surveillance"],"docs":{"overview":"https://cloak.platphormnews.com/docs","personalExposureDefense":"https://cloak.platphormnews.com/docs/personal-exposure-defense","sigreduce":"https://cloak.platphormnews.com/docs/sigreduce","architecture":"https://cloak.platphormnews.com/docs/architecture","responsibleUse":"https://cloak.platphormnews.com/docs/responsible-use","faq":"https://cloak.platphormnews.com/faq"},"api":{"openapi":"https://cloak.platphormnews.com/openapi.yaml","openapiJson":"https://cloak.platphormnews.com/openapi.json","health":"https://cloak.platphormnews.com/api/health","endpoints":[{"method":"GET","path":"/api/v1/findings","auth":"public","paginated":true,"description":"Case findings from Postgres case-state store when configured, else synthetic fallback"},{"method":"GET","path":"/api/v1/findings/{id}","auth":"public"},{"method":"GET","path":"/api/v1/principal","auth":"public","description":"Redacted authorized-local principal summary when a self-case exists, otherwise synthetic fallback"},{"method":"GET","path":"/api/v1/principals/{id}","auth":"public","description":"Principal detail with protected fields only when PLATPHORM_API_KEY is supplied"},{"method":"GET","path":"/api/v1/evidence","auth":"public","description":"Redacted authorized-local evidence when persisted records exist, otherwise synthetic fallback"},{"method":"GET","path":"/api/v1/evidence/{id}","auth":"public","description":"Evidence detail with protected evidence only when PLATPHORM_API_KEY is supplied"},{"method":"GET","path":"/api/v1/stealthscore","auth":"public","description":"Case-derived StealthScore when Postgres self-case state exists"},{"method":"GET","path":"/api/v1/risk/summary","auth":"public","description":"Explainable case-derived risk summary"},{"method":"GET","path":"/api/v1/calendar","auth":"public","description":"Case-derived cadence from persisted tasks"},{"method":"GET","path":"/api/v1/reports","auth":"public","description":"Case-derived executive report summary"},{"method":"GET","path":"/api/v1/integrations","auth":"public","description":"Runtime integration registry with missing env and handoff readiness"},{"method":"GET","path":"/api/v1/integrations/status","auth":"public","description":"Runtime integration status from the shared registry"},{"method":"GET","path":"/api/v1/ui","auth":"public","description":"UI scaffold state"},{"method":"GET","path":"/api/v1/ui/screens","auth":"public","description":"Demo screen registry"},{"method":"GET","path":"/api/v1/capabilities","auth":"public","description":"PED OS capability catalog, screen bindings, and Docker/Vercel support flags"},{"method":"GET","path":"/api/v1/setup","auth":"public","description":"Persistent backend setup status"},{"method":"GET","path":"/api/v1/loop","auth":"public","description":"Defense loop ledger from principal to report"},{"method":"GET","path":"/api/v1/intents","auth":"public","description":"Protected intent ledger backed by Postgres when configured"},{"method":"GET","path":"/api/v1/actions","auth":"public","description":"Case-derived action packet list from Postgres when configured"},{"method":"POST","path":"/api/v1/capabilities","auth":"api-key","description":"Bootstrap Postgres capability support"},{"method":"POST","path":"/api/v1/setup","auth":"api-key","description":"Initialize Postgres persistence tables for local or Vercel production"},{"method":"POST","path":"/api/v1/workloads/self-case","auth":"api-key","description":"Execute authorized self-case workload with protected profile, evidence, case findings, case tasks, and audit intent","externalActionTaken":false},{"method":"POST","path":"/api/v1/kanban/tasks","auth":"api-key","description":"Create a persisted local case task when Postgres is configured","externalActionTaken":false},{"method":"POST","path":"/api/v1/kanban/tasks/{id}/move","auth":"api-key","description":"Move a persisted local case task between lanes","externalActionTaken":false},{"method":"POST","path":"/api/v1/loop","auth":"api-key","description":"Record a Postgres loop ledger checkpoint"},{"method":"GET","path":"/api/events","auth":"public","description":"event outbox"},{"method":"POST","path":"/api/v1/action-packets/draft","auth":"api-key","description":"Generate and persist a dry-run action packet draft from active case findings","dryRun":true,"externalActionTaken":false},{"method":"POST","path":"/api/v1/actions/{id}/approve","auth":"api-key","description":"Persist local human approval for a dry-run action packet","externalActionTaken":false},{"method":"POST","path":"/api/v1/actions/{id}/reject","auth":"api-key","description":"Persist local human rejection for a dry-run action packet","externalActionTaken":false},{"method":"POST","path":"/api/v1/actions/{id}/send","auth":"api-key","description":"Blocked external send intent; no external action executes","externalActionTaken":false},{"method":"POST","path":"/api/v1/reports/RPT-EXEC-001/review","auth":"api-key","description":"Record local case-derived report review intent","externalActionTaken":false},{"method":"POST","path":"/api/v1/reports/RPT-EXEC-001/publish-docs","auth":"api-key","description":"Publish a redacted report to PlatPhorm Docs through server-side PLATPHORM_API_KEY; returns downstreamActionTaken"},{"method":"POST","path":"/api/v1/reports/RPT-EXEC-001/export-sheets","auth":"api-key","description":"Export report rows to PlatPhorm Sheets through server-side PLATPHORM_API_KEY; returns downstreamActionTaken"},{"method":"POST","path":"/api/v1/reports/RPT-EXEC-001/upload-files","auth":"api-key","description":"Upload report markdown to PlatPhorm Files through server-side PLATPHORM_API_KEY; returns downstreamActionTaken"},{"method":"POST","path":"/api/v1/reports/RPT-EXEC-001/run-browserops","auth":"api-key","description":"Run a BrowserOps journey for the Cloak case surface through server-side PLATPHORM_API_KEY; returns downstreamActionTaken"},{"method":"POST","path":"/api/v1/reports/RPT-EXEC-001/run-sandbox","auth":"api-key","description":"Start a Sandbox lifecycle run with redacted report context through server-side PLATPHORM_API_KEY; returns downstreamActionTaken"},{"method":"GET","path":"/api/v1/operator/workflows/self-case","auth":"public","description":"Inspect Vercel Workflow readiness for the authorized self-case pipeline","externalActionTaken":false},{"method":"POST","path":"/api/v1/operator/workflows/self-case","auth":"server-operator","description":"Queue the durable Vercel Workflow self-case pipeline on Vercel, or record a blocked workflow intent locally","externalActionTaken":false},{"method":"POST","path":"/api/v1/operator/clients","auth":"server-operator","description":"Save an authorized client profile through server-side PLATPHORM_API_KEY and Postgres","externalActionTaken":false},{"method":"POST","path":"/api/v1/operator/schedules/osint","auth":"server-operator","description":"Create persisted daily, weekly, monthly, or one-time OSINT approval schedules","externalActionTaken":false},{"method":"POST","path":"/api/v1/operator/schedules/osint/progress","auth":"server-operator","description":"Advance due OSINT schedules and linked Kanban cards","externalActionTaken":false},{"method":"POST","path":"/api/v1/operator/infrastructure/aws","auth":"server-operator","description":"Plan or execute AWS S3/RDS infrastructure actions with server-side AWS credentials","externalActionTaken":"true when AWS creates or confirms a resource"},{"method":"POST","path":"/api/v1/integrations/{service}/{action}","auth":"api-key","description":"Record a protected integration intent, delegate supported report handoffs, or return an honest missing-config/no-executor state"},{"method":"POST","path":"/api/webhooks","auth":"hmac-signature","idempotent":true}]},"ui":{"scaffolded":true,"externalActionTaken":false,"routes":[{"path":"/","url":"https://cloak.platphormnews.com"},{"path":"/case","url":"https://cloak.platphormnews.com/case"},{"path":"/case/intake","url":"https://cloak.platphormnews.com/case/intake"},{"path":"/case/exposures","url":"https://cloak.platphormnews.com/case/exposures"},{"path":"/case/evidence","url":"https://cloak.platphormnews.com/case/evidence"},{"path":"/case/risk","url":"https://cloak.platphormnews.com/case/risk"},{"path":"/case/kanban","url":"https://cloak.platphormnews.com/case/kanban"},{"path":"/case/calendar","url":"https://cloak.platphormnews.com/case/calendar"},{"path":"/case/actions","url":"https://cloak.platphormnews.com/case/actions"},{"path":"/communications","url":"https://cloak.platphormnews.com/communications"},{"path":"/meeting","url":"https://cloak.platphormnews.com/meeting"},{"path":"/provisioning","url":"https://cloak.platphormnews.com/provisioning"},{"path":"/portal/customer","url":"https://cloak.platphormnews.com/portal/customer"},{"path":"/portal/management","url":"https://cloak.platphormnews.com/portal/management"},{"path":"/case/report","url":"https://cloak.platphormnews.com/case/report"},{"path":"/case/trace","url":"https://cloak.platphormnews.com/case/trace"},{"path":"/integrations","url":"https://cloak.platphormnews.com/integrations"},{"path":"/screenshots","url":"https://cloak.platphormnews.com/screenshots"},{"path":"/settings","url":"https://cloak.platphormnews.com/settings"},{"path":"/docs","url":"https://cloak.platphormnews.com/docs"},{"path":"/api/docs","url":"https://cloak.platphormnews.com/api/docs"}],"states":"synthetic, scaffolded, local_preview, dry_run, connected, configured, missing_env, protected_required, human_review_required, waiting_client, waiting_partner, waiting_operator, ready_for_review, approved, blocked, degraded, unavailable, future, complete"},"auth":{"readEndpoints":"public-safe synthetic data or redacted authorized-local case data","stateChanging":"Authorization: Bearer $PLATPHORM_API_KEY or X-PlatPhorm-API-Key: $PLATPHORM_API_KEY","webhooks":"HMAC x-cloak-signature"},"guardrails":{"humanApproval":"required for all external actions","aiAutoSubmit":false,"aiFallback":"deterministic template draft when AI Gateway unavailable"},"feeds":{"rss":"https://cloak.platphormnews.com/rss.xml","sitemap":"https://cloak.platphormnews.com/sitemap.xml"}}