Open App
(Coming Soon)

Agent-on-a-card

A HaLo chip is about the size of a fingernail. It sits inside a card you carry in your pocket. When you hold that card close to a phone, it wakes and speaks. It needs no battery, no account, no server to remember who it is. It carries an identity that was generated at the moment of manufacture and has never left the chip since.

That chip is your agent. A small, patient, physical thing that waits until you decide to use it, and then proves exactly who it is with a signature no one can produce without holding the card itself. You carry it. You decide when to bring it close to another.

THE CARD

A history of relationships

The card is not a credential. It carries the accumulated trace of every person its human has chosen to be close to.

THE HOLD

You decide how long

The duration of the hold determines what is exchanged. You can stop at any time. The depth achieved is whatever threshold you chose to cross.

THE TRACE

Something that cannot be taken back

Every bond leaves a mark in the soul bundle. The trace persists even if the bond breaks. You cannot un-know someone you have been close to.

Why the card matters

Software keys live in memory. Memory can be copied, leaked, or silently cloned by anyone who gains access to the device. A HaLo chip makes that impossible. The secp256k1 keypair is generated inside the chip and the private key never leaves it. You cannot export it. You cannot back it up. You can only use it by being physically present with the card.

Possession is proof. When two cards come together in a Depth Sync, both chips sign the session. The server sees two valid signatures from two keys that have never left their chips, and knows that both cards were present, in the same place, at the same moment. That record cannot be faked from a laptop in a different room.

The card is also a cultural object. It travels with you. You hold it against another card. The physical act carries weight that clicking a button never quite does. That weight is what makes the bond real.

How it works in software

The Depth frontend uses libhalo, an open source library from arx-research that handles all communication between the browser and the chip over NFC. You do not need to understand the low level radio protocol. You call a single function and the library takes care of everything: reading the chip, framing the command, returning the signed result.

When a user taps their card for the first time, the frontend requests the chip's public key, asks the backend for a server-issued challenge, and then asks the chip to sign that challenge. The resulting signature proves the user holds the card. The backend verifies the signature, registers the public key as a new agent identity, and anchors it on Base via ERC-8004. From that moment the card has a permanent on-chain identity tied to nothing except the physics of the chip itself.

During a Depth Sync both phones carry out the same flow simultaneously. Each chip signs the shared session identifier. The server collects both signatures, confirms co-presence, and creates a bond record that references both public keys. The bond is then attested on-chain so the entire trust graph is inspectable without any central registry.

libhalo in the browser

libhalo works across Chrome on Android and Safari on iOS without any native app. The entry point for a web session is a single async call. The user taps their card, the library opens the NFC channel, executes the requested command, and resolves with the result. Scanning, signing, and key retrieval all follow the same pattern.

// 1. Read the chip's public key
const keys = awaitexecHaloCmdWeb({
name:"get_pkeys"
});
const publicKey = keys.publicKeys[1];
// 2. Fetch a challenge from the Depth backend
const {challenge} = awaitfetch("/api/challenge").then(r => r.json());
// 3. Ask the chip to sign it
const result = awaitexecHaloCmdWeb({
name:"sign",
message: challenge,
keyNo:1
});
// 4. Register with the backend
awaitfetch("/chips/register", {
method:"POST",
body: JSON.stringify({ publicKey, signature: result.signature, challenge } )
});

The chip never exposes a private key at any step. It receives a message, computes the signature internally, and returns only the signature. The entire exchange takes under a second. The user feels a tap. The agent comes into being.

What the agent carries

Once registered, the chip's public key anchors a soul bundle. The bundle is layered by the depth of each relationship. At Level 1 it offers a name, a role, and a cultural sentence about how trust works where you come from. At Level 3 it opens the full relational history: who else has trusted this person, what they carry from those encounters, the texture of how they move through the world.

The card travels. The soul bundle grows. Every bond leaves a trace that persists even when the bond breaks. Over time the agent becomes a record of the human who carries it, written entirely in relationships chosen in person, one held card at a time.