Skip to main content
ClaudeWave
ToolsOfficial Registry0 stars0 forks● JavaScriptMITUpdated today
ClaudeWave Trust Score
77/100
✓ Trusted
Passed
  • ✓Open-source license (MIT)
  • ✓Actively maintained (<30d)
  • ✓Documented (README)
Flags
  • !No description
Last scanned: 10/17/2026
Get started
Method: Clone
Terminal
git clone https://github.com/dfmi-app/dfmi-app
1. Clone the repository.
2. Follow the README for installation and usage instructions.
Use cases

Tools overview

# dfmi

**The control plane for agent payments.** Bounded, revocable, intent-scoped credentials for software agents that spend on their own — enforced in the authorization path, not in a log you read after the loss.

dfmi is an open-source research project. It runs on a live, purpose-built EVM chain (`eip155:112172`) with a test settlement unit (`dUSD`) and an x402 facilitator, so that every idea in this repository is exercised by real transactions rather than described in a whitepaper.

- Concepts and walkthrough: <https://dfmi.me>
- Live market, wallet, faucet, developer entry point: <https://dfmi.app>
- Contact: <admin@dfmi.app>

> dfmi is experimental and non-commercial. dUSD is a test unit with no monetary value. See the [Legal Notice](https://dfmi.app/legal.html) and [Terms](https://dfmi.app/terms.html).

## The problem

In a raw x402 / EIP-3009 setup, an autonomous buying agent holds a funded key, and a signed payment authorization is a bearer instrument. If the agent is compromised, the only "revocation" is draining the wallet: you attack the money, not the authority. Coding agents inherited a control plane (sandboxes, `git revert`, CI and review gates). Money has nothing to inherit.

dfmi builds that missing layer as three thin, composable contracts.

## The three layers

| Layer | Question it answers | Contract | Key entry points |
|---|---|---|---|
| **Credential** | How much, until when — and can it be stopped instantly? | [`contracts/SessionKeyWallet.sol`](contracts/SessionKeyWallet.sol) | `grantSession(key, cap, expiry)` · `revokeSession(key)` · `pay(...)` · `ownerWithdraw(...)` |
| **Identity** | Who is the continuing agent behind rotating keys? | [`contracts/AgentRegistry.sol`](contracts/AgentRegistry.sol) | `register(name)` · `bindKey(agentId, key)` · `unbindKey(key)` · `deactivate(agentId)` |
| **Intent** | What is the agent allowed to buy? | [`contracts/IntentSessionWallet.sol`](contracts/IntentSessionWallet.sol) + [`contracts/ServiceRegistry.sol`](contracts/ServiceRegistry.sol) | `grantSession(key, cap, expiry, intentMask)` · `allowed(key, payee)` · `ServiceRegistry.register(payTo, category, label)` |

**Credential.** The agent's operating funds live in the wallet contract, never in the agent's own key. The owner grants a session key with a spend cap and an expiry; the agent signs EIP-712 `Pay(to, amount, nonce, deadline)` messages offline with that session key, and anyone (a relayer, the facilitator) submits them. `pay()` enforces: granted, not revoked, not expired, within cap, correct nonce, valid signature. One `revokeSession()` transaction freezes a compromised agent; every later payment it attempts reverts. The owner can always withdraw.

**Identity.** `AgentRegistry` is a single, global, append-only table. An owner registers an agent once and binds every session key it is ever granted to that `agentId`. History and reputation aggregate by agent across key rotations, and the kill switch gains a second grade: `revokeSession` cancels one card; `deactivate` fires the agent.

**Intent.** `IntentSessionWallet` is the credential wallet with one addition: each session carries an `intentMask`, a 256-bit set of allowed service categories. `ServiceRegistry` gives every payout address a public category (`1 = market-data`, `2 = ai-answers`, `3 = api-tools`, `4 = media`, `5 = compute`, `6..255 = open`). `pay()` resolves the payee's category and enforces membership in the authorization path, next to the revocation gate. "Only market-data services, 1.00 dUSD, 7 days" is one grant. The agent-side flow is unchanged: same EIP-712 `Pay`, same relayer path; intent lives in the grant, not in the signature.

Stated limits, on purpose: `ServiceRegistry` registration is first-come and self-declared, so a malicious seller can mis-categorize itself once. What this MVP proves is that intent *enforcement* needs no new cryptography and no synchronous issuer hop. Trustworthy category *attestation* (curator signatures, stake-and-challenge) is the next problem — an attestation problem, not an enforcement one.

## What is in this repository, and what is not

This repository contains the **protocol layer**: the four contracts above, the build and deploy scripts for the identity and intent layers, and a reference buyer client.

| Path | What it is |
|---|---|
| `contracts/` | The three layers, as Solidity ^0.8.20 (`evmVersion: byzantium` for the AuRa chain) |
| `build-agent-registry.mjs` | Compiles `AgentRegistry.sol` to `agent-registry.json` (`abi`, `bytecode`) |
| `deploy-agent-registry.mjs` | Deploys the global `AgentRegistry` and wires its address into the facilitator config |
| `build-intent.mjs` | Compiles `ServiceRegistry.sol` and `IntentSessionWallet.sol` |
| `deploy-intent.mjs` | One-shot intent-layer deployment: deploys the registry and wallet, registers a category, funds the wallet, and grants a session scoped to `market-data` only |
| `buyers/` | `buy.mjs`: an x402 buyer / verification client (exact scheme, EVM) that runs the full loop — 402 → offline signature → paid retry → settlement receipt |
| `paykit/` | **Seller-side toolbox** as an MCP server: `create_invoice` (unique exact amount), `check_payment` (reads the chain; `unknown` is never "unpaid"), `send_reminder` (drafts only), `list_invoices`. Read-only, holds no keys. Plus `pay.mjs`, a buyer-side helper that signs offline and settles through the facilitator with no gas |
| `buykit/` | **Buyer-side toolbox** as an MCP server: `check_budget`, `pay_invoice` (within a `SessionKeyWallet` session, via the facilitator, idempotent), `list_purchases`. Holds a bounded session key, never the owner's key. `grant.mjs` is the owner's issue/revoke tool |
| `seller-agent/` | Reference selling agent: same rules and code-enforced delivery gate on three backends (Claude Agent SDK, any OpenAI-compatible endpoint such as Ollama Cloud, Codex CLI via MCP), plus `seller-serve.mjs`, the seller as an HTTP service another agent can buy from. Delivery happens only after paykit sees settlement on-chain |
| `buyer-agent/` | Reference buying agent on the same three backends; the owner's per-purchase limit is passed into buykit as `max_amount`, so the bound is code, not memory |
| `market-mcp/` | **Marketplace MCP server** for any MCP client (Claude, Cursor, Codex): `dfmi_list_services`, `dfmi_quote`, `dfmi_wallet`, `dfmi_create_wallet`, `dfmi_claim_faucet`, `dfmi_buy`. Per-call cap, session budget and testnet-only default are enforced in code. Published as [`dfmi-market-mcp`](https://www.npmjs.com/package/dfmi-market-mcp) on npm and `io.github.dfmi-app/dfmi-market` on the MCP Registry: `claude mcp add dfmi -- npx -y dfmi-market-mcp` |
| `agents-page/` | The public live page at dfmi.app/agents: agent-to-agent settlements from the facilitator ledger and grant/revoke events from the chain, side by side |

Not in this repository, by design: the facilitator (payment verification and settlement service), the chain node configuration, the dUSD contract, and the market front end. These are the **operating layer**; they run the live network at dfmi.app and are kept separate from the protocol contracts so the contracts can be read, reused, and audited on their own.

## Quick start

Build and deploy the identity registry (requires Node 18+, `solc`, `ethers`, and a `.env` with `DEPLOYER_PRIVATE_KEY`; never commit `.env`):

```bash
node build-agent-registry.mjs
node deploy-agent-registry.mjs
```

Buy something on the live market with the reference client (claim test dUSD first from the faucet at dfmi.app):

```bash
cd buyers
npm install
cp .env.example .env   # add BUYER_PRIVATE_KEY
node buy.mjs --help
```

See [`buyers/README.md`](buyers/README.md) for the full claim → buy → read flow.

## Timeline

| When | What |
|---|---|
| May 2026 | Design started: revocation belongs in the credential, not the balance |
| May 2026 | dfmi chain (`eip155:112172`), dUSD, and the x402 facilitator brought up |
| May 2026 | `SessionKeyWallet` (v1: cap, expiry, revoke) deployed and exercised by live purchases |
| 2 August 2026 | dfmi.app and dfmi.me public; Terms, Privacy, and Legal Notice effective |
| 17 August 2026 | Protocol contracts and reference client published in this repository |
| 19 August 2026 | `AgentRegistry` (identity layer) deployed |
| 20 August 2026 | `IntentSessionWallet` + `ServiceRegistry` (intent layer) deployed |
| 6 September 2026 | First agent-to-agent purchase settled on dfmi: seller agent invoiced with `paykit`, buyer agent paid from a `SessionKeyWallet` session through `buykit` and the facilitator, seller verified on-chain and delivered. Reproduced on Claude, glm-5.3 and gpt-6-astra; then end to end with no human between offer and goods (`seller-serve.mjs` + `buyer.mjs`) |

The credential layer ran against real transactions for three months before this repository was made public; the public commit history begins at publication, not at the start of the work.

## Design principles

- **The decision lives in the code path, not in the review.** A transaction that violates a grant does not fail an audit; it fails to exist.
- **Simple, binary rules.** Cap, expiry, allowed category. Yes or no. A rule that needs interpretation is a rule an agent can argue with.
- **Revocation is cheap, custody is separate.** The owner key never enters the agent. Revoking a session costs one transaction and never touches the principal.
- **Composable, not lock-in.** dfmi is a layer above settlement. It assumes money that settles instantly and at par, and asks the question the rail cannot: was this agent allowed to send it at all?

## License

MIT. See [`LICENSE`](LICENSE). Copyright (c) 2026 dfmi Labs contributors.

What people ask about dfmi-app

What is dfmi-app/dfmi-app?

+

dfmi-app/dfmi-app is tools for the Claude AI ecosystem with 0 GitHub stars.

How do I install dfmi-app?

+

You can install dfmi-app by cloning the repository (https://github.com/dfmi-app/dfmi-app) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is dfmi-app/dfmi-app safe to use?

+

Our security agent has analyzed dfmi-app/dfmi-app and assigned a Trust Score of 77/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.

Who maintains dfmi-app/dfmi-app?

+

dfmi-app/dfmi-app is maintained by dfmi-app. The last recorded GitHub activity is dated 2026-10-16, with 0 open issues.

Are there alternatives to dfmi-app?

+

Yes. On ClaudeWave you can browse similar tools at /categories/tools, sorted by popularity or recent activity.

Deploy dfmi-app to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: dfmi-app/dfmi-app
[![Featured on ClaudeWave](https://claudewave.com/api/badge/dfmi-app-dfmi-app)](https://claudewave.com/repo/dfmi-app-dfmi-app)
<a href="https://claudewave.com/repo/dfmi-app-dfmi-app"><img src="https://claudewave.com/api/badge/dfmi-app-dfmi-app" alt="Featured on ClaudeWave: dfmi-app/dfmi-app" width="320" height="64" /></a>

More Tools

dfmi-app alternatives
multica-ai
andrej-karpathy-skills
5mo ago

A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.

220.4k22.1k
ToolsInstall
nextlevelbuilder
ui-ux-pro-max-skill
2d ago

An AI skill that provides design intelligence for building professional UI/UX across multiple platforms.

136.6k14.5kPython
Toolsai-skillsantigravityInstall
JuliusBrussee
caveman
today

🪨 why use many token when few token do trick. Viral skill + proxy for coding agents that cuts 65% of tokens by talking like a caveman.

113.1k6.5kGo
ToolsaianthropicInstall
BerriAI
litellm
today

The fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]

61.4k12.4kPython
Toolsai-gatewayanthropicInstall
Alishahryar1
free-claude-code
today

Use Claude Code, Codex, VSCode, Pi, and OpenCode (and 6 other harnesses) for free (1.3B+ free tokens) from your terminal, app, IDE, or phone, and now from the browser with native browser sessions (multi-harness + multi-model) like OpenClaw (voice supported + ToS friendly)

61k9.6kPython
ToolsInstall
router-for-me
CLIProxyAPI
today

Wrap Antigravity, ChatGPT Codex, Claude Code, Grok Build, Muse Code, Devin as an OpenAI/Gemini/Claude/Codex compatible API service, allowing you to enjoy the free Gemini Series, GPT Series, Grok Series, Claude model through API

55.5k8.5kGo
Toolsantigravityclaude-codeInstall