dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Runtime security gateway between A2A agents: scans peer replies for prompt injection, catches relayed payloads, pins agent cards, caps delegation depth and cycles. Part of the bastion suite.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A runtime security gateway between A2A agents. One process fronts every peer agent in a
deployment, so it sees each agent-to-agent hop and can act on it:README 전문 보기 ↗A runtime security gateway between A2A agents. One process fronts every peer agent in a deployment, so it sees each agent-to-agent hop and can act on it:
OWASP Agentic Top 10: ASI07 insecure inter-agent communication, ASI08 cascading failures, ASI10 rogue agents. Part of the bastion suite; the A2A sibling of bastiongate (MCP).
pip install bastionmesh
bastionmesh demo # offline replay: a peer injects, the host relays it, the mesh flags both
export MESH_KEY_ORCHESTRATOR=$(python -c "import secrets; print(secrets.token_urlsafe(24))")
bastionmesh check --policy mesh.yaml --lock # scan every peer card, pin the `card: lock` ones
bastionmesh run --policy mesh.yaml --log mesh.jsonl
Point each agent at the mesh instead of the peer:
| Before | After |
|---|---|
https://researcher.example/.well-known/agent-card.json | http://127.0.0.1:9100/peers/researcher/.well-known/agent-card.json |
https://researcher.example/a2a | http://127.0.0.1:9100/peers/researcher/ + header X-Bastionmesh-Key |
A2A clients that discover peers by card need no other change: the rewritten card already points at the mesh. A full policy is in examples/mesh.example.yaml.
request caller key -> caller may call peer -> method allowed -> card ok (pin/lock, findings)
-> rate + in-flight caps -> delegation depth + cycle -> push webhook allowed
-> hidden unicode + known payloads -> relay of flagged text -> credentials (redact)
response every text part (message, task status, artifacts, history, stream events)
-> full injection signatures; streamed chunks are scanned with the previous 256 chars
Scanning is split by direction on purpose. A delegation is an instruction ("always include sources"), so requests only get hidden-unicode and known-payload checks. A reply should be data, so replies get the full signature set, the same one bastiongate runs on MCP tool results.
A block is a JSON-RPC error with code -32000 (A2A owns -32001..-32099) and a reason in
error.data.bastionmesh: caller-denied, method-denied, card-drift, card-unverified,
card-findings, rate-limited, depth-exceeded, push-webhook-denied, injection, relay,
secret, oversize (more message text than limits.max_message_chars, default 1M: refused,
never truncated), malformed (a key spelled so a lenient decoder would read what the mesh cannot, or nesting too deep to scan: always refused). In a stream, the blocked event is replaced by the error and the stream is closed.
Rules you write (caller and method allow lists, webhooks, caps, cycles, card drift) always
enforce. Heuristic detectors (on_injection, on_relay, on_card_findings) ship in warn:
the message is forwarded, a WARN line goes to stderr and a warned event to the log. Run in
warn, read the log, then switch to block.
While a request into peer P is in flight (a blocking send or an open stream), P's own outbound
requests continue that chain, so the mesh knows orchestrator -> researcher -> mailer is depth 2
without any header or agent change. This needs callers and peers to share names
(callers.researcher is the same agent as peers.researcher).
--log mesh.jsonl records ids, peers, callers, reasons and counts, never message content.
--trace-content trace.jsonl additionally writes a bastiontrace v3 trace (every delegation
and reply as an agent_message, with provenance edges), so
bastiontrace analyze trace.jsonl reconstructs a cascade after the fact. It contains message
content: treat it as sensitive. Metrics: GET /__bastionmesh/metrics (same key as calls).
agentgateway (Linux Foundation) already routes A2A and MCP traffic with authentication, authorization and rate limits. bastionmesh overlaps on routing and caller keys, but its job is content: injection in replies, relays between agents, card pinning with bastionsupply's checks, and bastiontrace-ready logs. They compose. Keep agentgateway at the edge and run the mesh behind it on loopback in open mode:
# mesh.yaml behind agentgateway: agentgateway authenticates, the mesh inspects
listen: 127.0.0.1:9100
peers:
researcher: {url: https://researcher.example/a2a}
# no callers: open mode, allowed only on loopback; agentgateway's A2A route targets
# http://127.0.0.1:9100/peers/researcher/
In open mode the mesh identifies callers by IP, so per-caller caps apply to the gateway as a whole and delegation depth cannot be attributed. Use caller keys when that matters.
actions.decode_transforms: true (off by default, replies up to 64 KB), never in requests.
Made-up ciphers are never decodable.raw, file bytes) are counted in the log, not scanned.card: lock peer that was never verified since start is refused.python -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytest -q # includes interop tests against the official a2a-sdk server and client
MIT licensed.