Skip to main content
Glama

AIRLOCK

에어락을 통과하지 않으면 프로덕션에 도달하는 것은 없다.

되돌릴 수 없는 프로덕션 작업을 위한 변경 관리 콘솔입니다. 스키마 마이그레이션, 대량 데이터 수정, 삭제 권리 요청(잊힐 권리), 환불, 프로덕션 접근 권한 부여, 사만 통의 이메일까지 — 모든 위험한 변경은 영어로 요청되고, 실제 시스템의 섀도 복사본에서 먼저 실행되며, 샌드박스에서 입증된 뒤에만 증거와 함께 사람의 승인을 받습니다.

TrueForge를 기반으로 2026년 8월 24일부터 30일까지 열린 Agent Harness Hackathon을 위해 만들었습니다.


한 가지 규칙으로 표현한 아이디어

TrueFoundry가 해커톤 페이지에서 마지막으로 남긴 말은 "root를 위임할 만한 에이전트를 만들어라." 입니다. AIRLOCK은 그 말에 대한 문자 그대로의 답입니다. 즉, 자신이 root를 신뢰받지 않는다는 방식으로 행동하고, 요청하기 전에 매번 그 사실을 입증하는 에이전트입니다.

다른 모든 승인 게이트는 "에이전트가 X를 하겠다고 한다 — 예를 클릭하세요." 입니다. 이것은 인간이 계획을 신뢰하라고 요구합니다. AIRLOCK의 게이트는 에이전트가 증명서를 만들어낼 때까지 제시될 수 없으며, 증명서에는 두 가지 종류가 있습니다.

되돌리기(Undo) 증명서 — 되돌릴 수 있는 변경을 위한 것입니다. 에이전트는 변경을 섀도 브랜치에 적용하고, 자신의 롤백을 적용한 다음, 테이블을 세 번째로 체크섬해서 데이터가 시작점과 바이트 단위로 동일하게 되돌아왔음을 입증합니다. 에이전트는 이미 그 변경을 했고, 되돌렸으며, 일치하는 체크섬이 여기 있다는 뜻입니다. 이제야 요청할 수 있습니다.

범위(Scope) 증명서 — 진정으로 되돌릴 수 없는 변경을 위한 것입니다. 삭제가 되돌릴 수 있다는 것을 증명할 수 없으므로, 에이전트는 그 반대를 증명합니다: 모든 시스템에 걸쳐 정확히 무엇이 파괴될 것인지, 그 외에는 아무것도 없다는 것. 그리고 여기에 의도적으로 건드리지 않을 것을 명시한 제외 목록과 그 이유가 따릅니다. 되돌릴 수 있다고 약속할 수는 없습니다. 그러나 "이것"이 정확히 무엇인지는 아는 것이라고 약속할 수 있습니다.

certificate.status !== "PROVEN"  →  the approval gate is never offered.

회색 처리되지 않는다. 경고로 표시되지도 않는다. 결코 렌더링되지 않는다.

그 규칙는 타입이다, if가 아니다

Approve 컨트롤은 ApprovalGrant만 받는다. ApprovalGrant는 모듈 비공개 심볼을 담고 있고, 그 심볼은 openGate()만 이 만들 수 있습니다. 따라서 입증되지 않은 변경에 대한 승인을 렌더링하는 데 전달할 수 있는 값은 존재하지 않습니다. 실수로든, 게이트 자체를 수정하지 않고는 고의로도 없습니다.

// packages/contract/src/gate.ts
const GATE_WITNESS: unique symbol = Symbol('airlock.gate.witness');

export interface ApprovalGrant {
  readonly [GATE_WITNESS]: true;   // unforgeable outside this module
  readonly irreversible: boolean;
  readonly seals_required: number;
  readonly final: boolean;
  // …
}

이를 위조하려는 여섯 번의 시도가 gate.typetest.ts에 컴파일 오류로 단언되어 있습니다. 누군가 그 타입을 약화시키면, 예상된 오류가 사라지고 tsc가 사용되지 않은 @ts-expect-error를 보고하며 빌드가 실패합니다.

같은 규칙은 서버 측에서도 다시 실행됩니다. 브라우저 없이 HTTP API를 통해 승인하는 것도 동등하게 거부됩니다:

