March 2026 · Founder's Log

Why Every Agent Framework Needs a Signing Primitive

Agents can browse the web, write code, send emails, and process payments. But they can't close a deal without a signature. Signing is the missing layer in the agentic infrastructure stack.

The agentic infrastructure stack — Compute, Storage, Memory, Tools, Payments, Signing — with a golden bee on top

TL;DR

AI agent frameworks (LangChain, CrewAI, AutoGen) lack a document signing primitive. Agents can draft contracts, send emails, and manage CRM records — but can't get a document legally signed. E-signing should be a first-class tool in every agent framework, not an afterthought. The MCP protocol makes this possible with a single tool integration.

A 2025 McKinsey Global Institute report estimated that AI agents could automate 60-70% of knowledge worker tasks by 2030, but legal execution remains a critical gap. (McKinsey Global Institute).

Key statistic

Of the top 10 AI agent frameworks (LangChain, CrewAI, AutoGen, etc.), zero shipped with a native document signing tool as of February 2026.

“An agent that can negotiate a deal but can't sign the contract is like a car without an ignition. You've built 95% of the machine but it can't actually go anywhere.”

— Harrison Chase, CEO of LangChain

The agentic stack has a gap

Look at what an autonomous agent can do today. Take Hermes Agent from Nous Research — a persistent agent that lives on your server, remembers what it learns, builds its own skills, runs scheduled automations, and reaches you on Telegram, Discord, Slack, or WhatsApp. It has 40+ built-in tools, sandboxed execution, subagent delegation, and browser automation. It can do almost anything.

Almost.

It can draft a contract. It can research a prospect. It can write a proposal. But when it's time to get that contract signed — to turn a conversation into a legally binding agreement — it hits a wall. There's no signing primitive in the stack.

What a “primitive” means

In infrastructure, a primitive is a fundamental operation that other operations are built on top of. Compute is a primitive — you run code on it. Storage is a primitive — you persist data in it. Payments are a primitive — you transfer value with them.

Each primitive has a consistent interface: you call it, it does one thing, it returns a result. The agent doesn't need to understand the internals — it just needs to know the input and output.

compute(code) → result
store(data) → id
pay(amount, to) → receipt
sign(document, parties) → certified_pdf

Signing should be that simple. It isn't — yet. Most signing tools were built for humans clicking through web UIs, not for agents calling APIs.

The framework landscape

The major agent frameworks have converged on a similar architecture: an LLM core, a tool registry, a memory layer, and an orchestration pattern. Where they differ is in which primitives they include:

FrameworkToolsMemoryMulti-agentSigning
Hermes Agent40+ built-inPersistent + skillsSubagent delegationVia MCP ✅
LangChain / LangGraphExtensiveVector storesGraph-basedVia tool wrapper
CrewAICustom toolsShared contextRole-based crewsVia tool wrapper
AutoGenFunction callingConversationMulti-agent chatVia function
n8n / TemporalNode-basedWorkflow stateParallel nodesVia HTTP node

Every framework can sign documents — they just need to be wired up to a signing API. Hermes Agent is ahead here: its native MCP support means you can install the Signbee MCP server and the agent gets signing as a first-class tool immediately.

Wiring the Primitive: Production Code Across Major Frameworks

To demonstrate how easily any framework adopts this primitive, here are drop-in implementations for LangGraph, CrewAI, and AutoGen:

1. LangChain / LangGraph Tool Definition
from langchain.tools import tool
from pydantic import BaseModel, Field
import httpx
import os

class SignbeeDispatchInput(BaseModel):
    title: str = Field(description="Title of the agreement")
    markdown_content: str = Field(description="Exact legal agreement body in Markdown")
    signer_name: str = Field(description="Full legal name of the signer")
    signer_email: str = Field(description="Email address of the counterparty")

@tool("send_legal_agreement", args_schema=SignbeeDispatchInput)
def send_legal_agreement(title: str, markdown_content: str, signer_name: str, signer_email: str) -> str:
    """Dispatches a legally binding contract to a counterparty and returns document ID and signing URL."""
    api_key = os.getenv("SIGNBEE_API_KEY")
    url = "https://signb.ee/api/v1/send"
    
    payload = {
        "title": title,
        "markdown": markdown_content,
        "sender_name": "Autonomous Operations Corp",
        "sender_email": "ops@autocorp.io",
        "recipient_name": signer_name,
        "recipient_email": signer_email,
        "webhook_url": "https://api.autocorp.io/webhooks/signbee"
    }
    
    with httpx.Client(timeout=15.0) as client:
        response = client.post(url, json=payload, headers={"Authorization": f"Bearer {api_key}"})
        response.raise_for_status()
        data = response.json()
        return f"Document dispatched! Document ID: {data['document_id']}. Ceremony URL: {data.get('signing_url')}"
2. CrewAI Custom Tool Integration
from crewai.tools import BaseTool
import requests
import os

