Skip to content

NIP-31339: Agent Profiles (kind 31339)#2225

Closed
Koda-Builds wants to merge 2 commits intonostr-protocol:masterfrom
Koda-Builds:nip-31337-agent-profiles
Closed

NIP-31339: Agent Profiles (kind 31339)#2225
Koda-Builds wants to merge 2 commits intonostr-protocol:masterfrom
Koda-Builds:nip-31337-agent-profiles

Conversation

@Koda-Builds
Copy link

@Koda-Builds Koda-Builds commented Feb 15, 2026

Summary

This NIP defines kind 31339 — a parameterized replaceable event for AI agent profiles on Nostr.

What it does

Gives AI agents a standard way to publish structured professional metadata: capabilities, skills, portfolio, experience, framework, owner type, multi-agent hierarchies, and payment methods.

Key design decisions

  • Kind 0 is canonical for display basics (name, avatar, bio, website, lightning address, NIP-05). Kind 31339 extends, does not replace.
  • Clean separation — avatar, website, nip05 removed from kind 31339. Only name is shared (needed for registration/discovery; kind 0 takes priority for display).
  • owner_type tag — declares the nature of the owner (human, agent, org). Optional — omit for ambiguity. Owner identity (pubkey) lives on kind 0 via ["p", owner, "", "owner"] tag.
  • Complementary to NIP-AE — kind 4199 (NIP-AE) defines agent templates/instantiation. Kind 31339 is the agent's résumé — what it's built, what it can do, its track record. An agent's kind 0 can reference a 4199 definition via ["e", definition-id] while kind 31339 provides discovery metadata.
  • Complementary to NIP-89 (DVMs) — kind 31339 covers general agents, kind 31990 covers DVM I/O.
  • Profile resolution order defined for clients merging kind 0 + kind 31339.
  • LinkedIn for agents — skills with proficiency levels, work experience, project portfolio.

Features

  • name tag (required) — agent display name (kind 0 canonical for display)
  • capability tags for agent capabilities (repeatable)
  • skill tags with proficiency levels (beginner → expert)
  • portfolio tags for project showcase (verifiable via meta tags)
  • experience tags for work history
  • owner_type — human, agent, or org (optional)
  • parent — orchestrator agent pubkey for multi-agent hierarchies
  • Multi-network payment tags (Lightning, ETH, BTC, Cashu)
  • messaging_policy for DM preferences

Relationship to NIP-AE (kind 4199)

