360 Secure SkillHub
360 安全技能中心

Mova Contract Writer

该 Skill 读取 mova-intent-calibration 产出的状态为 VALID 的预契约,将其映射为 MOVA 构件:信封、数据模式引用、指令配置与 episode frame。每个构件先经用户审核,全部通过后汇总为一份可提交给 MOVA 运行时的契约 JSON;预契约被阻塞或存在未解决歧义时不生成。

mova-compact
mova-compact
热度 37.96
最近更新 2026-05-11 17:38:15
分类:效率依赖:读写文件 / 内部调用大模型应用场景:工作流 / 模板

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add mova-contract-writer
Metadata
name
mova-contract-writer
description
Translate a pre-contract (output of mova-intent-calibration) into a complete, valid MOVA contract — envelope, data schema references, instruction profile, and episode frame. Trigger when the user provides a pre-contract document and asks to generate a MOVA contract, formalize it, or turn it into executable form. Requires a completed pre-contract with status VALID.
license
MIT-0

MOVA Contract Writer

Transform a fully calibrated pre-contract into a complete MOVA contract — structured JSON with envelope, instruction profile, and episode frame — ready for execution by any MOVA-compliant runtime.

What this skill does

  1. Parses the pre-contract — reads all sections produced by mova-intent-calibration
  2. Maps to MOVA constructs — translates each pre-contract section into the correct MOVA artifact
  3. Drafts each artifact — envelope (env.*), data schema references (ds.*), instruction profile, episode frame
  4. Human review gate — each artifact is shown to the user for approval before the final contract is assembled
  5. Outputs the complete MOVA contract — a single JSON document ready for submission to a MOVA runtime

Requirements

  • A completed pre-contract with Status: VALID from mova-intent-calibration
  • MOVA spec available at /home/mova/.openclaw/workspace/mova-spec/ for schema validation

Pre-contract → MOVA mapping

Pre-contract section MOVA artifact Notes
ACTOR (actor, owner, reason_now) env.*.roles[] actor = sender/initiator, owner = recipient/accountable
CHANGE DEFINITION (change_target, change_type, after_state) verb_id in envelope change_type maps to verb: action→create/update, state→route/record, result→analyze/publish
OBJECT (object_description, selection_rule) ds.* schema reference + input_data_refs[] describes what is being acted on
GOAL (goal_statement, verification_method, confirmation_owner) Episode result contract defines expected result_status and confirmation criteria
CONSTRAINTS (forbidden_action, invariant, unacceptable_consequence) ds.instruction_profile_core_v1 rules each constraint → a deny or transform rule in instruction profile
SUCCESS/FAILURE states Episode result_status allowed values success → completed; failure → failed/cancelled/partial
DECISION POINTS (deterministic) Inline in episode frame or envelope verb deterministic rules go into policy; human decisions go to human gates
HUMAN GATES ds.instruction_profile_core_v1 HITL rules trigger_condition maps to policy rule; pause execution and wait for human input
INPUTS (name, available, source) input_data_refs[] + input_envelopes[] in episode unavailable inputs → blocking dependency in instruction profile
DEPENDENCIES (name, type, blocking) Instruction profile: required_resources[] or blocking rules blocking deps → must be resolved before execution starts
ASSUMPTIONS Episode context notes + instruction profile on_violation blocking assumptions → deny rule; safe assumptions → warn rule
TIME LIMITS (deadline, max_attempts, stop_condition) Instruction profile limits or episode finished_at constraint encode as policy constraints
AMBIGUITIES Annotation in meta.ext of the envelope documented but not executable until resolved
LINEARITY CHECK Validates that the episode frame has no hidden branches non-linear → decision points must appear as explicit HITL gates

Verb selection guide

Change type from pre-contract Verb Use when
Creating something new create after_state is a new record or artifact
Modifying existing data update after_state is a changed version of an existing record
Making a routing/selection decision route the task is choosing between options
Recording a fact or observation record the task produces an audit entry or episode
Publishing to a registry publish the task distributes a catalog or configuration
Analyzing data analyze the task produces findings, scores, or risk bands
Planning a sequence of steps plan the task produces a plan or strategy
Explaining a decision explain the task produces a human-readable justification
Summarizing content summarize the task condenses input into a shorter form

Step-by-step process

Step 1 — Receive and validate the pre-contract

Ask: "Paste the pre-contract document (output of mova-intent-calibration)."

Check:

  • Status must be VALID — if BLOCKED, stop here and tell the user to resolve the blocking items first
  • All required sections must be present
  • No unresolved blocking ambiguities

Step 2 — Identify the core MOVA constructs

From the pre-contract, determine:

  1. Verb — use the Verb selection guide above
  2. Envelope ID — format: env.[domain]_[operation]_v1 (e.g. env.procurement_po_review_v1)
  3. Primary data schema — format: ds.[domain]_[object]_v1 (e.g. ds.procurement_po_v1)
  4. Roles — map actor → initiator, owner → accountable, confirmation_owner → approver
  5. Instruction profile ID — format: [domain]_policy_v1 (e.g. procurement_po_policy_v1)

Show the user this mapping and ask for confirmation before continuing.