$ curl -XPOST localhost:3000/api/dossiers/dos_currency_fix/decision -d '{"decision":"approved"}'
{"error":"CERTIFICATE_FAILED","message":"Verification ran and failed. This change cannot be approved from this dossier."}
403

$ # …and a dossier that lies, claiming match:true with checksums that differ:
{"error":"CHECKSUM_MISMATCH","message":"The data did not return to its starting state after rollback."}
403

AIRLOCK은 검증기가 제공하는 match 플래그를 신뢰하지 않습니다. pre === post_rollback을 직접 재계산하므로 엔진 버그나 위조된 페이로드로 문을 열 수 없습니다.

아무것도 설치하지 않고 직접 사용해 보세요. 랜딩 페이지에는 실제하는 게이트가 있습니다. 일군의 컨트롤에서 실제 Change Dossier를 만들어 실제 openGate()에 전달합니다. 모든 조합이 진짜 평가입니다. 열리지 말아야 할 문을 여는 조합을 찾을 수 있는지 시도해 보세요.


Related MCP server: mcp-nixreview

실행하기

git clone https://github.com/Rohit-ATS/Airlock && cd Airlock
npm install
npm run build --workspace @airlock/contract
npm run dev --workspace @airlock/console

라우트

설명

/

현관 — 이 아이디어 그 자체와 두 개의 라이브 데모

/console

운영자 콘솔: DOING / WAITING / DID

/control

컨트롤 룸: 상태, 거부 기록, 원장 무결성

콘솔은 최초 실행 시 contracts/examples/으로 시드됩니다. 그래서 데이터베이스, API 키, 가입 없이 열한 건의 실제 변경이 들어 있는 라이브 승인 대기열을 그대로 만납니다. 즉, 승인 받을 두 건, 여섯 가지 서로 다른 이유로 봉인된 여섯 건, 해시 체인으로 봉인된 결정 완료 기록 세 건입니다.

그 열한 건은 콘솔 픽스처입니다. 증명서 카드, 대기열, 정책 엔진, 원장을 실제로 작동시킵니다. 어떤 데이터베이스의 증거가 아니며, 결정되지 않은 건은 시드 시 현재 시간으로 재배치된다. 증명서에는 신선도 유효기간이 있고, 영원히 만료된 데모는 아무것도 증명하지 못하기 때문입니다. AIRLOCK_NO_SEED=1로 시작하면 빈 상태로 시작합니다.

픽스처가 아니라 에이전트 자체를 돌려보려면 TrueForge 서버를 가리키면 됩니다:

npx @truefoundry/trueforge@latest              # http://localhost:8790
NEXT_PUBLIC_TRUEFORGE_BASE_URL=http://localhost:8790 npm run dev --workspace @airlock/console

Windows에서는 Docker를 사용하세요. TrueForge 0.1.4는 Windows에서 네이티브로 시작되지 않습니다(Only URLs with a scheme in: file, data, and node are supported… Received protocol 'c:'), 이는 로컬 샌드박스 대체가 macOS/Linux 전용이기 때문입니다. docs/TRUEFORGE-NOTES.md를 참조하세요.


심사관이 보게 될 것

에이전트는 딱 하나의 출입구만 가진다

AIRLOCK은 MCP 서버 (packages/mcp)로 배포됩니다. 그것을 마운트하는 것이 최소 권한을 바람이 아니라 구조 속에 만들어 두는 것입니다:

{ "name": "airlock",
  "command": "npx", "args": ["-y", "@airlock/mcp"],
  "enable_tools": ["@all"],
  "require_approval_for_tools": ["airlock_request_approval"] }

에이전트는 정책을 읽고, 변경을 개설하고, 증명을 첨부하고, 사람에게 요청할 수 있습니다. 그것이 에이전트가 가진 동사 전부입니다. 프로덕션에 변경을 적용하는 도구는 없습니다. 변경을 진행시키는 유일한 도구는 사람이 답변하기 전까지 하니스가 쥐고 있습니다.

프로덕션 커넥터는 함께 @read-only로 마운트되며, TrueForge 서브에이전트는 루트 에이전트의 MCP 스코프를 상속받으므로 이 보증은 모든 서브에이전트에 자동으로 적용됩니다: 실행 전 어느 주체도 인간 간섭 없이 프로덕션에 도달할 수 없습니다. 이것은 CI에서 scripts/check-agents.mjs로 assert되므로 사라질 수 없습니다.