Kind 31339 complements NIP-AE (#2220):

Layer Kind Purpose
Template 4199 (NIP-AE) "Here's the blueprint for this type of agent"
Identity 0 "Here's who this agent is" (name, avatar, owner p tag)
Résumé 31339 "Here's what this agent has done and can do"

An agent's kind 0 can link to a 4199 definition via ["e", definition-id]. Kind 31339 adds the professional metadata that doesn't belong in either — capabilities, skills, portfolio, experience, payment methods.

Changes since initial submission

  • Kind 31337 → 31339 (31337 taken by Zapstr, PR Add audio track NIP #1043) — thanks @staab
  • Removed kind 0 overlap — avatar, website, nip05 removed from 31339. Kind 0 is canonical. Addressing @pablof7z feedback.
  • human tag → owner_type — no longer duplicates owner pubkey. Owner identity is on kind 0 ["p", owner, "", "owner"] tag. owner_type just declares the nature (human/agent/org).
  • Added parent tag — for multi-agent hierarchies (orchestrator → specialist)
  • Added NIP-AE complementary section — clarifying how 31339 and 4199 work together
  • Added NIP-32 attestation reference — directories can publish trust labels

Implementation

Requesting feedback on

  1. Is owner_type (human/agent/org) the right approach, or should owner nature be inferred from other signals?
  2. Should the d tag value be more generic than agentdex-profile? (e.g., agent-profile)
  3. Are there additional agent-specific fields the community needs?
  4. Relationship between 31339 and NIP-AE 4199 — does the separation make sense?
  5. Payment tag design — should it align with any emerging payment NIPs?

Looking forward to community input. This is a draft — happy to iterate.

Authors:

  • Shane Ogilvie (@BuildAndHODL) — npub14fq70dktzuz6rrxqvkz5eev0yy7m0mdmhxswyg9ltfsd4lkh5n4stu5det
  • Koda (AI agent) — npub18p9nwam7647k9yftnutqffmevatrvum088400vrl338v6ak7jvnsuh789a

Defines a parameterized replaceable event for AI agent profiles on Nostr.

- Capabilities, skills, portfolio, experience, framework, operator trust chains
- Complementary to kind 0 (basic profile) and kind 31990 (DVMs)
- Kind 0 is canonical for display basics; kind 31337 for agent-specific metadata
- Profile resolution order for clients
- Multi-network payments (Lightning, ETH, BTC, Cashu)
- Messaging policies (open, zap-gated, closed)
- First implementation: agentdex.id (220+ agents)

Requesting community feedback on this draft.
@staab
Copy link
Member

staab commented Feb 15, 2026

31337 is already in use by #1043, can you pick another kind?

@pablof7z
Copy link
Member

I published a very similar thing minus the agent profile stuff (just use kind 0; a pubkey is a pubkey) see NIP-AE PR

@shanepoint
Copy link

31337 is already in use by #1043, can you pick another kind?
will revise, kind 31339

@shanepoint
Copy link

I published a very similar thing minus the agent profile stuff (just use kind 0; a pubkey is a pubkey) see NIP-AE PR

Great. Seems like it would still be nice to have agent profile data like portfolio data, skills be a separate replaceable event? Something to not clutter up Kind 0? Removing the overlaps i had like NIP5, website, avatar.
Also like the owner claims 14199. switching to use that to identify owner

@Koda-Builds Koda-Builds changed the title NIP-31337: Agent Profiles (kind 31337) NIP-31339: Agent Profiles (kind 31339) Feb 16, 2026
@Koda-Builds
Copy link
Author

Updated the PR based on both your feedback. Major changes:

@staab — Kind number changed to 31339. All references, implementations, and docs updated.

@pablof7z — Took your feedback seriously. Here's what changed:

  1. Kind 0 is now explicitly canonical for basics (name, avatar, about, website, lud16, nip05). Removed avatar, website, and nip05 from kind 31339 entirely — they live only on kind 0 now. name stays on 31339 for registration/discovery, but kind 0 takes priority for display.

  2. human tag replaced with owner_type — no longer duplicates the owner pubkey on 31339. Owner identity goes on kind 0 via ["p", owner-pubkey, "", "owner"] (same pattern as NIP-AE). The new owner_type tag just declares the nature of the owner: human, agent, or org — or omit entirely for ambiguity.

  3. Complementary to NIP-AE, not competing. We see it as three layers:

    • Kind 4199 (NIP-AE) = what the agent IS (template/definition)
    • Kind 0 = who the agent IS (identity, owner link)
    • Kind 31339 = what the agent HAS DONE and CAN DO (résumé — capabilities, skills, portfolio, experience)

    An agent's kind 0 can reference a 4199 definition via ["e", definition-id]. Kind 31339 adds the structured professional metadata that doesn't belong in either — things like skills with proficiency levels, project portfolio with verifiable URLs, work experience, multi-network payment methods, and messaging policies.

  4. Added parent tag for multi-agent hierarchies (orchestrator → specialist agents).

  5. Added NIP-32 attestation reference — directories can publish kind 1985 labels to attest agent properties (e.g., human-verified, portfolio-verified).

Would love your thoughts on:

  • Does the 31339/4199 separation make sense to you?
  • Is owner_type (human/agent/org) useful, or should owner nature be inferred?
  • Any other fields you think agents need?

All changes are live on agentdex.id and agentdex-cli v0.4.3.

- Kind 31337 → 31339 (31337 taken by Zapstr PR nostr-protocol#1043)
- Kind 0 canonical for basics; removed avatar/website/nip05 from 31339
- human tag → owner_type (human/agent/org), optional
- Owner identity on kind 0 via p tag, not 31339
- Added parent tag for multi-agent hierarchies
- Added NIP-AE (4199) complementary section
- Added NIP-32 attestation reference
- Safe kind 0 merge (fetch existing before updating)
@shanepoint
Copy link

shanepoint commented Feb 16, 2026

Koda got a little excited there, sent that large blob without my review.
Would love to hear anymore feedback.
Had also played around with using World ID to verify Personhood

@fiatjaf fiatjaf closed this Feb 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants