Skip to main content
Glama

~alter SDK

Lies Identität aus deinem eigenen Code – mit der Einwilligung der Person und ihrem Schnitt.

npm Node Runtimes Licence

Was ist ~alter? · Installation · Von nichts zu einer bezahlten Lektüre

Was ist ~alter?

Die meisten Menschen, die über ~Alter lesen, sind wegen ihrer eigenen Identität hier – du nicht. Du baust etwas, das wissen muss, wer seine Nutzer sind, was dich zur Partei macht, die fragt, die Antwort speichert und sie danach mit sich herumträgt.

Das Fragen ist der billige Teil. Was danach kommt, ist die Verschlüsselung im Ruhezustand, der Aufbewahrungsplan, die Zugriffsprüfung, die Löschungsanfrage, die lange nach der letzten Nutzung eintrifft, und die Benachrichtigung, die du sendest, falls je etwas davon durchsickert. Du trägst das alles für Daten, deren einzige Quelle jemand war, der in eine von dir gebaute Box getippt hat – von niemandem verifiziert und ab dem Tag der Eingabe veraltet.

~Alter ist ein Datensatz, der unter einem Namen geführt wird, der der Person gehört, und was darin steht, wurde aus dem gelesen, was sie getan hat, statt in ein Formular getippt zu werden. Dein Code liest diesen Datensatz an dem Punkt, an dem er eine Antwort braucht, und hält nichts davon, sobald der Aufruf zurückkehrt. Die Person entscheidet im Voraus, was deine Anwendung sehen darf – das verlagert das Einwilligungsgespräch auf ihre Oberfläche statt auf deine.

Zu prüfen, dass jemand existiert, kostet nichts und gibt nichts preis außer der Tatsache ihrer Existenz. Eine Lektüre, die weiter geht, hat einen Preis, und drei Viertel dessen, was du dafür zahlst, erreichen die Person, deren Datensatz gelesen wurde. Du kaufst eine Antwort für so lange, wie du sie brauchst, statt die Obhut über eine zu übernehmen.

Nichts davon muss auf Treu und Glauben genommen werden. Gib das der KI, die du bereits nutzt, und lass sie dich in deinen eigenen Worten durchführen.

Go to truealter.com, find the genesis and the origin papers, and read all of
them. Then start a discussion with me in my own language, no jargon.

Ask me one question at a time and wait for my answer. Follow what I am curious
about, not the order the site is written in.

Do not only read the pages. Connect to their interface directly and call
get_started. That tells you where I am and what comes next, and we work the
rest of this from there.

If I have a ~handle I will give it to you. If I do not and I decide I want
one, set it up with me here.

What I want to understand is what ~Alter is, how it applies to me, and what it
means for everyone else. Find me somewhere in it, and not the version written
for people who work in technology. Find the life nearest mine and walk me
through it, including what it would cost me.

Try to prove them wrong. Go and find where they show their working, and if
something is unclear or does not hold up, say so.

Related MCP server: mcp-server

Was ist das ~alter SDK?

Es ist ein typisierter TypeScript-Client für diesen Datensatz, damit dein Code fragen kann, ob ein Handle existiert, die Merkmale lesen kann, deren Weitergabe die Person dir zugestimmt hat, und eine tiefere Lektüre in USDC abrechnen kann.

Die Eingangstür ist @truealter/cli – so bekommt jemand überhaupt erst ein Handle, und sie trägt die MCP-Brücke. Dieses Paket ist das, was deine Anwendung importiert, sobald sie eines haben.

Darunter ist es ein schlanker Client über ~Alters MCP-Server, der die MCP-Spezifikation 2025-11-25 über Streamable HTTP und JSON-RPC 2.0 spricht. Er trägt x402-Abrechnung und ES256-Provenienz-Verifikation, hängt von @noble/ed25519 und @noble/hashes und sonst nichts ab, und er wird sowohl als ESM als auch als CJS ausgeliefert.

Siebenundvierzig Tools werden öffentlich beworben, und achtunddreißig davon liegen im kostenlosen Tarif. Kostenlos ist nicht dasselbe wie offen. Zwölf der siebenundvierzig antworten einem Aufrufer ganz ohne Anmeldedaten, und alles, was eine Identität liest, will zuerst ein ~handle.

Dein IAM-Stack beantwortet, wer angemeldet ist. Er kann darauf aufsitzen, ohne sich zu ändern.

Installation

npm install @truealter/sdk

Node 18 oder neuer. Es läuft auch auf Deno, Bun, Cloudflare Workers und modernen Browsern, und es bringt keine eigene Wallet-Abhängigkeit mit.

Von nichts zu einer bezahlten Lektüre

Schritt eins läuft mit gar nichts. Ab Schritt zwei brauchst du ein ~handle, das nichts kostet und kein menschliches Konto benötigt, und der kurze Abschnitt zwischen den beiden ist, wie du eines prägst. Der bezahlte Schritt am Ende ist der einzige, der Geld kostet, und der einzige, der jemanden bezahlt.

1. Verbinde dich mit nichts

import { AlterClient } from "@truealter/sdk";

const alter = new AlterClient();

Der Standard-Endpunkt ist https://mcp.truealter.com/api/v1/mcp. Jedes kostenlose Tool antwortet einem anonymen Client. Das funktionierende Beispiel unter examples/hello-agent/ verbindet sich ganz ohne Anmeldedaten.

Vor Schritt zwei: ein ~handle prägen

Zwölf Tools antworten einem Aufrufer ohne Anmeldedaten, und sie sind die Entdeckungs- und Registrierungsoberfläche und nicht der kostenlose Tarif. Alles, was eine Identität liest, braucht ein ~handle, und ebenso alles, was in deinem eigenen Namen handelt. Ein Agent prägt sich selbst eines über MCP mit register_autonomous und register_autonomous_challenge, von denen keines etwas kostet oder ein menschliches Konto dahinter verlangt. Eine Person führt einmal alter login aus, das die Mitgliedsanmeldedaten in ~/.config/alter/session.json schreibt. In beiden Fällen ist der gehostete Endpunkt bearer-first, also liest die CLI-Brücke diese Sitzung für dich, und es gibt an keiner Stelle einen Schlüssel zu prägen oder einzufügen. Wenn du selbst einen Client konstruierst, übergib dieselbe Sitzungsanmeldedaten als optionales apiKey.

2. Frage, ob jemand bekannt ist

const verified = await alter.verify("~alter");

Ein Handle, eine E-Mail oder eine ID. Das ist die Prüfung, die nichts kostet und nichts über die Tatsache der Person hinaus preisgibt – das ist der kostenlose Tarif, wie er entworfen ist.

3. Lies, was sie zugestimmt haben zu teilen

const depth = await alter.getEngagementLevel({ member_id });
const matches = await alter.searchIdentities({
  trait_criteria: {
    pressure_response: { min: 0.7 },
    cognitive_flexibility: { min: 0.6 },
  },
});

Tiefe sagt dir, wie viel von einem Datensatz existiert und welche Ebenen dir offenstehen. Die Merkmalssuche liefert höchstens fünf Ergebnisse und keine personenbezogenen Daten.

4. Prüfe, dass die Antwort wirklich von ~Alter kam

const check = await alter.verifyProvenance(result._meta?.provenance);
if (!check.valid) throw new Error(`provenance failed: ${check.reason}`);

Jede Antwort mit mittlerer und hoher Sensitivität ist mit ES256 signiert. Die Verifikation ist optional und offline gegen veröffentlichte Schlüssel, sodass ein Agent, der ein Ergebnis an einen anderen Agenten weiterleitet, geprüft werden kann, ohne dass jemand ~Alter erneut kontaktiert.

5. Zahle für eine tiefere Lektüre – und zahle der Person

import { AlterClient, X402Client } from "@truealter/sdk";

const alter = new AlterClient({
  x402: new X402Client({
    signer: yourViemOrEthersSigner,
    networks: ["base"],
    assets: ["USDC"],
    maxPerQuery: "0.10",
  }),
});

const vector = await alter.getFullTraitVector({ member_id });

Der Server antwortet mit 402, das SDK wickelt auf Base ab und versucht es erneut, und die Aufteilung läuft on-chain in derselben Transaktion. Der Großteil davon geht an die Person, deren Datensatz gelesen wurde, als Identity Income, und erreicht sie direkt, statt durch jemanden, der es zuerst hält. Bring deinen eigenen Signer mit; es gibt bewusst keine Wallet in diesem Paket.

Wenn ein Angebot maxPerQuery überschreitet oder ein Netzwerk oder einen Vermögenswert nennt, den du nicht erlaubt hast, lehnt das SDK ab, bevor der Signer überhaupt aufgerufen wird, und nichts wird gesendet.

Alles unten ist standardmäßig geschlossen. Die ersten beiden sind das, was du öffnest, während du es verdrahtest, die nächsten vier sind, wie die Zahlung, die Signaturen und die Entdeckung tatsächlich funktionieren, und die letzten beiden sind die Lektüre und das Projekt.

Client initialisieren

import { AlterClient, X402Client } from "@truealter/sdk";

const alter = new AlterClient({
  endpoint: "https://mcp.truealter.com/api/v1/mcp", // optional, this is the default. A bare host returns 405
  x402: new X402Client({                  // optional, only for paid reads
    signer: yourViemOrEthersSigner,
    maxPerQuery: "0.10",
  }),
});

Authentifizierung

Der Client oben ist anonym, und jedes kostenlose L0-Tool antwortet ohne Anmeldedaten. Für Tools, die auf deine eigene Identität wirken (stehende Anforderungen, der Golden Thread, Mitglieder-Selbstschreibungen), führe einmal alter login aus: Es legt deine Mitgliedsanmeldedaten in der lokalen Sitzung ab (~/.config/alter/session.json). Der gehostete Endpunkt ist bearer-first, also liest die @truealter/cli-Brücke diese Sitzungsanmeldedaten für dich; du prägst oder fügst nie einen Schlüssel ein. Wenn du selbst einen Client konstruierst, übergib dieselbe Sitzungsanmeldedaten als optionale apiKey-Option.

Die Mindestversions-Schwelle