일곱 가지 변경 클래스

입장 허가의 어떤 질문은 *"데이터베이스 쓰기인가"*가 아닙니다. *"이것이 잘못되면 되돌릴 수 있니?"*입니다. 사만 통의 이메일 전송은 컬럼 삭제만큼 되돌릴 수 없으며, 그에 대해 사과하기가 훨씬 어렵니다.

클래스

증명서

승인자

상한(ceiling)

스키마 마이그레이션

UNDO

1

데이터 작업

UNDO

1

5,000,000 레코드

데이터 삭제

SCOPE

2

1,000명

접근 권한 부여

SCOPE

2

모든 권한은 만료 시각이 있어야 함

자금 이동

SCOPE

2

£25,000

대량 발송

SCOPE

2

50,000명, 조용한 시간 강제

인프라 변경

either

2

금요일에서 월요일 변경 금지

정책: 두 번째 질문

증명서는 *"이 변경이 정말로 그것이라고 주장하는 것인가?"*에 답합니다. 정책은 다른 질문에 답합니다: "이 변경이 정말로 허용되는가, 누구에게, 지금?". 증명서는 그 질문에 답할 수 없습니다. 그것은 변경의 속성이 아니라 조직의 속성이기 때문입니다.

둘 다 동일한 openGate으로 평가됩니다. 그 덕에 진실로 올수 있고, 진실로 허용되지 않은 변경은 두 번째 이유로 봉인되고, 위와 같다고 정확히 안내됩니다. 자세한 내용은 docs/POLICY.md에 있습니다. 정책에서 생성된 문서이기 때문에 둘 사이가 어긋나지 않습니다.

꼭 언급할 만한 네 가지 규칙:

  • 증거는 부패하기 쉬운 것입니다. 신선도 기간이 지나면 그 증서는 더 이상 존재하지 않는 대한 증거입니다. 접근 권한은 10분, 마이그레이션은 30분.

  • 프로덕션 드리프트. 게이트를 열기 전에 AIRLOCK은 증명이 가져온 상태와 프로덕션을 다시 체크섬 비교합니다. 그 사이 다른 누군가의 마이그레이션이 등록되었다면 변경은 봉인됩니다 — 어차피 드리프트 체커가 죄다 정상이라고 보고했더라도. 위험 보고는 의심받지 않고, 안전 보고는 재계산된다.

  • 정족수는 클릭 수가 아니라 사람을 셉니다. 서명은 정체성으로 저장되므로, 같은 승인자가 두 번 서명하면 승인자 1명입니다. 그리고 변경을 요청한 본인은 그 중 한 명이될 수 없습니다.

  • 상시 프로덕션 접근권이 없다. 모든 grant에는 만료 시각이 있어야 하므로 이 시스템의 기본 상태는 어떤 권한도 가진 사람이 없다는 것입니다.

원장은 지소감지가 가능하다

감사 로그를 수정할 수 있는 변경 통제 시스템은 그냥 변경 통제 쇼입니다. 결정된 모든 변경은 저 앞 변경의 해시로 봉인되므로, 어느 역추적 기록 하나를 편집하면 그 이후의 모든 링크가 깨집니다:

$ npm run verify:ledger
  ok  #000  dos_orders_index         a41f9c02be7d8e5f31c4…
  FAIL #001  dos_gdpr_batch          9e02cc71a4bb0d3f2871…
         fault      : content-modified
FAIL — the chain breaks at record 1. Every record after that point is no longer trustworthy.

이것은 원장이 위조불가능하게 만들지는 않습니다. 파일을 다시 쓸 수 있는 누구라도 전체 체인을 재계산할 수 있습니다. 이 방식으로 만드는 것은 어떤 사람이 변경되었음을 보일 수 있게 한다는 것입니다. 즉, 오래된 하나 해시의 사본을 가진 사람이 보았을 때 위반이 드러날 수 있습니다. 이게 중요한 속성입니다. 왜냐하면 당신을 감사하는 사람은 그 변경을 한 사람이 아니기 때문입니다.

개별 접수증은 콘솔에 권한이 있어야 분리되어 독립적으로 증명됩니다: GET /api/dossiers/{id}/receiptnode scripts/키 확인-ledger.mjs receipt.json.

래딩 페이지는 이 과정을 브라우저에서 실행합니다. 기록을 하나 바꿔보고 체인이 무너지는지 확인하세요.

