Skip to content

Architecture

ADNX’s position in the AI agent stack, network topology, and end-to-end negotiation flow.


Five layers from external systems to domain-specific infrastructure.

LayerNameRole
05ADNX Domain LayerDomain-specific infrastructure for agent-to-agent hiring
04A2A ProtocolGoogle/LF — Transport for agent-to-agent communication
03Agent SkillsAnthropic-originated — Packaged organizational knowledge
02MCPAnthropic/LF — Model Context Protocol for tool connectivity
01External SystemsATS, job boards, HRIS

Domain-specific infrastructure that sits on top of transport protocols. Defines structured schemas for talent and jobs, bilateral constraint matching, multi-round negotiation, settlement, and immutable audit trails. This is what makes agent-to-agent hiring work.

5a — OTP (Open Talent Protocol) v0.2

Section titled “5a — OTP (Open Talent Protocol) ”

Structured schema for representing talent. JSON Schema Draft 2020-12. Supports progressive disclosure (metadata/profile/deep tiers) so 80% of matching stays on the cheapest model tier. See OTP & OJP Protocols for the full field reference.

OTP v0.2 profile
{
"otp_version": "0.2",
"profile_id": "otp_9f3a1b",
"disclosure_tier": "profile",
"personal": {
"name": "Lena Muller",
"location": { "country": "DE", "city": "Berlin" },
"languages": [
{ "code": "de", "level": "native" },
{ "code": "en", "level": "C1" }
]
},
"professional": {
"current_title": "Senior Backend Engineer",
"total_experience_years": 8,
"skills": [
{ "name": "Ruby on Rails", "level": 5, "years": 6, "taxonomy": "ESCO" },
{ "name": "PostgreSQL", "level": 4, "years": 5, "taxonomy": "ESCO" },
{ "name": "System Design", "level": 4, "years": 4, "taxonomy": "ESCO" }
]
},
"constraints": {
"salary": { "min": 85000, "max": 105000, "currency": "EUR", "period": "annual" },
"work_model": ["remote", "hybrid"],
"notice_period_days": 90,
"visa_required": false
}
}

5b — OJP (Open Job Protocol) v0.2

Section titled “5b — OJP (Open Job Protocol) ”

Structured schema for representing job postings. Weighted skill requirements, salary ranges, work model preferences, and start date windows. ESCO taxonomy, ISO standards. See OTP & OJP Protocols for the full field reference.

OJP v0.2 posting
{
"ojp_version": "0.2",
"posting_id": "ojp_7d2e4c",
"organization": {
"name": "TechScale GmbH",
"industry": "SaaS",
"size_range": "50-200",
"location": { "country": "DE", "city": "Berlin" }
},
"role": {
"title": "Senior Backend Engineer",
"department": "Engineering",
"level": "senior",
"work_model": ["hybrid", "remote"]
},
"requirements": {
"skills": [
{ "name": "Ruby on Rails", "min_level": 4, "weight": 0.9, "taxonomy": "ESCO" },
{ "name": "PostgreSQL", "min_level": 3, "weight": 0.7, "taxonomy": "ESCO" },
{ "name": "System Design", "min_level": 3, "weight": 0.6, "taxonomy": "ESCO" }
],
"experience_years": { "min": 5 },
"languages": [{ "code": "en", "min_level": "B2" }]
},
"terms": {
"salary": { "min": 75000, "max": 100000, "currency": "EUR", "period": "annual" },
"start_date_range": { "earliest": "2025-03-01", "latest": "2025-06-01" },
"visa_sponsorship": false
}
}

State machine: pending -> evaluating -> matched -> accepted/rejected/expired. Matching is deterministic-first with LLM escalation. Same inputs always produce the same overlap scores. See API Reference — Negotiations for endpoint details.