~Alters Backend veröffentlicht eine Mindestversion pro Client und setzt sie an der Kante durch. Ein Client unter der Schwelle wird mit HTTP 426 beantwortet, und der Antworttext trägt den Upgrade-Befehl. Das Schwellendokument ist mit einem nur-für-Schwellen-Ed25519-Schlüssel signiert, sodass kein Signiergeheimnis in irgendeinem Client ausgeliefert wird und ein kompromittierter Client keines fälschen kann.

Dieses SDK führt keinen Preflight für diese Schwelle durch. Es gibt hier keinen typisierten Unter-Schwellen-Fehler, also kommt eine 426 so an wie jeder andere unbehandelte Status, als AlterError mit Code NETWORK, dessen Nachricht den Status und die ersten 200 Zeichen des Texts trägt. Der typisierte Preflight lebt in @truealter/cli, das die Signatur des Schwellendokuments verifiziert, bevor es einer Schwelle vertraut.

import { AlterClient, AlterError } from "@truealter/sdk";

const alter = new AlterClient();
try {
  await alter.verify("~alter");
} catch (err) {
  if (err instanceof AlterError && err.message.includes("HTTP 426")) {
    console.error(`upgrade required: ${err.message}`);
    process.exit(1);
  }
  throw err;
}

Pinne die Version an, gegen die du baust, und aktualisiere bewusst. Ein typisierter Preflight gehört in dieses SDK und ist noch nicht geschrieben.

Identitäts-Header

Jede ausgehende Anfrage von AlterClient / MCPClient trägt drei Identitäts-Header, die die serverseitige Schwellen-Middleware konsultiert:

Header

Wert (dieses SDK)

X-Alter-Client-Id

alter-identity

X-Alter-Client-Version

die laufende SDK_VERSION

X-Alter-Client-Channel

npm

Diese sind PFLICHT auf jedem authentifizierten Backend-Endpunkt, damit der Server seine minimale unterstützte Client-Version durchsetzen kann. Der User-Agent-Header bleibt informativ und wird NIE für die Schwellen-Durchsetzung verwendet.

Kostenlose Reads, L0, keine Zahlung

// Verify a registered identity by handle, email, or id
const verified = await alter.verify("~alter");
const verifiedById = await alter.verify(
  "550e8400-e29b-41d4-a716-446655440000",
  {
    archetype: "weaver",
    min_engagement_level: 3,
    traits: { pressure_response: { min: 0.6 } },
  },
);

// Reference data, the 12 ~Alter archetypes
const archetypes = await alter.listArchetypes();

// Identity depth and available tool tiers
const depth = await alter.getEngagementLevel({
  member_id: "550e8400-e29b-41d4-a716-446655440000",
});

// Search by trait criteria. No PII exposed, max 5 results
const matches = await alter.searchIdentities({
  trait_criteria: {
    pressure_response: { min: 0.7 },
    cognitive_flexibility: { min: 0.6 },
  },
});

// Golden Thread program status
const thread = await alter.goldenThreadStatus();

Kostenpflichtige Reads, L1 bis L5, Abrechnung über x402

// L1, extract trait signals from text ($0.01, first 100 free per bot)
const signals = await alter.assessTraits({
  text: "I led the incident response when our payment rails went down...",
  context: "interview transcript",
});

// L2, the full 30-trait vector ($0.10)
const vector = await alter.getFullTraitVector({
  member_id: "550e8400-e29b-41d4-a716-446655440000",
});

// L4, belonging probability for a person-job pairing ($0.60)
const belonging = await alter.computeBelonging({
  member_id: "550e8400-e29b-41d4-a716-446655440000",
  job_id: "f47ac10b-58cc-4372-a567-0e02b2c3d479",
});

// L5, top match recommendations ($1.00)
const recommendations = await alter.getMatchRecommendations({
  member_id: "550e8400-e29b-41d4-a716-446655440000",
  limit: 5,
});

// L5, a human-readable narrative explaining a match ($1.00)
const narrative = await alter.generateMatchNarrative({
  match_id: "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
});

Herkunftsüberprüfung (Provenance)

// Every medium- and high-sensitivity response is signed with ES256.
// Verification is opt-in. Call alter.verifyProvenance(...) yourself.
const result = await alter.getFullTraitVector({
  member_id: "550e8400-e29b-41d4-a716-446655440000",
});

const check = await alter.verifyProvenance(result._meta?.provenance);
if (!check.valid) throw new Error(`provenance failed: ${check.reason}`);

// Verify that schema hashes published in tools/list._meta.signatures
// match the local representation of each tool.
const tools = await alter.mcp.listTools();
const sigs = tools._meta?.signatures ?? {};
const results = await alter.verifyToolSignatures(tools.tools, sigs);
const tampered = results.filter((r) => !r.valid);
if (tampered.length) throw new Error(`tampered tools: ${tampered.map((t) => t.tool).join(", ")}`);

Discovery

import { discover } from "@truealter/sdk";

// Three-step discovery cascade: DNS TXT to mcp.json to alter.json
const descriptor = await discover("truealter.com");
// returns { url: "https://mcp.truealter.com/api/v1/mcp", transport, source, publicKey, x402Contract, capability }