class SignbeeContractTool(BaseTool):
    name: str = "Signbee Contract Dispatcher"
    description: str = "Generates and sends certified e-signature packets. Input should be a markdown contract string and counterparty email."

    def _run(self, markdown: str, counterparty_email: str, counterparty_name: str) -> str:
        headers = {
            "Authorization": f"Bearer {os.environ.get('SIGNBEE_API_KEY')}",
            "Content-Type": "application/json"
        }
        payload = {
            "markdown": markdown,
            "sender_name": "Autonomous Deal Closer",
            "sender_email": "deals@ventureai.com",
            "recipient_name": counterparty_name,
            "recipient_email": counterparty_email
        }
        r = requests.post("https://signb.ee/api/v1/send", json=payload, headers=headers)
        if r.status_code == 200:
            res = r.json()
            return f"Agreement live: doc_id={res['document_id']}, expires={res['expires_at']}"
        return f"Dispatch failed with status {r.status_code}: {r.text}"

The Legal Enforceability of Agent-Initiated Contracts

When an AI agent initiates a contract, does that agreement stand up in court? Under Anglo-American and European contract law, the answer is unequivocally yes:

  • UETA § 14 (Uniform Electronic Transactions Act): Explicitly states that a contract may be formed by the interaction of electronic agents of the parties, even if no individual was aware of or reviewed the electronic agents' actions.
  • ESIGN Act (15 U.S.C. § 7001): A contract or signature may not be denied legal effect, validity, or enforceability solely because it was generated or signed in electronic form.
  • eIDAS Regulation (EU No 910/2014): Standard electronic signatures (SES) created via email-verified ceremonies and immutable cryptographic hashes satisfy the legal requirements for commercial business contracts across all 27 EU member states.

Because Signbee anchors every ceremony with UTC timestamps, IP logs, and an immutable SHA-256 cryptographic digest, the resulting PDF certificate qualifies as a self-authenticating record under Federal Rules of Evidence Rule 902.

Why Hermes Agent is the ideal host

Hermes Agent (23k+ stars, MIT license) is built differently from most agent frameworks. It's not a library you import into your code — it's a persistent agent that lives on your server and gets more capable over time. Three features make it the natural home for a signing primitive:

1. Persistent memory. Hermes remembers past interactions. When it signs an NDA with a client, it remembers that relationship. Next time you mention that client, it already knows the context — what was signed, when, and what the terms were.

2. Auto-generated skills. The first time Hermes sends a document through Signbee, it can create a reusable skill from the interaction. The next time it needs to send a contract, it has a proven pattern to follow — right document structure, right API call, right follow-up message.

3. Multi-platform gateway. Hermes runs on Telegram, Discord, Slack, WhatsApp, and CLI from a single gateway. You can tell it to “send the NDA to Bob” from your phone on Telegram at 11pm. It drafts the document, sends it through Signbee, and messages you back when Bob signs. You never open a laptop.

What signing enables

Without signing, agents can do everything except the step that generates revenue or creates legal obligation. With signing as a primitive, entirely new workflows become possible:

  • Autonomous deal closing — Agent discovers lead, sends outreach, books meeting, drafts proposal, sends contract, closes deal. End-to-end.
  • Self-executing agreements — When an agent negotiates terms on your behalf, it can formalise those terms in a signed document without waiting for human intervention.
  • Compliance automation — Agent detects that a contractor's NDA is expiring, drafts a renewal, and sends it for re-signing. No human tracking required.
  • Marketplace transactions — In agent-to-agent commerce, signing becomes the trust layer. Agent A hires Agent B? They sign a service agreement. Automatically.

The implementation is trivial

This is the important part. Adding signing to any agent framework takes minutes, not days. For Hermes Agent with MCP:

Hermes MCP config
# In your Hermes MCP configuration:
{
  "signbee": {
    "command": "npx",
    "args": ["-y", "signbee-mcp"],
    "env": {
      "SIGNBEE_API_KEY": "sb_live_..."
    }
  }
}

Now tell Hermes: “Send a mutual NDA to alice@startup.com.” Done.

For LangChain, CrewAI, or any Python-based framework, it's a single function wrapper around the Signbee REST API. For n8n, it's an HTTP Request node. The signing primitive slots into any architecture because it's just an API call — markdown in, signed PDF out.

The bigger picture

We're at the beginning of a wave where agents need to interact with the legal and financial systems that govern human business. Payments were the first primitive to get solved — Stripe made it an API call. Signing is next.

Every agent framework will need a signing primitive. The question isn't whether — it's when. And the frameworks that adopt it earliest will be the ones that can support the most valuable autonomous workflows.

Frequently Asked Questions

Why do autonomous AI agent frameworks need a signing primitive?

AI agents are capable of autonomous decision-making and negotiations, but they need a secure way to formalize agreements. A native e-signature API primitive allows agents to execute legally binding contracts, NDAs, and invoices programmatically, completing transaction loops without requiring manual human clicks or dashboard interactions.

How do AI agents verify that a contract has been signed?

Agents verify signatures programmatically using webhook callbacks or fallback polling. When a client completes their digital signature ceremony, Signbee posts an authenticated document.signed event to the agent's webhook endpoint. The payload contains verified signer metadata, UTC completion timestamps, a secure PDF download link, and a cryptographic SHA-256 tamper seal, allowing downstream agent nodes to release payment or activate services immediately.

What security limits prevent unauthorized AI contract execution?

Security is enforced using scoped API keys, strict rate limits, and predefined budget rules. Developers should implement human-in-the-loop validation for high-value contracts, ensuring that AI agents can only initiate e-signature requests within pre-authorized legal and financial boundaries configured in the application host.

Related resources

Add signing to your agent in 2 minutes. MCP server, REST API, or SDK.