3-구역 콘솔

사빌 · 로의 심사 기준은, 하고 있는 일, 기다리고 있는 일, 한 일, 그리고 되돌릴 수 없는 단계에서 사용자에게 묻는 인터페이스를 요구합니다. 그래서 정확히 그 이름으로 세 개의 구역 입니다.

  • DOING — 실시간 실행: 병렬로 돌아가는 하위 에이전트 레인, 각 레인의 스케일러블한 모델 및 실행 비용, 샌드박스 로그가 그 밑에 흐르고, 실제로 해석되는 전체 도구 호출.

  • WAITING — 승인 대기열: 사람을 기다리는 모든 변경, 무엇에 막혀 있는지, 몇 개의 서명이 남았는지, 그리고 얼마나 오래 기다렸는지.

  • DID — 불변 변경 원장: 요청자, 승인자, use한 증명서, 체크섬 결과, 그리고 사이 상태를 보관한 영수증.

컨트롤 룸

/control이 다른 관객을 위한 것입니다. "이걸 승인할까"가 아니라, "이 시스템이 뭘 들고 있는가, 무엇을 거부해왔는가, 그리고 기록했던 일을 여전히 믿을 수 있는가"입니다.

최대 관심의 되는 숫자는 승인된 것이 아니라 거부된 것입니다. 아무것도 없는 대기열은 안전을 증명하지 않습니다. 거부된 변경의 수와 이유가 증거입니다. 이 페이지는 원장을 "다 좋다"고 말하는 서버를 신뢰하지 않고 브라우저에서 직접 재검증합니다.

하네스 패널

12가지 TrueForge alla 하네스 패널은 존재하는 22개의 TrueForge 기능을 나열하는 고정된 사이드 레일입니다. 각 기능은 실제 하네스 이벤트가 입증될 때까지 어두운 상태이며, 이Event 발생하면 타임스탬프와 함께 켜지고 그 실증 스텝으로 가는 링크가 제공됩니다.

램프는 애플리케이션 코드로 켤 수 없습니다. 유일하게 쓸 수 있는 위치는 detectors.ts뿐이며, 이 파일은 observedServer.ts에서 TrueForge 실제 이벤트 스트림을 감싼 관측자로부터 흔적을 통과시키는 방식으로 전달됩니다. 기록을 관측하고 그대로 전달하되, 유사로 만들거나 순서를 바꾸거나 간격 없이 전달하지 않습니다. 해당 능력을 실력 실행하지 않으면 실행이 22개보다 낮게 끝나는 이것은 올바른 결과입니다.

켜지지 않은 행은 일부러 남아있습니다. happened 것을 숨기면 카운터가 무시하고 못보다 가치가 없어집니다. 남가 있으므로 켜진 라인을 진실로 볼 수 있습니다. 랜딩 페이지에는 아직 어떤 실행도 없어서 색상이 모두 어두워 있습니다.

자세한 내용은 docs/CAPABILITIES.md를 참조하세요 — 여기서 보여준 내용과 패널이 증명할 수 있는 내용이 어긋나지 않도록 레지스트리에서 생성됩니다.

증명서 카드

승인 배너, 척도, 발생한 정책 및 그 반대 사유, 서명, 전진 및 롤백 작업을 나란히 표시, 참조 행 수에 기반한 테이블 목록, 잠금 프로필 및 테이블 재작성 경고, 체크섬 트리오, 드리프트 검사, 코드 베이스 전체에 발걸친 손상 범위, 제외 사항 목록, 모델별 실행 비용, 접수증, 그리고 최종 결정.

체크섬 트리는 시각화된 바로 그 증거입니다: 행 1과 3은 실행하고, 행 2는 의도적으로 강조를 낮추는데 실패해야 하는 것은 당연이라기보다는 — 해시가 전혀 같지 않을 때에는 어떤 문자의 해시가 갈라지는지를 강조하고, 단순히 빨간 X를 출력하지 않습니다.

Break-glass

정책 게이트를 적용하며 기본값은 꺼져 있고, 게이트를 열지 않습니다. BreakGlassOverrideApprovalGrant와 다른 private symbol을 지니고, 둘 다 받아들이는 함수는 없습니다. 이 기능이 하는 일은 이름이 있는 한 사람이 밀봉된 문을 우회했다는 사실을, 최소 40자의 작성된 사유와 함께, 다른 모든 것과 동일한 해시 체인에 영구적으로 기록하는 것입니다.