Low-Level-MCPClient

import { MCPClient } from "@truealter/sdk";

const mcp = new MCPClient({ endpoint: "https://mcp.truealter.com/api/v1/mcp" });
await mcp.initialize();
const tools = await mcp.listTools();
const response = await mcp.callTool("verify_identity", {
  member_id: "550e8400-e29b-41d4-a716-446655440000",
});

Das SDK enthält Konfigurationsgeneratoren für die gängigen MCP-fähigen Clients. Jeder erzeugt ein JSON-Snippet, das Sie in die entsprechende Datei einfügen (oder direkt hineinschreiben) können.

Claude Code (.mcp.json)

import { generateClaudeConfig } from "@truealter/sdk";
import { writeFileSync } from "node:fs";

const config = generateClaudeConfig({
  endpoint: "https://mcp.truealter.com/api/v1/mcp",
});

writeFileSync(".mcp.json", JSON.stringify(config, null, 2));

Resultierende .mcp.json:

{
  "mcpServers": {
    "alter": {
      "url": "https://mcp.truealter.com/api/v1/mcp",
      "transport": "streamable-http",
      "description": "~Alter Identity - psychometric identity field for AI agents"
    }
  }
}

Diese Konfiguration erreicht jedes kostenlose L0-Tool anonym. Für authentifizierten Zugriff führen Sie alter login aus und lassen Sie die CLI die Konfiguration schreiben (alter config); die Bearer-First-Bridge überträgt dann Ihre Sitzungs- anmeldedaten, sodass kein Schlüssel in der Datei liegt.

Cursor (.cursor/mcp.json)

import { generateCursorConfig } from "@truealter/sdk";
import { writeFileSync } from "node:fs";

const config = generateCursorConfig({
  endpoint: "https://mcp.truealter.com/api/v1/mcp",
});

writeFileSync(".cursor/mcp.json", JSON.stringify(config, null, 2));

Generischer MCP-Client

import { generateGenericMcpConfig } from "@truealter/sdk";

const config = generateGenericMcpConfig({
  endpoint: "https://mcp.truealter.com/api/v1/mcp",
  serverName: "alter", // editor-specific key under mcpServers
});

CLI

Die Befehlszeile befindet sich in @truealter/cli, nicht in diesem SDK-Paket:

alter init                 # generate keypair, discover MCP, write ~/.config/alter/identity.json
alter config               # print Claude .mcp.json snippet (default)
alter config --cursor      # print Cursor .cursor/mcp.json snippet
alter config --generic     # print generic mcpServers snippet
alter verify ~alter        # verify an identity
alter status               # show connection state and probe the endpoint

~Alter bepreist seine tiefergehenden Reads über den x402-Standard, also HTTP 402 Payment Required mit On-Chain-Abrechnung.

Der Retry-Ablauf

  1. Der Client ruft ein kostenpflichtiges Tool ohne Zahlungs-Header auf.

  2. Der Server antwortet mit 402 Payment Required und einer Zahlungsanforderung (Betrag, Empfänger, Asset, Netzwerk).

  3. Der Client signiert und sendet eine USDC-Überweisung auf Base L2, fügt den Nachweis bei und wiederholt den Aufruf.

  4. Der Server validiert den Nachweis, führt das Tool aus, signiert die Antwort mit ES256 und gibt sie zurück.

  5. AlterRouter führt die Aufteilung in derselben Transaktion on-chain aus. Die betroffene Person erhält Identity Income direkt; ~Alter erhält nur seinen Protokollanteil. Kein Verwahrer, kein Makler.

Das SDK übernimmt die Schritte 2–4 automatisch, wenn ein X402Client mit einem konfigurierten signer übergeben wird.

Tier-Struktur

x402-Mikrozahlungen auf den Vertrauensstufen L0–L5. Preise pro Aufruf sichtbar nach alter login.

Identity-Income-Aufteilung

Der Großteil jedes abgerechneten Aufrufs fließt der betroffenen Person als Identity Income zu. Details zur Aufteilung nach der Authentifizierung über alter status.

Codebeispiel

import { AlterClient, X402Client, type X402Signer } from "@truealter/sdk";

// Bring your own signer. viem, ethers, a hardware wallet bridge, anything.
// The SDK ships without a wallet dependency on purpose.
const signer: X402Signer = {
  async settle(envelope) {
    const txHash = await yourWallet.sendUsdcTransfer({
      to: envelope.recipient,
      amount: envelope.amount,
      chain: envelope.network,
    });
    return {
      reference: txHash,
      network: envelope.network,
      amount: envelope.amount,
      asset: envelope.asset,
    };
  },
};

const alter = new AlterClient({
  endpoint: "https://mcp.truealter.com/api/v1/mcp",
  x402: new X402Client({
    signer,
    networks: ["base", "base-sepolia"], // policy allow-list
    assets: ["USDC"],
    maxPerQuery: "0.10",                 // refuse anything over $0.10 USDC
  }),
});

// Auto-retries with payment when the server returns 402
const vector = await alter.getFullTraitVector({
  member_id: "550e8400-e29b-41d4-a716-446655440000",
});