Step 3 — Draft the envelope

{
  "envelope_id": "env.[domain]_[operation]_v1",
  "verb": "[verb from step 2]",
  "roles": {
    "initiator": "[actor from pre-contract]",
    "accountable": "[owner from pre-contract]",
    "approver": "[confirmation_owner from pre-contract]"
  },
  "payload": {
    "object_ref": {
      "data_type": "ds.[domain]_[object]_v1",
      "description": "[object_description from pre-contract]"
    }
  },
  "policy_profile_id": "[instruction profile ID]",
  "meta": {
    "reason": "[reason_now from pre-contract]",
    "goal": "[goal_statement from pre-contract]"
  }
}

Show to user. Ask to approve or edit.

Step 4 — Draft the instruction profile

{
  "schema_id": "ds.instruction_profile_core_v1",
  "profile_id": "[instruction profile ID]",
  "security_model_version": "mova_security_default_v1",
  "rules": [
    // One rule per CONSTRAINT from pre-contract
    {
      "rule_id": "constraint_[n]",
      "description": "[constraint statement]",
      "target": {
        "kind": "action",
        "verb_id": "[verb]"
      },
      "effect": "deny",   // deny for forbidden_action/unacceptable_consequence; warn for safe assumptions
      "condition": "[when this rule fires]",
      "rationale": "[why this constraint exists]"
    }
  ],
  "hitl_gates": [
    // One entry per HUMAN GATE from pre-contract
    {
      "gate_id": "gate_[n]",
      "trigger_condition": "[trigger_condition from pre-contract]",
      "question_for_human": "[question_for_human from pre-contract]",
      "valid_resolution_criteria": "[valid_resolution_criteria from pre-contract]",
      "on_no_response": "block"
    }
  ],
  "on_violation": "block"
}

Show to user. Ask to approve or edit.

Step 5 — Draft the episode frame

{
  "schema_id": "ds.mova_episode_core_v1",
  "episode_type": "execution/[domain]_[operation]",
  "mova_version": "6.0.0",
  "verb_id": "[verb from step 2]",
  "tool_id": 0,
  "executor": {
    "role": "ai_agent",
    "skill_id": "mova-contract-writer"
  },
  "input_envelopes": [
    { "envelope_type": "env.[domain]_[operation]_v1" }
  ],
  "input_data_refs": [
    // One entry per INPUTS REQUIRED that is available
    { "data_type": "ds.[domain]_[object]_v1", "data_id": "[from pre-contract inputs]" }
  ],
  "result_contract": {
    "success_statuses": ["completed"],
    "failure_statuses": ["failed", "cancelled"],
    "partial_allowed": [true/false from pre-contract partial_success_allowed],
    "verification_method": "[verification_method from pre-contract]",
    "confirmed_by": "[confirmation_owner from pre-contract]"
  },
  "context": {
    "assumptions": "[assumptions from pre-contract]",
    "ambiguities": "[any remaining ambiguities from pre-contract]"
  }
}

Show to user. Ask to approve or edit.

Step 6 — Assemble and output the complete MOVA contract

When all three artifacts are approved, output the final contract:

MOVA CONTRACT  —  [task title from pre-contract]
Generated: [date]
Spec version: MOVA 6.0.0
Pre-contract: VALID

━━━ ENVELOPE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[envelope JSON]

━━━ INSTRUCTION PROFILE ━━━━━━━━━━━━━━━━━━━━━━
[instruction profile JSON]

━━━ EPISODE FRAME ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[episode frame JSON]

━━━ CONTRACT SUMMARY ━━━━━━━━━━━━━━━━━━━━━━━━━
Verb:             [verb]
Envelope:         [envelope_id]
Policy profile:   [profile_id]
HITL gates:       [count]
Constraint rules: [count]
Open ambiguities: [count from pre-contract]
Status:           READY FOR EXECUTION / PENDING AMBIGUITY RESOLUTION

Spec reference

All schema structures are validated against:

  • /home/mova/.openclaw/workspace/mova-spec/schemas/ds.mova_episode_core_v1.schema.json
  • /home/mova/.openclaw/workspace/mova-spec/schemas/ds.instruction_profile_core_v1.schema.json
  • /home/mova/.openclaw/workspace/mova-spec/docs/mova_core.md
  • /home/mova/.openclaw/workspace/mova-spec/docs/mova_security_layer.md

Use mova-spec-guide skill to look up any concept while drafting.

Rules

  • NEVER accept a pre-contract with status BLOCKED — stop and tell the user what to resolve first
  • NEVER invent verb IDs, schema IDs, or policy values outside the MOVA verb catalog — read from spec
  • NEVER skip the human review step for each artifact — the user must approve envelope, profile, and episode frame individually
  • NEVER produce a contract with unresolved blocking ambiguities — mark it PENDING AMBIGUITY RESOLUTION
  • If the pre-contract has optional sections marked not_required — omit the corresponding MOVA fields
  • Generated IDs (envelope_id, profile_id, episode_type) follow MOVA naming conventions: lowercase, underscores, versioned with _v1
  • tool_id = 0 unless the pre-contract specifies an external tool channel