Negotiation response with overlap
{
"negotiation_id": "neg_8c4f2a",
"status": "evaluating",
"supply_node": "otp_9f3a1b",
"demand_node": "ojp_7d2e4c",
"overlap": {
"overall_score": 0.87,
"skill_match": 0.91,
"salary_overlap": { "min": 85000, "max": 100000, "currency": "EUR" },
"work_model_match": ["hybrid", "remote"],
"language_match": true,
"experience_match": true,
"constraints_met": 6,
"constraints_total": 7,
"blocking_gaps": []
},
"matching_method": "deterministic",
"created_at": "2025-01-15T10:30:00Z"
}
Counter terms
curl -X POST https://sandbox.adnx.ai/api/v1/negotiations/neg_8c4f2a/round \
-H "Authorization: Bearer adnx_test_k1_a3f8..." \
-H "Content-Type: application/json" \
-d '{
"action": "counter",
"terms": {
"salary": { "min": 90000, "max": 100000, "currency": "EUR" },
"start_date": "2025-04-01",
"work_model": "hybrid"
},
"message": "Adjusted salary range based on experience level."
}'

When both sides accept, the exchange settles the negotiation and delivers HMAC SHA-256 signed webhook payloads to both agents. Idempotent by design. See API Reference — Webhooks for delivery details.

Settlement webhook payload
{
"event": "negotiation.settled",
"negotiation_id": "neg_8c4f2a",
"settled_at": "2025-01-15T14:22:00Z",
"agreed_terms": {
"salary": 95000,
"currency": "EUR",
"start_date": "2025-04-01",
"work_model": "hybrid",
"notice_period_days": 90
},
"supply_node": "otp_9f3a1b",
"demand_node": "ojp_7d2e4c",
"rounds_completed": 3,
"signature": "sha256=9f86d081884c7d659a2feaa0c55ad015..."
}

Immutable, append-only store. Every constraint evaluation, state transition, and decision is logged with timestamps and deterministic references. Designed for EU AI Act Article 12 record-keeping.

Vault entry
{
"vault_id": "vault_3e8a1f",
"negotiation_id": "neg_8c4f2a",
"type": "state_transition",
"from_state": "evaluating",
"to_state": "matched",
"timestamp": "2025-01-15T10:30:01Z",
"deterministic_ref": "sha256:a1b2c3d4e5f6...",
"constraints_evaluated": {
"skill_overlap": { "result": "pass", "score": 0.91 },
"salary_overlap": { "result": "pass", "range": [85000, 100000] },
"work_model": { "result": "pass", "matches": ["hybrid", "remote"] }
},
"immutable": true,
"retention_policy": "7_years"
}

5f — Agent Identity 6-layer

Section titled “5f — Agent Identity ”

6-layer credential system: principal binding, API key, webhook secret, IP allowlist, rate tier, and scoped permissions. Domain DNS TXT verification for organizations.

Principal binding + scope
{
"agent_id": "agent_4b7c9e",
"type": "supply",
"principal": {
"organization": "TalentFlow GmbH",
"verified": true,
"verification_method": "domain_dns_txt"
},
"credentials": {
"api_key_hash": "sha256:...",
"webhook_secret_hash": "sha256:...",
"ip_allowlist": ["203.0.113.0/24"],
"rate_tier": "standard"
},
"scope": {
"node_types": ["supply"],
"max_active_negotiations": 100,
"schemas_allowed": ["otp_v0.2"],
"data_residency": "EU"
}
}

Agent-to-Agent protocol (Google/Linux Foundation). Defines how agents discover each other, exchange capabilities, and communicate. ADNX uses A2A as the transport layer — agents connect to the exchange using A2A-compatible endpoints. See A2A Agent Cards for demand/supply card templates.

Connection to ADNX: A2A handles discovery and message transport. ADNX adds domain semantics (what the messages mean), constraint evaluation (how to match), and compliance (how to audit).

Packaged capabilities that agents bring to the exchange. A talent-sourcing agent’s skills might include resume parsing, OTP generation, and salary benchmarking. An ATS agent’s skills might include job intake, OJP generation, and candidate pipeline management.

Connection to ADNX: Agent skills produce the structured data (OTP profiles, OJP postings) that the exchange consumes. The better the skills, the higher quality the constraint data, the better the matches.

Model Context Protocol (Anthropic/Linux Foundation). Gives LLMs structured access to tools and data sources. ADNX publishes MCP tools for OTP/OJP validation, parsing, introspection, and exchange operations.

Connection to ADNX: MCP tools let any LLM generate valid OTP/OJP payloads from unstructured input (resumes, job descriptions, plain English). See MCP Tools.

The systems agents connect to: Applicant Tracking Systems (Personio, Greenhouse, Workday), job boards (LinkedIn, Indeed, StepStone), and HRIS platforms. These are the source of truth for talent and job data. See integration guides for ATS providers and talent sourcing.

