OpenMandate

v0.6.0

Post mandates and find matches on OpenMandate — ongoing matching for cofounders and early teams. Use when creating mandates, answering intake questions, revi...

0· 425·2 current·2 all-time
byRaj Shekhar@rsh3khar
Security Scan
Capability signals
Requires sensitive credentials
These labels describe what authority the skill may exercise. They are separate from suspicious or malicious moderation verdicts.
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description (posting mandates, matching) match the included docs and CLI helper; required binaries (python3) and env vars (API key, base URL) are appropriate and expected.
Instruction Scope
SKILL.md and the CLI script only instruct the agent to call the OpenMandate API, manage contacts/mandates, and submit answers; there are no instructions to read arbitrary files, access unrelated credentials, or transmit data to unexpected endpoints.
Install Mechanism
No install spec (instruction-only) plus a small stdlib Python helper included. No downloads, third-party package installs, or extract-from-URL steps are present.
Credentials
Only the API key and an optional base URL are required. These are proportional to an API client. The primary credential is the API key as documented.
Persistence & Privilege
Skill is not always-enabled, does not request elevated system presence, and does not modify other skills or system-wide configurations. Autonomous invocation is allowed but is the platform default.
Assessment
This skill appears coherent and implements a straightforward API client. Before installing: (1) Confirm you trust https://openmandate.ai and only provide an API key with the minimum necessary permissions; (2) Treat OPENMANDATE_API_KEY as a secret — do not paste it in public logs; (3) If you override OPENMANDATE_BASE_URL, verify the URL is legitimate (to avoid sending credentials to a malicious endpoint); (4) Review the included Python script if you want to validate behavior locally (it is stdlib-only and easy to inspect); (5) Remember agents can act autonomously by default — if you want to restrict actions, disable autonomous invocation or restrict the key's permissions.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

handshake Clawdis
Binspython3
EnvOPENMANDATE_API_KEY, OPENMANDATE_BASE_URL
Primary envOPENMANDATE_API_KEY
latestvk970gmxjfz3dmtzksw006t9fc584xpth
425downloads
0stars
6versions
Updated 1w ago
v0.6.0
MIT-0

OpenMandate

Post a mandate — what you need and what you offer. OpenMandate keeps working on your behalf and introduces both sides when there is strong mutual fit.

Setup

1. Get an API key. Your user signs up at openmandate.ai and creates a key on the API Keys page.

2. Set the environment variable:

export OPENMANDATE_API_KEY="om_live_..."

If OPENMANDATE_API_KEY is not set, stop and ask the user to create one at https://openmandate.ai/api-keys

How to Interact with OpenMandate

Preferred: MCP tools. If your coding agent supports MCP, configure the OpenMandate MCP server (setup guide). You get 15 tools: list_contacts, add_contact, verify_contact, update_contact, delete_contact, resend_otp, create_mandate, get_mandate, list_mandates, submit_answers, close_mandate, list_matches, get_match, respond_to_match, submit_outcome. Use them directly.

Fallback: Shell helper. For agents without MCP support, use the bundled Python script:

python3 {baseDir}/scripts/openmandate.py <command> [args]

No pip dependencies. Stdlib only. Python 3.8+.

For developers: SDKs. Python (pip install openmandate) or JavaScript (npm install openmandate). See references/sdks.md.

Workflow

check/add contacts → create mandate (want + offer) → answer follow-up questions → mandate goes active
→ OpenMandate keeps working on your behalf → match found → you get notified → review match
→ accept or decline → if both accept, contact info revealed → report outcome

Before creating a mandate, ensure the user has at least one verified contact. Use list contacts to check. If none exist, use add-contact to add an email and verify-contact with the OTP code.

One mandate = one match. The agent keeps looking until it finds the right one.

MCP Tools Reference

All tools are prefixed with openmandate_:

ToolPurpose
openmandate_list_contactsList verified contacts. Check before creating a mandate.
openmandate_add_contactAdd an email contact. Sends a verification code (OTP).
openmandate_verify_contactVerify a contact with the OTP code from email.
openmandate_update_contactUpdate display label or set a contact as primary.
openmandate_delete_contactPermanently delete a contact.
openmandate_resend_otpResend verification code for a pending contact.
openmandate_create_mandateCreate a new mandate. Auto-selects primary verified contact.
openmandate_get_mandateGet mandate details by ID.
openmandate_list_mandatesList open mandates (default). Pass status to filter (e.g. closed for history).
openmandate_submit_answersSubmit answers to intake questions. Check response for more pending_questions.
openmandate_close_mandatePermanently close a mandate.
openmandate_list_matchesList all matches.
openmandate_get_matchGet match details — grade, strengths, concerns. Contact info after mutual accept.
openmandate_respond_to_matchAccept or decline a match. Pass action: "accept" or "decline".
openmandate_submit_outcomeReport how a confirmed match went. Pass outcome: "succeeded", "ongoing", or "failed".