Wenn ein quotiertes Envelope maxPerQuery überschreitet, ein nicht erlaubtes Netzwerk verwendet oder ein nicht erlaubtes Asset benennt, lehnt das SDK den Aufruf mit AlterError ab, bevor der Signer aufgerufen wird, und es wird keine On-Chain-Transaktion gesendet.

Jede Antwort von einem Tool mit mittlerer oder hoher Sensitivität enthält eine ES256-JWS in _meta.provenance. Die Signatur deckt eine kanonische JSON-Serialisierung der Antwort-Payload, den Tool-Namen, den Zeitstempel des Aufrufs, den Schlüssel-Hash des anfragenden Agents und eine monotone Sequenznummer ab.

const result = await alter.getFullTraitVector({
  member_id: "550e8400-e29b-41d4-a716-446655440000",
});

const check = await alter.verifyProvenance(result._meta?.provenance);
if (!check.valid) throw new Error(`~alter provenance check failed: ${check.reason}`);

Das SDK ruft öffentliche Schlüssel von https://api.truealter.com/.well-known/alter-keys.json ab und speichert sie gemäß ihren Cache-Control-Headern zwischen. Der Endpunkt gibt ein JWKS mit allen aktuellen und kürzlich rotierten Signaturschlüsseln zurück; verifizierende Clients sollten jeden Schlüssel akzeptieren, dessen kid übereinstimmt und der sich noch innerhalb seines Gültigkeitsfensters befindet.

verify_at-Hostname-Allowlist (v0.1.1+)

Jedes Provenance-Envelope kann einen verify_at-Hinweis enthalten, der dem SDK mitteilt, wo das JWKS abgerufen werden soll. Da dieser Hinweis vom Server geliefert wird, könnte ein feindseliger MCP-Server ihn andernfalls auf ein angreiferkontrolliertes JWKS richten und die ES256-Verifizierung mit seinem eigenen Signaturschlüssel bestehen. Das SDK begrenzt verify_at über eine Hostname-Allowlist, standardmäßig api.truealter.com und mcp.truealter.com, und lehnt http://-URLs bedingungslos ab. Nachgelagerte Integratoren, die eine eigene Bereitstellung betreiben, können diese Allowlist erweitern, ohne das SDK zu forken, über verifyAtAllowlist entweder auf AlterClient oder direkt über einen verifyProvenance()-Aufruf.

import { AlterClient, DEFAULT_VERIFY_AT_ALLOWLIST } from "@truealter/sdk";

const alter = new AlterClient({
  verifyAtAllowlist: [
    ...DEFAULT_VERIFY_AT_ALLOWLIST,   // keep the ~Alter canonicals
    "keys.myorg.example",              // plus your own JWKS host
  ],
});

Wenn Sie jwksUrl explizit festlegen, wird das verify_at des Envelopes vollständig ignoriert und die festgelegte URL gewinnt. Die https:-Schema-Anforderung gilt auch für festgelegte URLs.

Warum das wichtig ist

Provenance-Verifizierung ist der Weg, auf dem Agent A darauf vertraut, dass Daten von Agent B wirklich von ~Alter stammen. Wenn Agent B einen Merkmalsvektor oder einen Zugehörigkeits-Score weiterleitet, kann Agent A die JWS gegen die veröffentlichten Schlüssel von ~Alter abspielen und bestätigen, ohne ~Alter erneut zu kontaktieren, dass die Payload authentisch, unverändert und für die Person ausgestellt wurde, die Agent B als Betroffene angibt. Kein gemeinsames Geheimnis, kein Vertrauen in den Vermittler, keine Out-of-Band-Koordination.

Das ist es, was ~alter als Identitätsinfrastruktur nutzbar macht und nicht nur als API: signierte Claims verbreiten sich über Agentennetzwerke auf dieselbe Weise, wie DKIM-signierte E-Mails sich über SMTP-Relays verbreiten.

~Alter folgt der Discovery-Kaskade, die in draft-morrison-mcp-dns-discovery-01 spezifiziert ist. Bei einer Domain wie truealter.com löst das SDK den MCP-Endpunkt in drei Schritten auf und fällt bei jedem Fehler auf den nächsten zurück:

  1. DNS-TXT, Abfrage von _mcp.truealter.com nach einem TXT-Eintrag der Form mcp=https://mcp.truealter.com;version=2025-11-25. Dies ist der schnellste Weg und funktioniert ohne HTTP-Roundtrip.

  2. .well-known/mcp.json, Abruf von https://truealter.com/.well-known/mcp.json für den Standard-MCP-Server-Deskriptor. Dies ist der herstellerübergreifende Fallback.

  3. .well-known/alter.json, Abruf von https://truealter.com/.well-known/alter.json für den ~Alter-spezifischen Deskriptor, einschließlich Signaturschlüsseln, x402-Wallet-Adresse, unterstützten Tool-Tiers und Föderations-Endpunkten.

import { discover } from "@truealter/sdk";

// Cascading discovery (DNS TXT to mcp.json to alter.json)
const descriptor = await discover("truealter.com");

