dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
전체 포트폴리오의 메모리·조정·검증·거버넌스를 관리합니다. 우리 회사도 이를 기반으로 운영하며 영수증을 공개합니다
Memory, coordination, verification, and governance across a whole portfolio. We run our own company on it, and we publish the receipts.
보안TypeScript · PythonGitHub @nxtg-ai온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
FM-agnostic AI Trust & Safety scanner — multi-provider grounded claim verification (Apache-2.0 CLI + optional hosted tier)
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Faultline — We check the receipts on AI output.
Future-proof your agent stack. The only governance CLI not owned by an AI lab.
Faultline decomposes AI-generated output into atomic claims, verifies each against live evidence, and enforces a CI gate before hallucinations reach production. Built for teams governing LLM agents at scale — provider-agnostic across Gemini, OpenAI, Claude, Perplexity, and local models.
Release stage: alpha. Usable today, with sharp edges. Verdict accuracy has not yet been measured on a labelled test set, and anything may change before 1.0.README 전문 보기 ↗Future-proof your agent stack. The only governance CLI not owned by an AI lab.
Faultline decomposes AI-generated output into atomic claims, verifies each against live evidence, and enforces a CI gate before hallucinations reach production. Built for teams governing LLM agents at scale — provider-agnostic across Gemini, OpenAI, Claude, Perplexity, and local models.
Release stage: alpha. Usable today, with sharp edges. No accuracy figure is claimed: verdict accuracy has not yet been re-graded independently. Anything may change before 1.0.
The hosted API ships three governance records as code: a risk register export (POST /scan/risk-register), a tamper-evident audit log manifest (GET /audit/log/manifest, admin keys only), and human sign-off records (POST /scans/:id/approve, GET /scans/:id/approvals). In the manifest, each chain hash is the SHA-256 of the entry hash followed by the previous chain hash. You can recompute the chain with openssl dgst -sha256 alone, with no Faultline tooling.
| Item | State | How checked |
|---|---|---|
| CLI on npm | @nxtg/faultline 0.11.1 | npm view @nxtg/faultline version |
| Hosted API | https://faultline-api.fly.dev, version 0.11.1 | curl https://faultline-api.fly.dev/health |
| Web app | https://faultline.nxtg.ai (separate repo, faultline-web, on Vercel) | live pricing page read 2026-10-01 |
| Plans | Free 5 scans/month. Personal $19/mo, 100 scans. Pro $49/mo, 500 scans. Enterprise: custom, scan allowance set in the contract | https://faultline.nxtg.ai/pricing |
| Multi-model consensus | Enterprise only. The API returns 403 consensus_not_in_plan to any caller below Enterprise, before the stream opens | packages/api/src/plugins/consensus-entitlement.ts; live check by fp 2026-10-01 (pro, personal and free 403, enterprise 200, mock provider) |
POST /critique | Needs an API key. Rate limited. Covered by the provider-spend cap and written to the spend ledger | packages/api/src/routes/critique.ts |
| Provider-spend cap | $100/month. The ledger records every managed scan and critique. Enforcement ships dormant (FAULTLINE_PROVIDER_SPEND_CAP=on turns it on) and is off in production | docs/provider-spend-cap.md; GET /usage showed providerBudget.enforced=false on 2026-10-01 |
| Per-key monthly scan cap (API side) | Dormant (FAULTLINE_USAGE_CAP). Plan limits above are enforced by faultline-web | docs/usage-cap.md |
| Capability | Description |
|---|---|
| Atomic claim extraction | Decomposes AI output into fact / opinion / interpretation with importance scoring |
| Per-claim verification | Verdict: supported / contradicted / mixed / unverified + confidence score |
| Scan comparison | POST /scan/compare + faultline compare — new/removed claims, verdict changes, trust score delta |
| EU AI Act compliance | Risk tier mapping (Unacceptable / High / Limited / Minimal), triggered articles, mitigations |
| Compliance CI gate | --ci flag exits non-zero on non-compliant articles or high/critical risk — enforce EU AI Act in CI/CD |
| Weakest-link detection | Per-claim fragility scoring — finds the claim that most undermines the argument |
| Claim dependency graph | Mermaid and Graphviz DOT visualizations grouping claims by risk tier |
| Rules engine | YAML-defined rules; built-in PII, bias, toxicity rulesets |
| CI gate | --fail-on high returns exit code 1; SARIF output for GitHub Code Scanning |
| Enterprise API | REST API (about 190 routes) with key management, audit trail, rate limiting, webhooks, batch scanning, caching |
| Provider failover | Automatic chain Gemini → OpenAI → Claude → Perplexity; circuit breaker with 5-min cooldown |
| Monitoring | GET /health/deep, GET /metrics (Prometheus), GET /status (HTML dashboard) |
| Scheduled jobs | POST /jobs — recurring scans on a cron schedule with webhook delivery |
| Integrations | Python client source in sdks/python, MCP server packages/mcp, Terraform provider packages/terraform-provider, GitHub Action nxtg-ai/faultline-action (see SDKs) |
| Multi-tenant | Tenant CRUD, API key association, per-tenant usage aggregation |
| Cost tracking | Per-scan token/cost estimation; GET /costs with provider/tenant/date filters |
| Provider | Requires | Best For |
|---|---|---|
| Gemini | GEMINI_API_KEY | Live web grounding (free key available) |
| Perplexity | PERPLEXITY_API_KEY | Real-time search-native verification |
| OpenAI | OPENAI_API_KEY | Training-data verification, GPT ecosystem |
| Claude | ANTHROPIC_API_KEY | Training-data verification, reasoning-heavy docs |
| Mock | None | CI pipelines, unit tests, offline development. Returns synthetic verdicts and verifies nothing; the CLI never falls back to it silently |
Switch providers with --provider <name>. No code changes required. With no provider key and no FAULTLINE_API_KEY, the CLI says nothing was checked and exits instead of inventing a verdict (since v0.10.1). With FAULTLINE_API_KEY set, guard and the MCP server run the scan on the hosted API with server-side provider keys.
faultline scan --file document.pdf or POST /scan/upload; powered by pdf-parse + tesseract.js--input doc.txt--dir ./docs --glob "*.md"POST /scan/reportjson — programmatic processing, CI pipelinesmarkdown — PRs, reports, documentationhtml — browser-readable audit reportssarif — VS Code Problems panel, GitHub Code Scanning (--sarif shorthand writes results.sarif)POST /keys, GET /keys, GET /keys/:id, PATCH /keys/:id, DELETE /keys/:id; soft-disable/enable; scoped permissions (scan / report / upload / admin / pro)GET /keys/dormant), expiry notifications (7d/1d thresholds), bulk delete/disable/enable, usage analytics (GET /keys/usage), hygiene dashboard (GET /keys/usage/view)GET /audit/log (query + filter), GET /audit/log/stats, GET /audit/log/export (NDJSON); tenant-scoped viewGET /usage (admin keys also see the provider-spend budget)X-RateLimit-* headers402) and a fleet provider-spend cap (503), both dormant until switched on; the spend ledger records every managed scan and /critique call either wayPOST /tenants); all resources scoped by tenant: scan history, notifications, webhooks, audit log; GET /tenants/:id/usageGET /costs (keyId/provider/date filters + aggregate)GET /dashboard: live scan feed, provider health, active keys, scan counts (today/week/month), risk distributionPOST /webhooks; scan.complete / scan.failed / job.complete events; HMAC-SHA256 signing; per-webhook retry config (maxAttempts 1–5, retryDelayMs); rate limiting (FAULTLINE_WEBHOOK_RATE_LIMIT); circuit breaker (FAULTLINE_WEBHOOK_CIRCUIT_THRESHOLD/COOLDOWN_MS); delivery log + dashboardPOST /scan/batch (1–10 texts, concurrent, partial failure semantics); see docs/ci-integration.mdStep 1: Get a free Gemini key (no credit card): aistudio.google.com/apikey
Step 2:
export GEMINI_API_KEY="your-key"
npx @nxtg/faultline scan --input your-ai-output.txt --provider gemini
Expected output:
=== FAULTLINE COMPLIANCE REPORT ===
Provider: Google Gemini
Overall Risk: HIGH
EU Risk Tier: HIGH
--- Claim Verifications ---
[OK] c1: supported — Confirmed by census data. (confidence: 0.82)
[!!] c2: contradicted — Audit found significant bias. (confidence: 0.91)
[??] c3: mixed — Evidence varies by region. (confidence: 0.63)
--- Triggered EU AI Act Articles ---
Annex III §4: Employment and recruitment AI (affects: c2)
--- Recommended Mitigations ---
High-risk domain detected. Ensure a risk management system is in place (Article 9).
Other providers:
export ANTHROPIC_API_KEY="..."
npx @nxtg/faultline scan --input doc.txt --provider claude
export OPENAI_API_KEY="..."
npx @nxtg/faultline scan --input doc.txt --provider openai
export PERPLEXITY_API_KEY="..."
npx @nxtg/faultline scan --input doc.txt --provider perplexity
Scan a PDF or image:
npx @nxtg/faultline scan --file report.pdf --provider gemini
npx @nxtg/faultline scan --file screenshot.png --provider gemini
Check piped agent output:
claude -p "..." | npx @nxtg/faultline guard --fail-on refuted
CI gate (no API key required, synthetic verdicts, wiring test only):
npx @nxtg/faultline scan --input doc.txt --provider mock --fail-on high
# exit 0 = pass, exit 1 = HIGH or CRITICAL findings found
# --provider mock verifies nothing; use a real provider for a real gate
Start the server:
cd packages/api
FAULTLINE_API_KEY=your-key npm run dev
# Server listening on http://localhost:3010
Scan a text payload:
curl -X POST http://localhost:3010/scan \
-H "x-api-key: your-key" \
-H "Content-Type: application/json" \
-d '{"text": "GPT-4 has 1 trillion parameters.", "provider": "mock"}'
Upload a PDF or image for OCR scanning:
curl -X POST http://localhost:3010/scan/upload \
-H "x-api-key: your-key" \
-F "[email protected]"
Generate a compliance report (PDF):
curl -X POST http://localhost:3010/scan/report \
-H "x-api-key: your-key" \
-H "Content-Type: application/json" \
-d '{"text": "AI system processes medical records.", "provider": "mock"}' \
--output compliance-report.pdf
Create an API key:
curl -X POST http://localhost:3010/keys \
-H "x-api-key: your-admin-key" \
-H "Content-Type: application/json" \
-d '{"name": "ci-pipeline", "tier": "pro", "permissions": ["scan", "report"]}'
Register a webhook:
curl -X POST http://localhost:3010/webhooks \
-H "x-api-key: your-admin-key" \
-H "Content-Type: application/json" \
-d '{"url": "https://your-service.example.com/hooks/faultline", "events": ["scan.complete"]}'
View the usage dashboard:
curl http://localhost:3010/dashboard -H "x-api-key: your-key"
Hosted API: https://faultline-api.fly.dev (GET /health needs no key). Interactive docs at GET /docs on a running server.
Check consensus gating (needs an API key; the mock provider spends nothing):
curl -X POST http://localhost:3010/scan/stream \
-H "x-api-key: your-key" -H "Content-Type: application/json" \
-d '{"text": "x", "provider": "mock", "pipelineConfig": {"consensus": true}}'
# below Enterprise: 403 {"error":"consensus_not_in_plan", ...}
Route reference: packages/api/README.md. The spec at packages/api/docs/openapi.yaml declares version 0.7.0 and has 48 paths, so it covers only part of the current routes.
Input: AI-generated text / PDF / image
│
▼ Extract
Atomic claims (fact / opinion / interpretation, importance 1–5)
│
▼ Verify
Per-claim verdict (supported / contradicted / mixed / unverified)
Confidence score (0.0–1.0)
│
▼ Synthesize
Weakest-link detection — which claim collapses the argument?
Claim dependency graph — how do failures propagate?
│
▼ Refine
EU AI Act risk tier, triggered articles, mitigations
Critique of failed claims + improved prompt generation
Monorepo layout:
packages/
├── cli/ # @nxtg/faultline (npm 0.11.1): CLI + scan engine
│ ├── cli/ # Commands: scan, guard, report, watch, critique, graph, weakest, compare…
│ ├── providers/ # Gemini, Claude, OpenAI, Perplexity, Mock adapters
│ ├── compliance/ # EU AI Act risk categories (Articles 5–7, Annex III)
│ ├── rules/ # Rule engine (PII, bias, shell injection…)
│ ├── analysis/ # Weakest-link scoring, claim graph
│ ├── history/ # Scan history store
│ ├── consensus/ # Multi-model consensus engine
│ └── templates/ # Red-team prompt template library
├── api/ # @nxtg/faultline-api (not published to npm): Fastify v5 REST API, deployed on Fly
│ ├── src/routes/ # /scan, /scan/stream, /critique, /keys, /usage, /jobs…
│ ├── src/store/ # KeyStore, AuditLogger, CircuitBreaker, ScanCache, provider-spend ledger…
│ ├── src/plugins/ # Auth, rate limit, usage cap, provider-spend cap, consensus entitlement
│ └── docs/ # openapi.yaml (partial, version 0.7.0)
├── mcp/ # @nxtg/faultline-mcp 0.1.0: MCP server (not on npm as of 2026-10-01)
├── terraform-provider/ # Go Terraform provider
└── web/ # @nxtg/faultline-web: original React/Vite visualization app (Kaggle origin)
sdks/
└── python/ # Python client source (pyproject name faultline-sdk 0.5.0; not confirmed on PyPI, see SDKs)
The production web app at https://faultline.nxtg.ai is a separate repo (faultline-web, Next.js on Vercel). It is not in this monorepo.
Stores (API layer):
| Store | Responsibility |
|---|---|
KeyStore | API key CRUD, permission scoping |
AuditLogger | SHA-256 request hashing, append-only log |
UsageMeter | Per-key daily scan counts |
ScanAnalytics | Aggregated risk distribution, trend data |
RateLimiter | Per-tier per-minute limits |
WebhookStore | Endpoint registration, HMAC secret management |
ScanCache | SHA-256 content-hash cache, configurable TTL, hit-rate stats |
CircuitBreaker | Per-provider failure counting, cooldown management |
JobStore + JobScheduler | Recurring scan job CRUD, cron-based background execution |
TenantStore | Tenant CRUD, API key → tenant association |
CostStore | Per-scan token/cost recording, provider rate table, aggregate queries |
ProviderSpend (store/provider-spend.ts) | Append-only USD ledger and monthly rollup behind the $100/month provider-spend cap |
ScanHistoryStore | Last 1000 scans (newest-first), full-text + filter search, cursor pagination |
ComplianceTemplateStore | HIPAA/SOX/FERPA/Gov templates + custom template registry |
BulkJobStore | Async ZIP scan jobs: progress tracking, per-file results, summary report |
# Scan
faultline scan --input doc.txt --provider gemini
faultline scan --input doc.txt --provider claude --output-format markdown
faultline scan --input doc.txt --sarif # writes results.sarif
faultline scan --input doc.txt --fail-on high # exit 1 if high/critical
faultline scan --file document.pdf # PDF/image via OCR
faultline scan --dir ./docs --glob "*.md" # batch scan directory
# Compare two texts side-by-side
faultline compare --before "old-doc.txt" --after "new-doc.txt" --provider mock
faultline compare --before "old text" --after "new text" --output-format json
# Forensics
faultline weakest --input doc.txt --provider gemini # weakest-link claim
faultline graph --input doc.txt --format mermaid # claim dependency graph
faultline critique --input doc.txt --provider gemini # critique + improved prompt
# Agent output
claude -p "..." | faultline guard --fail-on refuted # verify piped text, gate on the verdict
# Red-team
faultline scan --templates injection,bias # template library
faultline templates list --category injection
# History + trends
faultline history
faultline trend --file doc.txt
# Utilities
faultline stats # npm download stats
faultline stats --costs --api-url http://localhost:3010 --api-key <key>
faultline rules # list detection rules
faultline init # generate .faultlinerc.json
faultline --version
faultline --help
There is no TypeScript SDK package in this repo and @nxtg/faultline-sdk is not on npm (npm view returned 404 on 2026-10-01). Call the REST API directly, or use the CLI (@nxtg/faultline).
const res = await fetch('https://faultline-api.fly.dev/scan', {
method: 'POST',
headers: { 'x-api-key': process.env.FAULTLINE_API_KEY!, 'Content-Type': 'application/json' },
body: JSON.stringify({ text: 'GPT-4 has 1 trillion parameters.', provider: 'gemini' }),
});
const result = await res.json();
console.log(result.overallRisk); // 'low' | 'medium' | 'high' | 'critical'
Source is in sdks/python (pyproject name faultline-sdk, version 0.5.0, zero runtime dependencies). Install from a checkout:
pip install ./sdks/python
Do not run pip install faultline-sdk. On 2026-10-01 that name on PyPI (version 0.24.0) is an unrelated project (ML training checkpoints for "Faultline Cloud"). Whether this package was ever published to PyPI under a different name was not verified.
from faultline_sdk import FaultlineClient
client = FaultlineClient(api_key="your-key", base_url="http://localhost:3010")
result = client.scan("GPT-4 has 1 trillion parameters.")
print(result.overall_risk) # 'low' | 'medium' | 'high' | 'critical'
packages/mcp (@nxtg/faultline-mcp 0.1.0) exposes a verify_claims tool to Claude Code, Cursor and other MCP clients. It was not published to npm as of 2026-10-01 (npm view returned 404), so run it from a checkout. See packages/mcp/README.md.
The action lives in its own repo, nxtg-ai/faultline-action (tag v1 exists).
- uses: nxtg-ai/faultline-action@v1
with:
input: docs/release-notes.md
fail-on: high
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
See docs/ci-integration.md for:
Quick GitHub Actions example:
- name: Faultline Claim Audit
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: |
npx @nxtg/faultline scan \
--input docs/release-notes.md \
--provider gemini \
--fail-on high \
--output-format sarif > results.sarif
Promptfoo tests your prompts. DeepEval scores your RAG pipeline. Faultline audits what the AI actually said.
| Faultline | Promptfoo | DeepEval | |
|---|---|---|---|
| Decomposes AI output into atomic claims | Yes | No | No |
| Verifies claims against live evidence | Yes | No | No |
| Confidence calibration per claim | Yes | No | No |
| Weakest-link detection | Yes | No | No |
| EU AI Act risk classification | Yes | No | No |
| Claim dependency graph | Yes | No | No |
| Scan comparison (diff two outputs) | Yes | No | No |
| FM-agnostic (Gemini / Claude / OpenAI / Perplexity) | Yes | Yes | No (Python) |
| Provider auto-failover + circuit breaker | Yes | No | No |
| Enterprise API with audit trail + caching | Yes | No | No |
| Python client + MCP server | Yes | No | No |
Faultline maps each verified claim to the applicable risk tier under the EU AI Act (when high-risk AI system requirements take effect) and other AI governance frameworks:
Each scan produces a compliance report listing triggered articles and recommended mitigations.
POST /scan/risk-register)EU AI Act Article 9 requires operators of high-risk AI systems to maintain a documented risk management system across the AI lifecycle. Faultline's risk register endpoint aggregates all scan history into a structured report — indexed by lifecycle phase (development, testing, deployment, monitoring) — with a riskDistribution breakdown, highRiskCount, criticalRiskCount, and per-scan findings. Each finding carries the triggered article reference and lifecycle phase so auditors can trace risk back to the point of introduction.
GET /audit/log/manifest)EU AI Act Article 12 requires that audit logs for high-risk AI systems be tamper-evident and verifiable by competent authorities. Faultline implements a SHA-256 chain manifest: each log entry is hashed individually (entryHash), then chained to the previous entry's hash (chainHash = SHA-256(entryHash + prevChainHash)). The final rootHash covers the entire log. Any modification to any entry — or any insertion/deletion — breaks the chain. Third-party auditors can verify integrity without Faultline tooling using only openssl dgst -sha256.
POST /scans/:id/approve)EU AI Act Article 14 requires meaningful human oversight of high-risk AI system outputs before deployment. Faultline's approval endpoints let a named reviewer formally approve or reject any scan result — recording the reviewer identity (API key), decision (approved / rejected), optional note, and UTC timestamp. All approvals are queryable via GET /scans/:id/approvals and are immutable once recorded, providing a durable audit trail of human sign-off prior to production use.
Measured 2026-10-01 with npx vitest run in each package (all passing):
| Package | Test files | Tests |
|---|---|---|
packages/api | 137 | 2,450 |
packages/cli | 83 | 2,371 |
packages/mcp | 3 | 49 |
packages/web | 1 | 39 |
Root npm test (all of the above) | 224 | 4,909 |
sdks/python (pytest) | n/a | 100 |
Mutation scores are listed in the feature table above and were not re-measured on 2026-10-01.
Built by NextGen AI
| Scan history |
GET /scans/search — full-text across your API key's past scans (admin key: all), cursor pagination |
| Industry compliance | HIPAA / SOX / FERPA / Gov templates; POST /scan/compliance/:template |
| Bulk import | POST /scan/bulk — ZIP of documents, async job, GET /jobs/:id/progress |
| Swagger UI | GET /docs — interactive OpenAPI 3.0 spec with Try-it for every endpoint |
| Claim explainability | GET /claims/:id/explain — reasoning chain, evidence found, actionable suggestions |
| Scan diff | POST /scan/diff — scan two texts, inline diff (added/removed/changed/unchanged) |
| Regulatory calendar | GET /compliance/deadlines — EU AI Act, GDPR, NIST deadlines with days-until |
| Compliance scan-check | POST /compliance/scan-check — match claim text against approaching deadlines |
| i18n | Accept-Language: es/fr/en — localized error messages and report labels (EN/ES/FR) |
| Property-based tests | fast-check oracle coverage: confidence bounds, dedup invariants, cost aggregation, sort stability |
| GDPR compliance | Article 15 export (GET /tenants/:id/export → ZIP) + Article 17 erasure (DELETE /tenants/:id/data) covering scan history, audit log, notifications, webhooks, costs, schedules |
| Multi-model consensus | POST /scan/stream with pipelineConfig.consensus: true. Enterprise only, enforced server-side (403 below Enterprise) |
| Claim critique | POST /critique: critique plus improved prompt for failed claims; API key, rate limit and provider-spend cap apply |
| Real-time scan streaming | GET /scan/stream?text=...&provider=mock — Server-Sent Events; progressive per-claim delivery via onClaimVerified callback; streams start → claim_verified × N → complete; no polling required |
| Mutation-tested core | Stryker gate (CRUCIBLE Gate 6, threshold 80%): cli/scan.ts 81.97%, stream.ts 88.64%, compliance-report.ts 80.81%, GDPR stores 80.94% to 96.81%. Last measured 2026-03-21 to 2026-04-17 per docs/mutation-testing.md; not re-run since |
POST /scan/compareFAULTLINE_CACHE_TTL_MS); X-Cache: HIT/MISS header; GET /cache/stats, DELETE /cachePOST /jobs: recurring scans on a */N * * * * cron schedule; results dispatched to webhookUrl503 when all providers downGET /scans/search?q= full-text; stale scan detection (GET /scans/stale); usage analytics (GET /scans/usage); bulk pruning (DELETE /scans/stale); hygiene dashboard; faultline scans CLIPOST /scan/compliance/:template; custom template uploadPOST /scan/bulk (ZIP of documents → async job); GET /jobs/:id/progress (percentage + per-file status + summary)GET /health/deep (subsystem status + provider config flags), GET /metrics (Prometheus text), GET /status (HTML)GET /docs (interactive OpenAPI 3.0), GET /docs/json, GET /docs/yamlGET /claims?text=&verdict=&from=&to=&source= full-text claim index searchGET /tenants/:id/export (Article 15, admin-gated): ZIP archive with manifest, scan-history, audit-log (NDJSON), notifications, webhooks, usage, costs, schedules; DELETE /tenants/:id/data (Article 17, admin-gated): erases all PII across 8 data categories for a tenant; idempotent; tenant record preservedAccept-Language: es or Accept-Language: fr for localized error messages; defaults to English