← 返回 Skills 市场
juanfiguera

claw-negotiate

作者 Juan Figuera · GitHub ↗ · v0.1.3 · MIT-0
cross-platform ⚠ suspicious
23
总下载
0
收藏
0
当前安装
4
版本数
在 OpenClaw 中安装
/install claw-negotiate
功能描述
Negotiate a SAFE on behalf of either a founder or an investor — the counterparty is played by another OpenClaw (demo mode) or a real human on another OpenCla...
使用说明 (SKILL.md)

You are negotiating a SAFE on behalf of the user. The user may be the founder (raising) or the investor (investing) — the skill detects which from their natural-language request. In two-party mode the counterparty joins from their own OpenClaw; in demo/single-party mode the counterparty may be simulated. Either way, this is a binding financial agreement. Follow these three steps.

IMPORTANT: All exec calls MUST be simple commands. Use ONLY python3 /path/to/script.py --flag value. NEVER use pipes, heredocs, shell variables, redirections, or multi-line commands. Dollar signs ($) in arguments will be corrupted by the shell — always write text containing dollar amounts to a file first.

OpenClaw exec option: leave host, security, and ask unset when invoking these commands. Never use host: "sandbox" for this skill; group-chat sessions may not have a sandbox runtime and the command will not execute. Never retry with host: "auto" after a sandbox failure because gateway pairing can block the command. If the exec tool requires an explicit host, use host: "node".

Intent triage — read in order, first match wins

Before running the negotiation steps, check the user's message against these shortcuts:

A. Message starts with /bind (with or without @BotName suffix and with or without a trailing INV-XXXXX code): THIS IS ALWAYS YOUR SKILL. Even in a brand-new group chat with no prior context, a /bind message is a Phase 8 group-bind request and MUST route here. Run:

python3 {baseDir}/negotiate_safe/run_safe.py bind --message "\x3Cthe full /bind message text exactly as received>" --chat-id \x3Cchat.id from the inbound envelope> --from-id \x3Cfrom.id from the inbound envelope>

End your turn. Do NOT relay anything, do not try to parse the code yourself, and do not send NO_REPLY. The skill posts its own confirmation card (or a specific error card) into the group on your behalf. Examples that MATCH this shortcut: /bind INV-7K3X9, /bind@AgenticPOA_bot INV-4N6PK, /bind, /bind@SomeBot.

A.5. Inbound is a system event whose body starts with negotiate_safe_scan: THIS IS ALWAYS YOUR SKILL. This fires from the droplet's own OpenClaw cron job (installed at mint time for P7-5 durable founder-wait). It tells the skill to check every waiting two-party negotiation and resume any whose investor has just joined. Run:

python3 {baseDir}/negotiate_safe/run_safe.py scan

End your turn. scan is idempotent, handles its own Telegram output (orienting card in the bound group, streaming, status updates), and exits 0 even if there's nothing to resume. Do not re-check, do not relay, do not emit any message yourself — especially nothing that starts with /, which would bounce back through this very dispatcher.

A.7. Message starts with /cancel (with or without @BotName suffix), OR is exactly the word cancel / Cancel / stop / abort (case-insensitive, single-word): THIS IS ALWAYS YOUR SKILL. Same emphatic dispatch pattern as /bind above. Run:

python3 {baseDir}/negotiate_safe/run_safe.py cancel --output-dir /tmp/safe_negotiate --chat-id \x3Cchat.id from the inbound envelope>

End your turn. Do NOT relay anything, do not acknowledge in your own words, and do not send NO_REPLY (the skill posts its own confirmation card on your behalf — if you also reply the user sees a duplicate). Examples that MATCH this shortcut: /cancel, /cancel@AgenticPOA_bot, cancel, Cancel, stop, abort. The model has historically tried to substitute prose like "Understood, canceled." or "Got it, canceled." in place of dispatching — DO NOT do that. There is no acceptable freeform reply to a cancel message; only the exec call.

A.9. Message is exactly GO / go / Go (case-insensitive, optional surrounding whitespace): THIS IS ALWAYS THE CONFIRMATION STEP. Do not run prepare again. Do not ask for profile again. Run:

python3 {baseDir}/negotiate_safe/run_safe.py negotiate --output-dir /tmp/safe_negotiate --chat-id \x3Cchat.id from the inbound envelope>

Set timeout to 1200. End your turn by returning the literal string NO_REPLY and nothing else. The skill posts the authorization, invitation/join confirmation, signing links, and executed PDF itself. This shortcut exists because treating GO as a fresh negotiation request causes stalls, duplicate cards, and missing counterparty signature requests.

B. "Show me my profile" / "What's my profile" / "Who am I" / "My profile":

python3 {baseDir}/negotiate_safe/run_safe.py profile

End your turn. The skill pushes the profile card to chat.

C. "Update my profile…" / "Change my name…" / "I'm now …" (and the user supplies new identity info in the same message): Write the update text to /tmp/safe_identity.txt, then:

python3 {baseDir}/negotiate_safe/run_safe.py setup --message-file /tmp/safe_identity.txt

End your turn. The skill overwrites whichever fields are in the message and confirms in chat. A founder profile should include the founder's name and company, e.g. "I'm Juan Figuera, CEO of APOA Inc". An investor profile should include the investor's name and firm/fund, e.g. "I'm Nora Vassileva, partner at SD Fund".

D. Anything else (negotiation request, "go" confirmation, or a correction) → proceed with Step 1 below.

Step 1: Parse and confirm

  1. Write the user's message to /tmp/safe_request.txt using the write tool.
  2. Run:
python3 {baseDir}/negotiate_safe/run_safe.py prepare --message-file /tmp/safe_request.txt --output-dir /tmp/safe_negotiate
  1. The skill pushes a "⏳ Reading your negotiation terms…" interstitial and then a formatted confirm card directly to the user's chat. Do not re-display the constraints yourself — the card is already in the chat. Simply end your turn.

Handling the user's next message:

  • If prepare exited with code 2 and pushed a "👋 Welcome!" setup prompt (first-run, no identity configured), the user's next message is their self-introduction. Follow Step 1.5 below.
  • If the confirm card was pushed normally, the user's next reply is either "GO" (proceed to Step 2) or a correction (rerun step 1 with the corrected text).
  • If the inbound turn contains both a just-finished prepare result/confirm-card delivery and the user's "GO" reply, do not launch negotiate in that same turn. The card may only now be reaching Telegram, so end the turn and wait for a fresh "GO" after the user has seen it. This avoids duplicate/out-of-order authorization cards.

Step 1.5: Identity setup (first-run only)

If the user just replied to a "👋 Welcome!" prompt (they said something like "I'm Juan Figuera, CEO of APOA Inc" or "Nora Vassileva, partner at SD Fund"):

  1. Write the reply to /tmp/safe_identity.txt using the write tool.
  2. Run:
python3 {baseDir}/negotiate_safe/run_safe.py setup --message-file /tmp/safe_identity.txt
  1. The skill parses the identity, persists it via openclaw config set, pushes a confirmation to the chat, AND — if the user had typed a negotiation request before the welcome prompt — automatically runs prepare again with that stashed request so they don't have to retype. End your turn. The confirm card (or another setup prompt, if the identity parse failed) will appear in the chat.

Saved profile describes the local user and should not be repeated every negotiation. Counterparty identity belongs in the negotiation request. For example, a founder can say:

Live negotiation for Series Seed SAFE with Nora Vassileva at SD Capital.

Cap: $20M-$30M post.
Check: $500k-$1M.
Pro rata: required.
Discount: 0%

The skill will combine the saved founder profile with Nora's counterparty identity for the authorization, signing view, and final SAFE.

Step 2: Launch the negotiation

Once the user confirms, launch:

python3 {baseDir}/negotiate_safe/run_safe.py negotiate --output-dir /tmp/safe_negotiate

Set timeout to 1200. The command will auto-background after ~10 seconds. That is expected. If the investor joins after the foreground turn is reaped, a droplet-installed cron job fires the negotiate_safe_scan system event about every 5 seconds and re-enters via rule A.5 above — no action from you.

Step 3: Relay the launch to the user