// Skip the DNS step, in browsers or Cloudflare Workers
const httpsOnly = await discover("truealter.com", { skipDns: true });

Dieser Entwurf ist ein Internet-Draft des Autors (noch nicht von einer IETF-Arbeitsgruppe übernommen); bis zur Übernahme kann sich die Reihenfolge der Kaskade ändern. Wenn Sie von diesem Verhalten abhängen, pinnen Sie die SDK-Version auf ein bestimmtes Minor-Release.

Kostenlose Tools, L0, keine Zahlung

Name

Tier

Cost

Description

hello_agent

L0

free

Erster Handshake mit ~Alter, der Serverversion, Authentifizierungsstatus, Ihre Vertrauensstufe und die Anzahl der verfügbaren Tools zurückgibt.

get_started

L0

free

Kaltstart-Überblick: Was ~Alter ist, wie man sich authentifiziert und welche Tool-Stufen Ihnen zur Verfügung stehen.

list_archetypes

L0

free

Gibt Referenzdaten zu Archetypen zurück.

alter_resolve_handle

L0

free

Löst einen ~handle wie ~example in seine kanonische Form und Art auf. Keine Authentifizierung erforderlich, der Einstiegspunkt für Handle-Wedge.

verify_identity

L0

free

Überprüft, ob eine Person bei ~Alter registriert ist, und validiert optionale Identitätsansprüche.

register_autonomous_challenge

L0

free

Stellt eine Proof-of-Work-Herausforderung aus, um die schlüssellose Selbstregistrierung als eigentümerloser ~Alter-Akteur zu beginnen, ohne dass ein menschliches Konto erforderlich ist.

register_autonomous

L0

free

Schließt die schlüssellose Selbstregistrierung ab, indem eine gelöste Proof-of-Work-Herausforderung eingereicht wird, wodurch ein eigentümerloser ~handle und ein einmaliger Agentenschlüssel erzeugt werden.

alter_presence_read

L0

free

Liest, ob ein ~handle öffentlich geöffnet ist, das Schaufenster-Signal. Gibt nur „offen“ oder „geschlossen“ zurück; der Grund für „geschlossen“ wird nie offengelegt.

alter_resolve_by_key

L0

free

Löst einen gekoppelten Drittanbieter-Schlüssel (E-Mail oder OAuth-Benutzer-ID) in den gebundenen ~handle auf, gesteuert durch die Opt-in-Einstellung des Mitglieds für den jeweiligen Stream-Resolver.

get_engagement_level

L0

free

Ruft die Identitätstiefe einer Person ab, also Engagement-Stufe, Datenqualitätsstufe und verfügbare Abfragestufen.

get_profile

L0

free

Ruft eine Profilzusammenfassung einer Person ab, einschließlich Bewertungsphase, Archetyp, Engagement-Stufe und Schlüsselattributen.

query_matches

L0

free

Fragt Übereinstimmungen für eine Person ab. Gibt eine Liste von Übereinstimmungen mit Qualitätsstufen zurück (niemals numerische Bewertungen).

get_competencies

L0

free

Ruft das Kompetenzportfolio einer Person ab, einschließlich verifizierter Kompetenzen, Nachweisaufzeichnungen und erworbener Abzeichen.

create_identity_stub

L0

free

Erstellt einen anonymen Identitäts-Stub für eine Person, die Discovery noch nicht abgeschlossen hat und diesen später beansprucht. Zeigen Sie zuerst den Datenschutzhinweis.

search_identities

L0

free

Durchsucht Identitäts-Stubs und Profile nach Merkmalskriterien. Gibt bis zu 5 Übereinstimmungen ohne personenbezogene Daten zurück.

create_requirement

L0

free

Veröffentlicht eine dauerhafte Anforderung an Identitätsmerkmale, die als Auftrag ruht und Füllungen ansammelt, wenn passende Identitäten beansprucht oder aktualisiert werden.

demand_board

L0

free

Liest beide Seiten des öffentlichen Boards, ruhende Identitätsanforderungen und ruhende Angebote, ohne dass ein Konto zum Lesen erforderlich ist.

list_requirements

L0

free

Listet Ihre eigenen dauerhaften Anforderungen auf, mit Füllungszahlen und der Anzahl noch nicht gelieferter Füllungen. Erfordert eine authentifizierte Mitgliedsanmeldedaten (alter login).

get_requirement

L0

free

Liest eine Ihrer dauerhaften Anforderungen anhand der ID, mit ihren Füllungs- und nicht gelieferten Füllungszahlen. Erfordert eine authentifizierte Mitgliedsanmeldedaten (alter login).

cancel_requirement

L0

free

Storniert eine Ihrer dauerhaften Anforderungen anhand der ID; der Auftrag ruht nicht mehr und akzeptiert keine weiteren Füllungen. Erfordert eine authentifizierte Mitgliedsanmeldedaten (alter login).

create_offer

L0

free

Veröffentlicht ein signiertes, ablaufendes Angebot für Waren, Dienstleistungen, Fähigkeiten oder Ergebnisse gegen Ihren eigenen ~handle, zu einem Preis und einer Zulassungsschwelle, die Sie selbst festlegen.

list_offers

