dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
5개의 AI 에이전트 호출을 OPA 정책으로 WebAssembly 컴파일 후 브라우저에서 실행, 허용·승인대기·차단 구분
Five AI agent tool calls, each followed through a real OPA policy compiled to WebAssembly and running in your browser: allowed, held for approval, or blocked.
보안TypeScript · Open Policy AgentGitHub @avatar25온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Authorizing AI agents with OPA: the real Rego policy, compiled to Wasm, running in the browser.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An interactive explainer. Pick one of five scenarios, each an AI agent trying to call a tool on someone's behalf, and follow the request through a flow graph:
Every verdict on the page comes from the real Rego policy in policy/authz.rego, compiled to WebAssembly and evaluated in your browser with @open-policy-agent/opa-wasm. Nothing is hard-coded in TypeScript and nothing is sent to a server. Click the OPA node to see the policy block by block, with the value each line resolved to.
The policy has four layers and three outcomes:README 전문 보기 ↗Live: agents.shiben.dev
An interactive explainer. Pick one of five scenarios, each an AI agent trying to call a tool on someone's behalf, and follow the request through a flow graph:
Person → (Untrusted input) → Agent → Tool call → Gateway ⇅ OPA → Tool runs | Human approval | Blocked + logged
Every verdict on the page comes from the real Rego policy in policy/authz.rego, compiled to WebAssembly and evaluated in your browser with @open-policy-agent/opa-wasm. Nothing is hard-coded in TypeScript and nothing is sent to a server. Click the OPA node to see the policy block by block, with the value each line resolved to.
| Path | What it is |
|---|---|
policy/authz.rego | The policy. Single source of truth for the UI, the tests and the expected verdicts. |
policy/data.json | Agents, users, tools, limits, org domain. Loaded into the Wasm at runtime with setData. |
policy/authz_test.rego | opa test suite: scenario-driven tests plus edge cases. |
scenarios/scenarios.json | The 5 scenarios: display metadata, OPA input, expected verdict. Read by both opa test and the UI. |
scripts/build-policy.sh | fmt → check --strict → test → build -t wasm, then writes public/policy.wasm and public/test-summary.json. |
public/policy.wasm | Generated and committed. CI fails if it is stale. |
lib/opa.ts | Fetches /policy.wasm once, loads data.json, evaluate(input) → PolicyResult. No fallback logic. |
lib/trace.ts | Formats result.evidence and result.checks against the Rego source lines. No authorization logic. |
components/ | Scenario picker, flow graph, detail views, OPA Evaluate and Build tabs. |
The policy has four layers and three outcomes:
decision is allow, needs_approval or deny, and defaults to deny. The Wasm entrypoint is agent/authz/result, which also returns checks, failed and evidence so the UI never has to recompute a decision.
Requires Node 22+ and pnpm 10.
pnpm install
pnpm dev
pnpm test # Vitest: all scenarios through public/policy.wasm, trace ↔ Rego source sync
pnpm typecheck
pnpm build
Change policy/authz.rego, policy/data.json or scenarios/scenarios.json.
Rebuild and test with the pinned OPA version (the script refuses any other version, because a different compiler can emit a different Wasm):
pnpm policy # uses `opa` on your PATH
OPA=/path/to/opa pnpm policy # or point at a specific binary
Commit public/policy.wasm and public/test-summary.json along with your change.
No TypeScript change is needed for a data or policy change to show up in the UI. For example, lower limits.payment_inr below 40000 and the "Web page sets the amount" scenario flips from NEEDS APPROVAL to DENY. If a new display needs a value the policy doesn't return, add it to evidence in Rego rather than computing it in lib/trace.ts.
| Tool | Version | Notes |
|---|---|---|
| OPA CLI | 1.21.1 | Pinned in scripts/build-policy.sh and .github/workflows/policy.yml. Wasm ABI 1.3. |
@open-policy-agent/opa-wasm | 1.10.0 | Latest release. Confirmed to load and evaluate Wasm built by OPA 1.21.1 (see tests/opa.test.ts). |
| Next.js | 16.4.0 | App Router, static output. |
pnpm audit reports one moderate advisory in sprintf-js, pulled in by opa-wasm for the sprintf builtin. That builtin isn't reachable from the compiled entrypoint here, and there is no patched release yet.
.github/workflows/policy.yml has two jobs:
scripts/build-policy.sh, then git diff --exit-code public/. The deployed Wasm is always the tested one.pnpm typecheck, pnpm test, pnpm build.Vercel project agents-opa, connected to this repo, building with the Next.js preset. Vercel has no OPA binary, which is why the Wasm is committed. Domain: agents.shiben.dev (Vercel DNS). No analytics, no cookies.
All names and domains in the data are fictional; .example is reserved for exactly this.