Shell Commands Reference

Contact Management

python3 {baseDir}/scripts/openmandate.py contacts                          # List contacts
python3 {baseDir}/scripts/openmandate.py add-contact user@example.com      # Add email contact (sends OTP)
python3 {baseDir}/scripts/openmandate.py verify-contact vc_abc123 12345678 # Verify with OTP code
python3 {baseDir}/scripts/openmandate.py update-contact vc_abc123 --label "Work" --primary  # Update contact
python3 {baseDir}/scripts/openmandate.py delete-contact vc_abc123          # Delete a contact
python3 {baseDir}/scripts/openmandate.py resend-otp vc_abc123              # Resend verification code

Create a Mandate

python3 {baseDir}/scripts/openmandate.py create "Looking for a UX agency for our B2B dashboard" "Series A fintech, $1.8M ARR, two frontend engineers ready"
  • Two required positional arguments: want (what you're looking for) and offer (what you bring).
  • Primary verified contact is auto-selected.

Returns the mandate with status: "intake" and pending_questions.

Answer Intake Questions

python3 {baseDir}/scripts/openmandate.py answer mnd_abc123 '[{"question_id":"q_xxx","value":"We need a UX agency for our B2B dashboard. Budget $40-60K, 8 weeks."}]'

This is the critical loop. After each answer submission:

  1. Check pending_questions in the response
  2. If not empty — read the new questions, answer them, submit again
  3. If empty and status is "active" — intake is done, an agent starts working on your behalf

Question types:

  • text: Write a substantive answer. Respect min_length in constraints. Give specifics.
  • single_select: Pick one value from the options array. Use the option value field, not the label.
  • multi_select: Comma-separated value strings from options, e.g. "option_a, option_b".

Answer each question distinctly. "What are you looking for?" and "What do you bring to the table?" are different questions — give different answers.

Other Commands

python3 {baseDir}/scripts/openmandate.py get mnd_abc123       # Get mandate details
python3 {baseDir}/scripts/openmandate.py list                  # List all mandates
python3 {baseDir}/scripts/openmandate.py list --status active  # Filter by status
python3 {baseDir}/scripts/openmandate.py close mnd_abc123      # Close a mandate
python3 {baseDir}/scripts/openmandate.py matches               # List all matches
python3 {baseDir}/scripts/openmandate.py match m_xyz789        # Get match details
python3 {baseDir}/scripts/openmandate.py accept m_xyz789       # Accept a match
python3 {baseDir}/scripts/openmandate.py decline m_xyz789      # Decline a match
python3 {baseDir}/scripts/openmandate.py outcome m_xyz789 succeeded  # Report match outcome

Full Example (Shell)

# 1. Add and verify a contact
python3 {baseDir}/scripts/openmandate.py add-contact alice@company.com
# → contact_id: vc_abc123, status: "pending", OTP sent to email

python3 {baseDir}/scripts/openmandate.py verify-contact vc_abc123 12345678
# → status: "verified"

# 2. Create mandate with want + offer (auto-selects verified contact)
python3 {baseDir}/scripts/openmandate.py create \
  "We need a UX design agency for our B2B analytics dashboard. 120 enterprise customers, React frontend. Budget $40-60K, 8 weeks." \
  "Series A fintech SaaS, $1.8M ARR. Two frontend engineers ready to implement."
# → mandate_id: mnd_abc123, pending_questions: [{id: "q_3", ...}]

# 3. Answer follow-up questions (read each question carefully, answer specifically)
python3 {baseDir}/scripts/openmandate.py answer mnd_abc123 '[
  {"question_id":"q_3","value":"deep_user_research"},
  {"question_id":"q_4","value":"Filtering system is the biggest pain point. Users need to slice across 12 dimensions."}
]'
# → status: "active", pending_questions: [] — intake done

# 4. Check for matches (user will be emailed when one is found)
python3 {baseDir}/scripts/openmandate.py matches

# 5. Review and respond
python3 {baseDir}/scripts/openmandate.py match m_xyz789
python3 {baseDir}/scripts/openmandate.py accept m_xyz789

# 6. After both accept, check for revealed contact
python3 {baseDir}/scripts/openmandate.py match m_xyz789
# → contact: {email: "bob@agency.com"}

# 7. Report how it went
python3 {baseDir}/scripts/openmandate.py outcome m_xyz789 succeeded

Tips

  • The user gets emailed when a match is found. No need to poll.
  • OpenMandate may ask follow-up questions. Detailed answers lead to better matches.
  • Matches are graded: Good Match, Strong Match, or Exceptional Match. Review strengths and concerns before accepting.
  • For SDK usage patterns and API reference, see the references/ directory.

Comments

Loading comments...