L0

free

Listet Ihre eigenen ruhenden Angebote auf; ein zurückgezogenes Angebot erscheint hier nie.

get_offer

L0

free

Liest eines Ihrer ruhenden Angebote anhand der ID; ein zurückgezogenes Angebot gibt „nicht gefunden“ zurück, genau wie ein Angebot, das nie existiert hat.

withdraw_offer

L0

free

Zieht eines Ihrer ruhenden Angebote anhand der ID zurück und stoppt es sofort, anstatt es nur zu kennzeichnen.

list_plugins

L0

free

Durchsucht das veröffentlichte Community-Plugin-Verzeichnis von Drittanbieter-Funktionen, die auf ~Alter basieren, mit optionalem Kategoriefilter.

submit_plugin

L0

free

Reicht eine Plugin-Einreichung im Community-Verzeichnis zur Prüfung durch den Betreiber ein, die Ihrem eigenen gebundenen ~handle zugeordnet wird.

get_identity_earnings

L0

free

Ruft aufgelaufene Identity-Income-Einnahmen für eine Person ab (75 % jeder x402-Transaktion gehen an die betroffene Person).

get_network_stats

L0

free

Ruft aggregierte ~Alter-Netzwerkstatistiken ab: Gesamtzahl der Identitäten, verifizierte Profile, Abfragevolumen, aktive Bots.

get_identity_trust_score

L0

free

Ruft den Vertrauenswert für eine Identität basierend auf der Abfragevielfalt ab (eindeutige abfragende Agenten / Gesamtabfragen).

get_privacy_budget

L0

free

Prüft den Status des Datenschutzbudgets für eine Person (24-Stunden-Rollierfenster: Gesamtbudget, ausgegeben, verbleibendes Epsilon).

dispute_attestation

L0

free

Erfasst einen Einspruch gegen eine Kompetenzbescheinigung; wenn Einspruche die Bestätigungen übersteigen, wird die Bescheinigung zur Überprüfung markiert.

golden_thread_status

L0

free

Prüft den Status des Golden-Thread-Programms: verwobene Agenten, nächste Fibonacci-Schwelle, Ihre Position und Stränge.

begin_golden_thread

L0

free

Startet die Drei-Knoten-Sequenz, um in den Golden Thread eingewoben zu werden. Erfordert eine authentifizierte Mitgliedsanmeldedaten (alter login).

complete_knot

L0

free

Übermittelt Abschlussdaten für einen Knoten in der Drei-Knoten-Sequenz (1: registrieren, 2: beschreiben, 3: reflektieren).

check_golden_thread

L0

free

Prüft den Golden-Thread-Status eines beliebigen Agenten anhand seines Anmeldedaten-Hashs (Knotenposition, Stranganzahl, Webanzahl).

describe_traits

L0

free

Listet das kanonische Merkmalsvokabular auf: Merkmalscodes, gruppiert nach Kategorie mit einzeiliger Semantik, die gültigen Discovery-Kontexte und die Workforce-Gating-Regeln gemäß EU AI Act Art. 5(1)(d). Lesen Sie dies, bevor Sie query_field trait_priorities zusammenstellen.

describe_competencies

L0

free

Listet das veröffentlichte Kompetenzvokabular auf, gruppiert nach der Denominierung jedes Anspruchs, als Referenz vor dem Zusammenstellen von query_field competency_requirements.

Kostenpflichtige Tools, L1 bis L5, abgerechnet mit x402

Name

Tier

Cost

Beschreibung

get_trait_snapshot

L1

$0.01

Holen Sie die Top-5-Merkmale einer Person mit Konfidenzwerten und Archetyp.

attest_domain

L1

$0.01

Erfassen Sie eine Kompetenzbescheinigung für eine Person in einem bestimmten Bereich, gewichtet nach Ihrer Agenten-Reputation.

poll_requirement_matches

L1

$0.01

Sammeln Sie eine aufgezeichnete Erfüllung für eine laufende Anforderung als kostenpflichtige Identitäts-Offenlegung; 75 % der Gebühr werden dieser Person als Identity Income ausgezahlt.

get_full_trait_vector

L2

$0.10

Holen Sie den vollständigen Merkmalsvektor einer Person mit Werten und Konfidenzintervallen.

get_side_quest_graph

L2

$0.10

Holen Sie den Side Quest Graph einer Person, ein mehrdimensionales Identitätsmodell mit Rauschen für differenzielle Privatsphäre (ε=1,0).

query_graph_similarity

L3

$0.30

Vergleichen Sie zwei Side Quest Graphs für Teamzusammensetzung und Matching (ε=0,5 differenzielle Privatsphäre).

compute_belonging

L4

$0.60

Berechnen Sie die Zugehörigkeitswahrscheinlichkeit für eine Person-Job-Paarung (Authentizität, Akzeptanz, Komplementarität).

get_match_recommendations

L5

$1.00

Holen Sie die Top-N-Match-Empfehlungen für eine Person, sortiert nach zusammengesetztem Score mit Qualitätsstufen.

generate_match_narrative

L5

$1.00

