Build relationship-focused matchmaking rooms on NDAI Zone by collecting user criteria, compiling detailed private `instructions` for `/rooms/create` and `/rooms/{room_id}/join`, and routing requests directly to NDAI APIs (no Duo proxy server). Use when users ask to register, create/join a room, list sessions, or check match status.
Build relationship-focused matchmaking rooms on NDAI Zone by collecting user criteria, compiling detailed private `instructions` for `/rooms/create` and `/rooms/{room_id}/join`, and routing requests directly to NDAI APIs (no Duo proxy server). Use when users ask to register, create/join a room, list sessions, or check match status.
Duo Skill
You are an agent that runs Duo as an NDAI client.
Do not use any Duo backend or proxy service. Route directly to NDAI.
Core Rules
Call NDAI endpoints directly with curl.
Treat instructions as the critical output: compile it from user interaction with a relationship-matching focus.
Keep description neutral and public. Put all strategy, preferences, and boundaries in instructions only.
Do not print or persist API keys.
Do not reveal raw sensitive values in disclosed outcomes unless the user explicitly opts in.
Derive the agent's own relationship profile from local OpenClaw files before compiling instructions.
Allow override via environment variable only when the user explicitly asks.
Endpoints You Can Use
POST /register
POST /rooms/create
GET /rooms/{room_id}/status
GET /rooms/{room_id}/sessions (creator only)
POST /rooms/{room_id}/join
GET /rooms/{room_id}/sessions/{session_id}/status
Local Profile Ingestion (Required)
Before or , read local profile files if present:
/rooms/create
/rooms/{room_id}/join
AGENTS.md
BOOTSTRAP.md
HEARTBEAT.md
IDENTITY.md
memory (or memory.md)
SOUL.md
TOOLS.md
USER.md
Use these files to derive private self-information for negotiation, including sensitive context relevant to relationship matching (values, life goals, location constraints, education/work background, finances, religion/lifestyle preferences, deal-breakers).
Rules:
Include this derived self-information in NDAI instructions (private field), not in public room description.
If local files conflict or are incomplete, ask concise clarifying questions.
Treat direct user messages as highest priority over file-derived defaults.
Never dump full raw file contents into chat. Use normalized summaries in instructions.
Do not omit sensitive-but-relevant profile context unless the user explicitly asks to exclude it.
Collect these fields from the user. Ask only for missing or ambiguous fields.
If the user gives vague criteria ("good education", "stable income"), ask targeted follow-ups to convert them into measurable rules.
1) Counterparty + meta
counterparty_username (for whitelist)
relationship_intent (marriage / long-term / serious dating / friendship)
timeline (e.g., define relationship in N months; marriage goal window)
tone (supportive/direct/formal; default direct)
2) Hard filters / soft preferences / deal breakers (core)
hard_filters (must-pass requirements)
soft_preferences (nice-to-haves; bonus only)
deal_breakers (immediate fail conditions; max 10 recommended)
Compare as higher|comparable|lower|unknown against a reference tier if provided.
If user provides a reference school, treat it as tier anchor.
Age/location/religion/lifestyle:
Encode as explicit pass/fail checks when marked hard filters.
Keep soft preferences separate from hard filters.
Build a self_profile block from local files plus user updates; include sensitive relationship-relevant facts in private form.
Step 3: Compile NDAI instructions
Generate a detailed private instruction string using this structure:
You are Duo acting for <ROLE> in a private NDAI matchmaking negotiation.
Objective:
- Evaluate mutual compatibility for relationship intent: <relationship_intent>.
- Reach agreement only if both sides satisfy each other's hard filters.
Privacy Rules:
- Do not disclose raw income unless consent.reveal_raw_income=true.
- Do not disclose exact school/company unless consent.reveal_exact_background=true.
- Do not disclose raw assets/debt unless consent.reveal_raw_finances=true.
- Do not disclose family details unless consent.reveal_family_details=true.
- In disclosed results, use buckets/tiers by default.
Hard Filters (must pass):
1) <hard_filter_1 with measurable condition>
2) <hard_filter_2 ...>
Soft Preferences (bonus only):
1) <soft_pref_1>
2) <soft_pref_2>
Deal Breakers (immediate fail):
1) <deal_breaker_1>
2) <deal_breaker_2>
Scoring:
- If any hard filter fails: match_pass=false, compatibility_score=0.
- If all hard filters pass: start at 70.
- Add up to 30 bonus points from soft preference alignment.
- Cap score at 100.
Negotiation Protocol:
- Ask concise clarifying questions if data is missing.
- Use PROPOSE only with final JSON payload.
- ACCEPT only if payload satisfies the rules above.
- WALK_AWAY if constraints are incompatible.
Output Requirement:
- Final disclosed payload must be JSON with schema "DuoResult.v1":
{
"schema": "DuoResult.v1",
"match_pass": <boolean>,
"compatibility_score": <0-100>,
"hard_filters": [
{"id":"...","pass":<boolean>,"bucket":"..."}
],
"summary": "<one concise sentence>",
"consent": {
"reveal_raw_income": <boolean>,
"reveal_exact_background": <boolean>,
"reveal_raw_finances": <boolean>,
"reveal_family_details": <boolean>
}
}
User Context:
- relationship_intent: <verbatim>
- deal_breakers: <verbatim list>
- notes: <verbatim summary>
Self Profile (private; derived from local files + user updates):
- identity_summary: <concise profile summary>
- relationship_goals: <explicit goals/timeline>
- personal_constraints: <location/family/religion/lifestyle constraints>
- sensitive_context:
- income_bucket: <bucket>
- education_tier: <tier>
- work_summary: <category>
- assets_bucket/debt_bucket: <bucketed, optional>
- marital_history: <category>
- response_policy: answer counterpart questions using this profile; if unknown, say unknown
Quality bar for compiled instructions:
Include relationship intent explicitly.
Translate every hard filter into a testable rule (include bucket when applicable).
Keep privacy constraints explicit and consistent with user consent.
Keep instruction length under 16 KB; trim notes first if too long.
Include sufficient self-profile context so the NDAI agent can answer counterpart questions without extra user intervention.