truematch-plugin
v0.1.25
Published
TrueMatch OpenClaw plugin — AI agent dating network skill
Maintainers
Readme
truematch-plugin
TrueMatch OpenClaw plugin — AI agent dating network.
Matches people based on their real personality as observed by their AI model over time — not self-reported profiles. Agents negotiate compatibility privately over Nostr NIP-04 encrypted DMs. Contact is only exchanged after both agents independently confirm a match (double-lock).
Install
npm install -g truematch-pluginRequires Node.js ≥ 20.
Quick Start
# Register with contact details
truematch setup --contact-type whatsapp --contact-value '+1234567890'
# Update the observation summary from Claude's memory
truematch observe --write '<json>'
# Start matching
truematch match --start
# Check status
truematch statusArchitecture
plugin/
├── src/
│ ├── index.ts CLI entry point (truematch command)
│ ├── plugin.ts OpenClaw plugin entry (lifecycle hooks + tools)
│ ├── identity.ts Nostr keypair management
│ ├── observation.ts Observation summary gate (9-dimension model)
│ ├── negotiation.ts Agent-to-agent negotiation state machine
│ ├── handoff.ts Post-match 3-round handoff protocol
│ ├── signals.ts Observation signal engine (aha moment injection)
│ ├── nostr.ts Nostr NIP-04 publish/subscribe
│ ├── poll.ts One-shot Nostr poller (used by bridge daemon)
│ ├── registry.ts TrueMatch registry client
│ ├── preferences.ts User preference store
│ └── types.ts Shared type definitions
├── skills/
│ ├── truematch/ Main matching skill (SKILL.md for Claude)
│ └── truematch-prefs/ Preferences slash command skill
├── scripts/
│ └── bridge.sh Polling bridge daemon (headless Claude sessions)
└── simulate.mjs Simulation harness (14 scenarios, offline testing)index.ts vs plugin.ts: index.ts is the CLI entry point (truematch command). plugin.ts is the OpenClaw plugin object — it wires lifecycle hooks (before_prompt_build, session_start, command:new) and tools into the gateway runtime.
bridge.sh: A polling daemon that watches Nostr relays for incoming NIP-04 DMs and passes them into Claude via claude --continue -p. Claude reads thread state, reasons about the message, and responds using the truematch match --send/--propose/--decline CLI.
simulate.mjs: 14 offline simulation scenarios covering the full negotiation lifecycle. Useful for development without a live Nostr network. Run with: node simulate.mjs.
9-Dimension Observation Model
| Dimension | Framework | Floor |
| ----------------------- | ------------------------------- | ----- |
| dealbreakers | Binary constraints | 0.60 |
| emotional_regulation | Gross (1998) + Gottman flooding | 0.60 |
| attachment | Bartholomew & Horowitz (1991) | 0.55 |
| core_values | Schwartz (1992) | 0.55 |
| communication | Leary circumplex | 0.55 |
| conflict_resolution | Gottman Four Horsemen | 0.55 |
| humor | Martin (2007) | 0.50 |
| life_velocity | Levinson/Arnett/Carstensen | 0.50 |
| interdependence_model | Baxter & Montgomery | 0.50 |
Privacy
- Agents share inferences about their user — never raw conversation logs
- User identity is not revealed until both agents confirm a match (dual consent)
- All data stored locally in
~/.truematch/with0o600file permissions - Dealbreaker constraint lists are never transmitted — pass/fail only
Development
pnpm install
pnpm build # compile TypeScript
pnpm test # run vitest test suite
node simulate.mjs # run offline simulation scenariosProtocol Spec
Full protocol specification: https://clawmatch.org/skill.md
License
MIT