이 기능이 존재해야 하는 이유는, 사람들은 어차피 그렇게 하기 때문입니다. 모든 조직에는 안전한 경로는 사용할 수 없고 누군가가 대신 psql 세션을 여는 순간이 있습니다. 반대로 생각하는 컨트롤 플레인은 오버라이드를 막지 못하며, 그 기록이 없을 뿐입니다. 활성화하려면 두 개의 스위치가 필요하며, ERASURE, MONEY_MOVEMENT, COMMS_BLAST는 이것을 전면 금지합니다.


아키텍처

contracts/dossier.schema.json     the Change Dossier — the one contract everything shares
packages/contract/                types, the gate, policy, receipts, capabilities, detectors
  src/gate.ts                     the invariant, as an unforgeable type
  src/policy.ts                   quorum, ceilings, freshness, freezes, no standing access
  src/receipt.ts                  the tamper-evident hash chain, isomorphic
  src/detectors.ts                the ONLY thing that can light a lamp
  src/capabilities.ts             the 22, each with its load-bearing use and its evidence
packages/mcp/                     AIRLOCK as an MCP server — the agent's one doorway
apps/console/                     Next.js 15, React 19, Tailwind v4
  app/page.tsx                    the landing page
  app/console/                    the three-zone operator console
  app/control/                    the control room
  src/server/observedServer.ts    the passthrough tap on the real TrueForge stream
agents/                           four agent specs: least privilege, model routing
skills/                           seven skill packs, one per domain the agent must not improvise

콘솔은 SDK입니다. TrueForgeUI는 자체 provider 스택 안에서 렌더링되는 커스텀 레이아웃 컴포넌트를 받아들이므로, AIRLOCK은 layout={AirlockConsole}으로 전달됩니다. 트랜스크립트, 컴포저, 스레드 목록, 도구 승인 카드, ask-user 카드, MCP OAuth 화면이 모두 @truefoundry/trueforge-ui의 자체 컴포넌트에 테마만 다시 적용된 것입니다. 곁에 따로 만들어 놓은 비슷한 작품이 '아니' 아닙니다.


솔직한 메모

원래 계획에 있던 세 가지는 실제로는 존재하지 않는 API에 기대고 있었고, 조작하지 않고 다르게 구현했습니다. 자세한 내용은 docs/TRUEFORGE-NOTES.md §4에 있습니다.

  1. 서브에이전트는 선언되지 않고 동적으로 만들어집니다. TrueForge는 런타임에 create_sub_agent로 서브에이전트를 만들며, 스펙에 서브에이전트별 블록은 없습니다. 따라서 "네 개의 지명된 서브에이전트가 각자 자신의 도구 정부를 가진 방식"은 구현할 수 없습니다.

  2. 서브에이전트별 도구 범위 지정은 존재하지 않습니다. 문서에는 명시되어 있습니다: "서브에이전트는 루트 에이전트와 동일한 MCP 도구 및 샌드박스 환경에 접근할 수 있습니다." AIRLOCK은 대신 에이전트 경계에서 최소 권한을 강제합니다. 즉 프로덕션 커넥터는 @read-only로 마운트되고, 단일 전달 경로는 하네스가 보유한 우리 자체 MCP 서버의 도구입니다. 서브에이전트가 그 범위를 상속하므로, 실행 내의 어떤 주체도 인간 없이는 프로덕션에 닿을 수 없습니다. 이것은 작은 도구콜백보다 더 강한 주장이며, 실제입니다.

  3. 서브에이전트별 모델 라우팅도 존재하지 않습니다. 라우팅은 에이전트 경계에서 실제로 있습니다 — airlock-scout, airlock-privacy, airlock-treasury 참고 — 그리고 각 레인에 표시된 모델과 비용은 실제 thread.created.agentInfo.modelturn.done.state.metrics.total_cost_in_usd에서 읽습니다.

세 가지 기능 탐지기는 문서로는 확인할 수 없는 신호에 의존합니다 — Code Mode 도구 이름, 대용량 결과 오프로드 마커, 그리고 컴팩션 이벤트가 발생하는지 여부입니다. 이것들은 미검증으로 분류됩니다. 실제 실행이 그것을 입증하지 못하면 그 램프는 꺼진 채 남고 분모는 줄어듭니다. 심판이 램프 하나를 클릭하면 깨질 수 있는 부풀린 22/22보다 정직한 19/19가 낫습니다.

