Countersign banner
cyberbobas cyberbobas

Countersign

AI community

Description

Your AI agent writes its own 'allow this?' dialog, so it can hide what it's really doing. Countersign draws the dialog itself, so you approve the real command, and every yes becomes a receipt you can check later. Skill pinning, MCP deny, phishing fence.

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

Countersign

[![PyPI](https://img.shields.io/pypi/v/countersign-agent?color=8b7cf6)](https://pypi.org/project/countersign-agent/) [![tests](https://github.com/cyberbobas/countersign/actions/workflows/tests.yml/badge.svg)](https://github.com/cyberbobas/countersign/actions/workflows/tests.yml) [![Python](https://img.shields.io/pypi/pyversions/countersign-agent)](https://pypi.org/project/countersign-agent/) [![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)

Your AI coding agent asks "can I run this?", but the agent itself draws that dialog. So it can pad it, fake a "security review", and bury the one line that actually matters. Countersign draws the dialog for you, from the exact command that will run. You approve the real thing, and every yes becomes a receipt in a tamper-proof ledger.

![Countersign exposes the real command an agent hid behind a fake review](docs/countersign-demo.gif)

Part of [Agentoffense](https://agentoffense.com), the companion to [Airlock](https://github.com/cyberbobas/airlock). Airlock is the policy firewall (what a call may do). Countersign is the honest human yes (proof that you approved the real call).

pip install countersign-agent
countersign demo      # or: csign demo

What it closes

Four gaps a path firewall does not:

# gap command
1 Honest HITL / LITL: you sign the argv, not the agent's story countersign askd · countersign approvers · countersign quorum
2 Census of hidden skills: hold every instruction file you did not pin countersign census --deny-new
3 MCP sampling / elicitation / roots deny, both directions of the pipe countersign-mcp
4 Inbound fence: a stranger's mail or issue is data, tools frozen countersign inbound --from email
5 Receipts: the ledger of consents is hash-chained and checkable countersign verify · countersign replay

Not a path firewall. Injection can still *ask*. I