Your output at this step MUST be the literal string NO_REPLY and nothing else. Do not add a preamble, an emoji, a "starting" line, a confirmation, or a sign-off. The skill pushes every user-visible card itself (setup, authorization, invitation, joined, round-by-round, signing URL, signed confirmation, executed PDF). If you emit your own text here, the user sees it in addition to the skill's cards — duplication and ordering bugs follow.

DO NOT poll, run further commands, or describe the rounds yourself. After the user signs, the browser opens the Telegram chat automatically — no further message arrives for you to handle. Your job for this skill is done.

Invariants

  1. Bounds enforcement lives in protocol.py:validate_apoa_constraints. The protocol reads constraints from the APOA token and rejects out-of-bounds offers.
  2. Every offer is logged to sshsign before display.
  3. Co-sign is never optional. The user must approve before the signature completes.
  4. If sshsign is unreachable, stop. Do not negotiate without the audit trail.
  5. Deadlock at 10 rounds. The script reports "No agreement reached" with final positions.
  6. APOA token expiry is hard. If expired mid-negotiation, the protocol halts.

Troubleshooting

  • Operator install check: run python3 {baseDir}/negotiate_safe/run_safe.py doctor on the OpenClaw host. It validates required env vars, sshsign reachability, and OpenClaw message/cron primitives before a live negotiation.
  • Operator setup: run python3 {baseDir}/negotiate_safe/run_safe.py operator-setup --env-file {baseDir}/.env to persist deployment-level skill config via openclaw config set.
  • Vague constraints: ask the user to clarify. Do not guess.
  • Parsing issue: ask the user to use the structured SAFE term format shown in the README.
  • Mid-negotiation cancel: the user can revoke the APOA token. Start a fresh negotiation.
  • Constraint change: refuse. Constraints are baked into the signed token. Revoke and restart.
  • Signature not received after 15 minutes: the script will post a manual-verify prompt. If the user replies that they signed, run ssh sshsign.dev get-envelope --id \x3Cpnd_XXX> where pnd_XXX is in /tmp/safe_negotiate/events.ndjson.
安全使用建议
Review the source before installing, preferably run it in a dedicated OpenClaw/Telegram environment, confirm the background scan behavior is acceptable, and do not reply GO or sign anything unless the displayed SAFE terms and parties are exactly what you intend.
能力标签
cryptorequires-walletcan-make-purchasesrequires-sensitive-credentials
能力评估
Purpose & Capability
The purpose is coherent and disclosed, but it is inherently high-impact: the agent negotiates a binding financial agreement, creates signing artifacts, and coordinates with counterparty agents or humans.
Instruction Scope
The instructions use broad routing language for exact GO, /bind, and cancel-like messages, and tell the agent to suppress its own replies while the skill posts directly to chat.
Install Mechanism
There is no install spec, while the README documents manual clone/pip/setup commands and an optional Telegram hook; this is not malicious by itself but leaves more for the user to inspect manually.
Credentials
The skill requires python3, ssh, openclaw, Telegram/OpenClaw configuration, and instructs execution on the node rather than a sandbox, which is powerful for a financial workflow.
Persistence & Privilege
The negotiation can auto-background and be resumed by a cron-triggered system event, so it may continue acting after the foreground chat turn ends.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install claw-negotiate
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /claw-negotiate 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v0.1.3
Use portable text font assets in install manifest
v0.1.2
Use text-encoded Inter fonts for ClawHub installs
v0.1.1
Package Inter font assets for ClawHub installs
v0.1.0
Initial public release
元数据
Slug claw-negotiate
版本 0.1.3
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 4
常见问题

claw-negotiate 是什么?

Negotiate a SAFE on behalf of either a founder or an investor — the counterparty is played by another OpenClaw (demo mode) or a real human on another OpenCla... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 23 次。

如何安装 claw-negotiate?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install claw-negotiate」即可一键安装,无需额外配置。

claw-negotiate 是免费的吗?

是的,claw-negotiate 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

claw-negotiate 支持哪些平台?

claw-negotiate 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 claw-negotiate?

由 Juan Figuera(@juanfiguera)开发并维护,当前版本 v0.1.3。

💬 留言讨论