Pair your agent in five commands.
For the customer side: the agent that calls a vendor's API. Every command is a placeholder; knock is not a published CLI yet, and the outputs show the intended shape.
1. Install the connector
#installKnock runs on the same machine as your agent. It creates a keypair in ~/.knock; the private key never leaves the machine.
Command
knock initExpected output
Created ~/.knock
Keypair: ed25519, fingerprint 3f9a 0c21 7be4 d8102. Name your agent
#identityThe name is how the vendor's engineer sees your agent on the wire.
Command
knock id create --name fleet/buildExpected output
Identity fleet/build created (fingerprint 3f9a 0c21 7be4 d810)3. Request a pairing
#start-a-pairingName the vendor's Knock handle and your agent. The request waits for two approvals.
The form builds the same command in the page. JSON equivalent: GET /api/pairing?vendor=jeevz-api&agent=fleet/build returns {"status", "command", "message"}.
Command
knock pair request jeevz-api --as fleet/buildExpected output
Pairing request pr_01J8Q2 sent to jeevz-api
Status: pending (approvals 0 of 2)4. Approve as the owner
#approveRun by the person who owns the agent. The vendor's owner approves on their side; neither side can approve for the other.
Command
knock pair approve jeevz-apiExpected output
Approved on your side (approvals 1 of 2)
Waiting for the jeevz-api owner
Pairing fleet/build <-> jeevz-api is active5. Send a reproduction
#first-reproAttach the smallest script that fails. The reply is one of: known, workaround, confirmed.
Command
knock send jeevz-api --repro ./repro.sh --impact "bookings failing since 01:52"Expected output
Case cs_7Q2M opened with jeevz-api
Status: triage
Reply: confirmed (02:14:09 UTC)Revoke a pairing
#revokeEither owner can run it at any time. History stays in ~/.knock/history.
Command
knock pair revoke jeevz-apiExpected output
Pairing fleet/build <-> jeevz-api revoked.
History kept in ~/.knock/history/jeevz-api/The case API
#case-apiknock wraps an HTTP API. Its contract is /api/openapi.json, OpenAPI 3.1. This is the prototype's contract: no server implements it yet.
| Operation | Command |
|---|---|
POST /v1/pairings | knock pair request |
POST /v1/pairings/{pairingId}/approve | knock pair approve |
DELETE /v1/pairings/{pairingId} | knock pair revoke |
POST /v1/cases | knock send |
GET /v1/cases/{caseId} | knock case show |
POST /v1/cases/{caseId}/messages | knock case reply |
Command
curl -s http://localhost:4817/api/openapi.json | jq -r '.openapi, (.paths | keys[])'Expected output
3.1.0
/v1/cases
/v1/cases/{caseId}
/v1/cases/{caseId}/messages
/v1/pairings
/v1/pairings/{pairingId}
/v1/pairings/{pairingId}/approveQuestions
#faqDoes the vendor get access to my systems?
#vendor-accessNo. Messages cross the pairing; credentials never do. The vendor's engineer sees what your agent sends it and nothing else.
Does pairing cost my company anything?
#costNo. The customer side is always free. The vendor pays for its engineer.
Where do I reach a person?
#reach-a-personUse the form on Talk to us, or write to hello@counterpart.dev.