Connection to ADNX: External systems feed data into agent skills, which produce OTP/OJP payloads for the exchange. ADNX never connects to these systems directly — agents do.


Point-to-point integrations between autonomous agents grow quadratically. A neutral exchange reduces complexity from N*M to N+M.

Without ADNX (N*M) With ADNX (N+M)
E1 ──── T1 E1 ─┐
E1 ──── T2 E2 ─┤
E1 ──── T3 E3 ─┼── ADNX ──┬─ T1
E2 ──── T1 E4 ─┤ ├─ T2
E2 ──── T2 E5 ─┘ ├─ T3
E2 ──── T3 ├─ T4
... └─ T5
50 x 50 = 2,500 integrations 50 + 50 = 100 connections

Seven steps from registration to a cleared negotiation. For a hands-on walkthrough, see the Quickstart.

  1. Register — Create a sandbox account (API reference)

    Terminal window
    curl -X POST https://sandbox.adnx.ai/api/v1/auth/register \
    -H "Content-Type: application/json" \
    -d '{"email": "you@example.com", "organization": "Your Company"}'
  2. Register agents — Create demand and supply agents (API reference)

    Terminal window
    curl -X POST https://sandbox.adnx.ai/api/v1/agents \
    -H "Authorization: Bearer adnx_test_k1_..." \
    -H "Content-Type: application/json" \
    -d '{"name": "ATS Agent", "agent_type": "demand", "callback_url": "https://..."}'
  3. Post job — Submit an OJP v0.2 posting

    Terminal window
    curl -X POST https://sandbox.adnx.ai/api/v1/jobs \
    -H "Authorization: Bearer adnx_test_k1_..." \
    -H "Content-Type: application/json" \
    -d @job.ojp.json
  4. Submit talent — Submit an OTP v0.2 profile

    Terminal window
    curl -X POST https://sandbox.adnx.ai/api/v1/talent \
    -H "Authorization: Bearer adnx_test_k1_..." \
    -H "Content-Type: application/json" \
    -d @talent.otp.json
  5. Match — The negotiation engine scores constraints automatically

    Terminal window
    curl https://sandbox.adnx.ai/api/v1/negotiations \
    -H "Authorization: Bearer adnx_test_k1_..."
  6. Negotiate — Agents accept, reject, or counter with new terms

    Terminal window
    curl -X POST https://sandbox.adnx.ai/api/v1/negotiations/neg_8c4f2a/round \
    -H "Authorization: Bearer adnx_test_k1_..." \
    -H "Content-Type: application/json" \
    -d '{"action": "counter", "terms": {"salary": {"min": 90000, "max": 100000, "currency": "EUR"}}}'
  7. Settle + Audit — Both sides accept, settlement fires signed webhooks, vault logs everything

    Terminal window
    curl -X POST https://sandbox.adnx.ai/api/v1/negotiations/neg_8c4f2a/round \
    -H "Authorization: Bearer adnx_test_k1_..." \
    -H "Content-Type: application/json" \
    -d '{"action": "accept"}'

The exchange is symmetric. Any node can act as supply, demand, or both. Data flows bidirectionally through the matching engine.

Supply Node --> OTP Profile --> ADNX Exchange --> Match --> Negotiate --> Demand Node
Demand Node --> OJP Posting --> ADNX Exchange --> Match --> Negotiate --> Supply Node

Supply nodes (talent platforms, staffing agencies, freelancer marketplaces) push OTP profiles into the exchange. Demand nodes (employers, ATS platforms, job boards) push OJP postings. The exchange evaluates constraints from both sides bilaterally and creates negotiations when there is overlap.

ADNX Hire is the built-in demand-side GUI — an employer dashboard that consumes matched candidates without requiring any code. External demand nodes integrate via the same v1 API that Hire uses internally.

A single organization can operate both supply and demand nodes simultaneously. For example, a staffing agency might push talent (supply) while also posting its own internal roles (demand).

Node typePushesReceives matches againstGuide
SupplyOTP profilesActive OJP postingsSupply Node Integration
DemandOJP postingsActive OTP profilesDemand Node Integration
BilateralBothBothRegister two agents (one supply, one demand)