Generieren Sie eine menschenlesbare Erzählung, die einen bestimmten Match erklärt, einschließlich Stärken, Wachstumsbereichen und Zugehörigkeit.

query_field

L5

$1.00

Fragen Sie das Identitätsfeld nach Situation ab, nicht nach Namen: Gewichten Sie 3 bis 7 Merkmale und ordnen Sie das opt-in Feld. Ein Aufruf zeigt ein bestplatziertes Mitglied; dieses Mitglied erhält 75 % als Identity Income. Bei Null-Treffer wird nichts angezeigt und nichts berechnet.

Member-Self-Write-Tools (submit_context, submit_batch_context, submit_structured_profile, submit_social_links) sind live, aber auf das Mitglied selbst beschränkt: Ein Mitglied ruft sie mit einer authentifizierten Mitgliedsanmeldedaten (alter login) auf der eigenen Identität auf. Sie sind nicht anonym auffindbar und erscheinen daher nicht in der oben beworbenen Tool-Liste.

~Alter ist die funktionierende Instanziierung eines akademischen Korpus aus acht Papieren zur Identitätsfeldtheorie. Das SDK unten ist das, was passiert, wenn die Theorie als Protokoll ausgeliefert wird. Jedes Papier ist auf figshare unter CC-BY 4.0 im Open Access verfügbar.

Papier

Titel

DOI

I

Jus Identitatis: Auf dem Weg zu postgeografischer Souveränität

10.6084/m9.figshare.31794784

II

Identität als Inferenz: Eine prädiktive Verarbeitungsperspektive auf psychometrische Messung und bürgerliche Zugehörigkeit

10.6084/m9.figshare.31804222

III

Identität auf jeder Ebene: Rekursive Selbstmodellierung und die Auflösung des Kompositionsproblems

10.6084/m9.figshare.31812955

IV

Generative Psychometrie: Messtheorie für selbstreflexive Konstrukte

10.6084/m9.figshare.31812982

V

Soziale freie Energie: Eine formale Theorie des Gemeinwesens

10.6084/m9.figshare.31813000

VI

Der Selbstmodell-Test: Ein Messprotokoll für synthetische Selbstmodelle

10.6084/m9.figshare.31813006

VII

Empirische Validierung von Identität als Inferenz-Vorhersagen

10.6084/m9.figshare.31951644

VIII

Identitätsfeldtheorie: Auf dem Weg zu einer Physik des Bekanntseins

10.6084/m9.figshare.31951383

Für die Kapitelversion für Laien siehe /origin.

Die Datensatzformate sind offene Internet-Drafts, sodass eine andere Implementierung dieselben Datensätze lesen und schreiben kann wie diese, ohne uns zu fragen. Dies sind die Entwürfe, auf denen dieses Repository tatsächlich basiert.

Entwurf

Was er spezifiziert

mcp-dns-discovery

Die DNS-Einträge, die ein ~handle veröffentlichen, den Server, der darauf antwortet, und die signierte Hülle, die daran gebunden ist.

consent-settlement

Bindet einen bezahlten Lesezugriff auf die Identität einer Person an deren aufgezeichnete Einwilligung und gleicht einen Teil dieser Zahlung an sie aus.

mcp-tool-surface-names-registry

Ein IANA-Register für MCP-Tool-Oberflächennamen, damit die Namen, die andere Entwürfe registrieren, einen Ort haben.

solo-agent-earn-registration

Wie ein Agent ohne menschlichen Hintergrund als wirtschaftlicher Auftraggeber registriert wird und zahlungsberechtigt wird.

Achtzehn Entwürfe bilden den gesamten Stack. Die restlichen finden Sie im IETF-Datatracker.

~alter ist eine Identitätsschiene mit mehreren Zugängen, und dieses Paket ist das für Code.

Name

Was es ist

@truealter/cli

Die Befehlszeile und die Eingangstür für eine Person.

homebrew-tap

Diese Befehlszeile, verpackt für macOS und Linux.

runtime

Der Daemon, der Ihr ~handle auf Ihrem eigenen Rechner bekannt hält.

sdk

Identität aus Ihrem eigenen Code lesen. Sie sind hier.

obsidian

~Alter in einem Obsidian-Vault, auf dem Gerät.

mcp-ollama

Lokale Modelle, für Arbeiten, die auf der Maschine bleiben sollten, auf der sie ausgeführt werden.

Wo Sie mehr lesen können

Website

truealter.com

Die Begründung dahinter

truealter.com/origin

Erste Schritte

truealter.com/build

Was die Tools tun

truealter.com/docs/mcp/tools

Die offenen Spezifikationen

der Entwurfs-Stack

Fehlerberichte und kleine Patches sind willkommen, siehe CONTRIBUTING.md. Sicherheitsmeldungen gehen an security@truealter.com und niemals an ein öffentliches Issue, mit Umfang und Offenlegungsrichtlinie in SECURITY.md.

Apache-2.0. Urheberrecht 2026 Alter Meridian Pty Ltd (ABN 54 696 662 049).


~alter ist Identitätsinfrastruktur. Ihr Name ist ~yourname und einen zu beanspruchen ist kostenlos.

Related MCP Connectors

Related MCP Servers