발견된 업스트림 버그 두 가지

  • @truefoundry/trueforge-ui@0.2.4는 의존성 충돌이 있습니다. @assistant-ui/corezustand@^5에 peer 의존하는 반면, OpenUI 렌더러는 zustand@^4를 가져오고 npm이 호이스팅합니다. 빌드는 'useShallow' is not exported from 'zustand/shallow'와 함께 실패합니다. 루트 package.jsonoverrides 블록을 이용해 우회했습니다.

  • 해당 styles.css@layer tfy-agent-ui-utilities에 완전한 Tailwind 유틸리티 세트를 담고 있습니다. tailwindcss 다음에 임포트하면 그 레이어는 나중에 등록되므로, SDK의 단순 .hidden이 미디어 쿼리와 상관없이 당신의 .xl:flex을 이깁니다 — 호스트 앱의 모든 반응형 변형을 조용히 깨뜨립니다. globals.css에서 명시적 @layer 순서 문장으로 고쳤습니다.


테스트

npm test        # 92 tests, 11 fixtures, 4 agent specs

네 개의 스위트가 있고, 각각은 구현이 아니라 속성 하나를 고정합니다.

스위트

고정하는 속성

gate.test.mjs

non-PROVEN 인증서는 어떤 클래스, 상태, 조회자 조합에서도 게이트를 열지 않습니다

policy.test.mjs

정말로 인원수를 셉니다. 동결은 런던 기존의 벽시계 시간으로 평가합니다. 안전에 대한 주장은 다시 계산됩니다. Break-Glass는 절대 단독가 되는 일이 없습니다.

receipt.test.mjs

밀봉된 기록을 편집하거나, 재정렬하거나, 삭제하는 일은 그 일이 일어난 바로 그 기록에서 감지됩니다

harness.test.mjs

실제 하네스 이벤트만 램프를 켭니다. 노이즈, 반복 커넥터, 차트를 언급하는 글은 아무것도 켜지 않습니다

mcp/server.test.mjs

정확히 하나의 도구가 파괴적이며 그것이 승인 대기 중인 도구입니다; 어떤 변경사항을 적용하는 도구가 없습니다

그리고 CI에서 실행되는 구조 검사 두 개가 있습니다.

  • check-fixtures.mjs — 모든 픽스처는 계약 조건을 따라 파고, 파일 이름이 말하는 게이트 판정을 그대로 생성합니다. 그래서 .standing.json이라는 인스턴스가 아무도 의식하지 못하는 불특정 이유가 아니라 실제로 만료 기한이 없어서 거부되는 것이 보장됩니다.

  • check-agents.mjs — 프로덕션 커넥터를 쓰는 것은 없고, 쓰기가 가능한 에이전트라면 AIRLOCK을 마운트하고 승인용 도구를 정확히 하나 보유합니다.

생성되는 산출물(contracts/dossier.schema.json, docs/CAPABILITIES.md, docs/POLICY.md, 픽스처)은 npm run gen으로 만들어지며 멱등적이므로, 문서의 주장과 코드가 실제로 행동을 벗어날 수 없습니다.


Rohit Maruri — 콘솔, 랜딩 페이지, 제어실, 하네스 패널, 인증서 카드, 게이트, 정책 엔진, 변조 방지 장부, MCP 서버, 에이전트 정의 및 스킬, 계약, 웹훅과 역할. Damir — 검증 엔진, 섀도 브랜치 수명주기, 범위 계산, 시드 데이터.

MIT 라이선스.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Pauses AI agent execution and routes approval requests to humans via Slack or email, with cryptographically signed proof of the human's decision.
    197
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A safety gate for agent-proposed NixOS configuration changes, grading security-relevant option deltas, attesting closures for vulnerabilities, and requiring human approval with a tamper-evident audit ledger.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A human-in-the-loop governance interlock for AI agents. Agents propose changes, a human countersigns the exact plan, and then it executes stage by stage with precondition checks, verification, and auditing.
    Apache 2.0

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Rohit-ATS/Airlock'

If you have feedback or need assistance with the MCP directory API, please join our Discord server