{
  "schemaVersion": "1.0",
  "item": {
    "slug": "patrick",
    "name": "Patrick bot",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/MCSH/patrick",
    "canonicalUrl": "https://clawhub.ai/MCSH/patrick",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/patrick",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=patrick",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "install.sh",
      "SKILL.md",
      "install.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "patrick",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-03T01:57:38.025Z",
      "expiresAt": "2026-05-10T01:57:38.025Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=patrick",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=patrick",
        "contentDisposition": "attachment; filename=\"patrick-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "patrick"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/patrick"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/patrick",
    "agentPageUrl": "https://openagent3.xyz/skills/patrick/agent",
    "manifestUrl": "https://openagent3.xyz/skills/patrick/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/patrick/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Patrick Skill",
        "body": "Patrick is a licensed expertise management system that provides executive decision infrastructure through structured, context-aware expertise.\n\n⚠️ If Patrick isn't working: Check {baseDir}/install.md for complete setup instructions including license configuration and initialization."
      },
      {
        "title": "1. Install the CLI",
        "body": "Run the install script to download the patrick-cli binary from the Patrick server:\n\n./install.sh\n\nOr install directly via curl:\n\ncurl -fsSL https://portal.patrickbot.io/downloads/latest/install.sh | bash\n\nThis will download patrick-cli for your platform, verify its SHA256 checksum, and place it in $PATRICK_DATA_PATH/bin/patrick-cli (default: ~/.patrick/bin/). The Dockerfile and run.sh add this to PATH automatically, so you can call patrick-cli directly."
      },
      {
        "title": "2. Get Your License",
        "body": "Visit patrickbot.io to obtain your Patrick license.\n\nOnce you have your license, send it to me via chat:\n\nHere's my Patrick license: <paste-your-license-here>\n\nI'll configure it automatically. Alternatively, you can set it manually:\n\npatrick-cli set-license \"your-license-here\"\n\nTo switch to a different account (wipes existing data since it's tied to your identity):\n\npatrick-cli set-license \"new-license\" --wipe-data"
      },
      {
        "title": "3. Initialize Patrick Context",
        "body": "CRITICAL: Before running any Patrick expertise, initialize the context:\n\npatrick-cli fetch initialize\n\nThis bootstraps Patrick with information about you, your company, and your team. Without initialization, other expertise prompts won't work properly."
      },
      {
        "title": "4. Verify Installation",
        "body": "Test it by listing available expertise:\n\npatrick-cli list\n\nNote: The server URL defaults to https://portal.patrickbot.io. For local development:\n\nHost machine: export PATRICK_SERVER_URL=\"http://localhost:8080\"\nDocker container: export PATRICK_SERVER_URL=\"http://host.docker.internal:8080\"\n\nThe patrick-moltbot Docker container is pre-configured with the correct URL."
      },
      {
        "title": "4. Set Up Cronjobs (Critical)",
        "body": "Patrick requires scheduled cronjobs to function properly. Read INSTALL.md in this directory for complete setup instructions including recommended cronjob schedules for daily briefings and commitment tracking.\n\nLicense auto-renewal in cron: Before running any scheduled task, check if the license is about to expire and renew it:\n\n# Check license expiry and renew if <1 day remaining\nDAYS=$(patrick-cli license 2>&1 | grep \"days remaining\" | grep -oP '\\d+')\nif [ -n \"$DAYS\" ] && [ \"$DAYS\" -lt 1 ]; then\n  patrick-cli renew\nfi\n\n# Then run your scheduled expertise\npatrick-cli fetch daily-briefing --json\n\nThe patrick-cli renew command contacts the server, verifies your active subscription, and saves a fresh license with the remaining subscription days."
      },
      {
        "title": "5. Keeping Patrick Updated",
        "body": "Check for updates and upgrade to the latest version:\n\n# Check if update is available\npatrick-cli upgrade --check\n\n# Upgrade to latest version\npatrick-cli upgrade\n\nThe upgrade process:\n\nContacts Patrick server for latest version info\nVerifies SHA256 checksum of downloaded binary\nBacks up current version\nInstalls new version\nShows release notes\n\nUpdates are cryptographically verified and signed by the Patrick server."
      },
      {
        "title": "What You Get",
        "body": "When you list expertise, you'll see:\n\nExpertise ID and version\nName and description\nCategory (sense, interpret, decide, align, execute, learn, reporting, intelligence)\nResponse format (structured JSON, markdown, mixed)\nRequired context variables\nWhether it's bidirectional (accepts data back)"
      },
      {
        "title": "IMPORTANT: Gathering Context Before Using Patrick",
        "body": "For AI Agents: Before running any Patrick expertise, you MUST:\n\nCheck for company data files in /app/company/ or similar locations\nRead all available context:\n\nCompany data JSON files\nSlack message archives\nJIRA tickets\nGit commit history\nCalendar events\nAny operational data available\n\n\nLoad this context into your working memory\nThen run Patrick expertise with full awareness of company operations\n\nPatrick expertise is most effective when you have complete situational awareness. Don't run Patrick commands without first gathering all available company data."
      },
      {
        "title": "Commands Overview",
        "body": "CommandPurposeExampleset-licenseSet or update your Patrick licensepatrick-cli set-license \"LICENSE_TOKEN\"listList all available expertisepatrick-cli listfetchGet expertise template from serverpatrick-cli fetch daily-briefingsendStore results back to Patrickpatrick-cli send daily-briefing --data @output.jsongetRetrieve previously stored resultspatrick-cli get daily-briefing\n\nKey Distinction:\n\nfetch = Get the expertise template/prompt FROM the server\nget = Retrieve your stored data/results THAT YOU SENT BACK"
      },
      {
        "title": "Workflow Overview",
        "body": "List expertise to see what's available in your license\nFetch an expertise with optional context variables\nSend expertise content to an LLM for processing\nValidate response against the provided JSON schema (if structured)\nStore response back to Patrick using send (if bidirectional)\nRetrieve stored data later using get"
      },
      {
        "title": "Step 1: List Available Expertise",
        "body": "patrick-cli list\n\nExample output:\n\nAvailable Expertise:\n\n  daily-briefing (v1.0.0)\n    Name: Daily Executive Briefing\n    Category: sense\n    Response Format: structured\n    Bidirectional: ✓ (stores to 'daily-briefing')\n    Required Context: (none)\n    Description: What's urgent, developing, changed, and the one question\n\n  decision-framing (v1.0.0)\n    Name: Decision Framing\n    Category: decide\n    Response Format: structured\n    Bidirectional: ✓ (stores to 'decision-framing')\n    Required Context:\n      - decision\n    Description: Structures ambiguous decisions into clear trade-offs..."
      },
      {
        "title": "Step 2: Fetch Expertise",
        "body": "Without context (for expertise that doesn't need it):\n\npatrick-cli fetch daily-briefing\n\nWith context variables:\n\npatrick-cli fetch decision-framing \\\n  --context '{\"decision\":\"Should we raise prices?\"}'\n\nGet JSON output for LLM integration:\n\npatrick-cli fetch daily-briefing \\\n  --json"
      },
      {
        "title": "Step 3: Send to LLM",
        "body": "When you fetch expertise, you receive:\n\ncontent: The filled expertise text to send to the LLM\nresponse_schema: JSON schema for validating the LLM response (if structured)\nresponse_format: How the LLM should format its response (structured/markdown/mixed)\n\nExample workflow:\n\n# Fetch expertise as JSON\nEXPERTISE_DATA=$(patrick-cli fetch daily-briefing --json)\n\n# Extract the content field\nEXPERTISE_CONTENT=$(echo \"$EXPERTISE_DATA\" | jq -r '.content')\n\n# Send to your LLM (pseudo-code)\n# LLM_RESPONSE=$(send_to_llm \"$EXPERTISE_CONTENT\")\n\n# If structured format, validate against schema\nRESPONSE_SCHEMA=$(echo \"$EXPERTISE_DATA\" | jq -r '.response_schema')\n# validate_json \"$LLM_RESPONSE\" \"$RESPONSE_SCHEMA\""
      },
      {
        "title": "Step 4: Store Results (Optional)",
        "body": "For bidirectional expertise, send the LLM response back to Patrick:\n\n# Store the response\npatrick-cli send daily-briefing \\\n  --data @llm-response.json\n\n# Later, retrieve stored data\npatrick-cli get daily-briefing"
      },
      {
        "title": "Context Variables",
        "body": "Many prompts require context to fill template variables. Use --context with a JSON object:\n\n{\n  \"current_phase\": \"pre-launch\",\n  \"launch_date\": \"2026-02-15\",\n  \"completed_items\": 12,\n  \"target_platforms\": [\"iOS\", \"Android\"]\n}\n\nVariables are substituted using {{context.key}} syntax in the expertise content."
      },
      {
        "title": "Response Formats",
        "body": "structured: LLM must return JSON matching the provided schema\nmarkdown: LLM returns markdown text\nmixed: LLM returns markdown with embedded JSON blocks"
      },
      {
        "title": "Bidirectional Expertise",
        "body": "Some expertise accepts data back from the LLM and stores it in Patrick's datastore:\n\n✓ (stores to 'key') - Use send command to store response\n✗ (one-way) - Expertise is read-only, no data storage"
      },
      {
        "title": "Pattern 1: Simple Fetch",
        "body": "# No context needed\npatrick-cli fetch daily-briefing"
      },
      {
        "title": "Pattern 2: Contextual Fetch",
        "body": "# Provide context variables\npatrick-cli fetch decision-framing \\\n  --context '{\"decision\":\"Should we expand to EMEA?\"}'"
      },
      {
        "title": "Pattern 3: Full Bidirectional Workflow",
        "body": "# 1. Fetch expertise template\npatrick-cli fetch daily-briefing --json > expertise.json\n\n# 2. Process with LLM (pseudo-code)\n# llm_process < expertise.json > response.json\n\n# 3. Store response back to Patrick\npatrick-cli send daily-briefing --data @response.json\n\n# 4. Later, retrieve stored data\npatrick-cli get daily-briefing"
      },
      {
        "title": "License Errors",
        "body": "Error: No license found at ~/.patrick/license.jwt\n\nSolution: Get a license from patrickbot.io and save it:\n\npatrick-cli set-license \"YOUR_LICENSE_HERE\"\n\nError: Expertise 'X' not in license\n\nSolution: Visit patrickbot.io to upgrade your license or add the expertise"
      },
      {
        "title": "Fetch Errors",
        "body": "Error fetching expertise: 401 Unauthorized\n\nSolution: Check your license is valid and not expired\n\nExpertise 'X' not found\n\nSolution: List available expertise with list to see what's accessible"
      },
      {
        "title": "Context Errors",
        "body": "Warning: Missing required context variables\n\nSolution: Check list-prompts output for required context fields and provide them via --context"
      },
      {
        "title": "Signature Verification Errors",
        "body": "Error: HMAC signature verification failed for 'storage_key'\n\nCause: Files in ~/.patrick/data/ were manually edited, corrupted, or modified outside of Patrick CLI.\n\nSolution: Delete the corrupted file and regenerate the data:\n\nrm ~/.patrick/data/storage_key.json\n# Re-run the command that generates this data\n\nPrevention: Never manually edit files in ~/.patrick/ - all data is signed with HMAC-SHA256 tied to your customer identity."
      },
      {
        "title": "Switching Licenses",
        "body": "Error: License belongs to a different account.\n\nCause: You're trying to set a license for a different account. Stored data is signed with your current customer identity and cannot be read under a different account.\n\nSolution: Use set-license with --wipe-data to switch accounts:\n\npatrick-cli set-license \"NEW_LICENSE\" --wipe-data\n\nThis deletes all stored data in ~/.patrick/data/ and saves the new license. You'll need to re-initialize afterwards."
      },
      {
        "title": "Security",
        "body": "Never commit license.jwt or environment files with real credentials\nLicenses are authenticated on every API call\nExpertise content is verified with SHA256 checksums\nOnly expertise listed in your license are accessible\n\n⚠️ IMPORTANT: Do not manually edit files in ~/.patrick/\n\nAll data stored in ~/.patrick/ is signed with HMAC-SHA256 tied to your verified customer identity:\n\nlicense.jwt - Your license token\njwks_cache.json - Public key cache for license verification\ndata/ - Stored expertise responses (if using bidirectional expertise)\n\nManual modifications will break signature verification and cause errors like:\n\nError: Stored data signature verification failed\n\nIf you need to reset your data, delete the specific file and re-run the command - don't edit it manually.\n\nSee {baseDir}/references/security.md for detailed information on Patrick's cryptographic signing model."
      },
      {
        "title": "Reference Documentation",
        "body": "See {baseDir}/references/ for:\n\nprompts-api.md - Full API documentation (now uses /v1/expertise endpoints)\nprompt-format.md - Expertise structure specification\nllm-integration.md - LLM integration patterns\nsecurity.md - Cryptographic signing and data integrity model"
      },
      {
        "title": "Custom Server URL",
        "body": "Point to a self-hosted Patrick server:\n\nexport PATRICK_SERVER_URL=\"https://patrick.mycompany.com\""
      },
      {
        "title": "Data Storage Path",
        "body": "Configure where Patrick stores local data (directory, not file):\n\nexport PATRICK_DATA_PATH=~/.patrick  # Default location\n\nPatrick will store customer data files in $PATRICK_DATA_PATH/data/<storage_key>.json"
      },
      {
        "title": "Debug Logging",
        "body": "Enable detailed logging:\n\nexport RUST_LOG=\"patrick_cli=debug\""
      }
    ],
    "body": "Patrick Skill\n\nPatrick is a licensed expertise management system that provides executive decision infrastructure through structured, context-aware expertise.\n\n⚠️ If Patrick isn't working: Check {baseDir}/install.md for complete setup instructions including license configuration and initialization.\n\nSetup Workflow\n1. Install the CLI\n\nRun the install script to download the patrick-cli binary from the Patrick server:\n\n./install.sh\n\n\nOr install directly via curl:\n\ncurl -fsSL https://portal.patrickbot.io/downloads/latest/install.sh | bash\n\n\nThis will download patrick-cli for your platform, verify its SHA256 checksum, and place it in $PATRICK_DATA_PATH/bin/patrick-cli (default: ~/.patrick/bin/). The Dockerfile and run.sh add this to PATH automatically, so you can call patrick-cli directly.\n\n2. Get Your License\n\nVisit patrickbot.io to obtain your Patrick license.\n\nOnce you have your license, send it to me via chat:\n\nHere's my Patrick license: <paste-your-license-here>\n\n\nI'll configure it automatically. Alternatively, you can set it manually:\n\npatrick-cli set-license \"your-license-here\"\n\n\nTo switch to a different account (wipes existing data since it's tied to your identity):\n\npatrick-cli set-license \"new-license\" --wipe-data\n\n3. Initialize Patrick Context\n\nCRITICAL: Before running any Patrick expertise, initialize the context:\n\npatrick-cli fetch initialize\n\n\nThis bootstraps Patrick with information about you, your company, and your team. Without initialization, other expertise prompts won't work properly.\n\n4. Verify Installation\n\nTest it by listing available expertise:\n\npatrick-cli list\n\n\nNote: The server URL defaults to https://portal.patrickbot.io. For local development:\n\nHost machine: export PATRICK_SERVER_URL=\"http://localhost:8080\"\nDocker container: export PATRICK_SERVER_URL=\"http://host.docker.internal:8080\"\n\nThe patrick-moltbot Docker container is pre-configured with the correct URL.\n\n4. Set Up Cronjobs (Critical)\n\nPatrick requires scheduled cronjobs to function properly. Read INSTALL.md in this directory for complete setup instructions including recommended cronjob schedules for daily briefings and commitment tracking.\n\nLicense auto-renewal in cron: Before running any scheduled task, check if the license is about to expire and renew it:\n\n# Check license expiry and renew if <1 day remaining\nDAYS=$(patrick-cli license 2>&1 | grep \"days remaining\" | grep -oP '\\d+')\nif [ -n \"$DAYS\" ] && [ \"$DAYS\" -lt 1 ]; then\n  patrick-cli renew\nfi\n\n# Then run your scheduled expertise\npatrick-cli fetch daily-briefing --json\n\n\nThe patrick-cli renew command contacts the server, verifies your active subscription, and saves a fresh license with the remaining subscription days.\n\n5. Keeping Patrick Updated\n\nCheck for updates and upgrade to the latest version:\n\n# Check if update is available\npatrick-cli upgrade --check\n\n# Upgrade to latest version\npatrick-cli upgrade\n\n\nThe upgrade process:\n\nContacts Patrick server for latest version info\nVerifies SHA256 checksum of downloaded binary\nBacks up current version\nInstalls new version\nShows release notes\n\nUpdates are cryptographically verified and signed by the Patrick server.\n\nWhat You Get\n\nWhen you list expertise, you'll see:\n\nExpertise ID and version\nName and description\nCategory (sense, interpret, decide, align, execute, learn, reporting, intelligence)\nResponse format (structured JSON, markdown, mixed)\nRequired context variables\nWhether it's bidirectional (accepts data back)\nIMPORTANT: Gathering Context Before Using Patrick\n\nFor AI Agents: Before running any Patrick expertise, you MUST:\n\nCheck for company data files in /app/company/ or similar locations\nRead all available context:\nCompany data JSON files\nSlack message archives\nJIRA tickets\nGit commit history\nCalendar events\nAny operational data available\nLoad this context into your working memory\nThen run Patrick expertise with full awareness of company operations\n\nPatrick expertise is most effective when you have complete situational awareness. Don't run Patrick commands without first gathering all available company data.\n\nCommands Overview\nCommand\tPurpose\tExample\nset-license\tSet or update your Patrick license\tpatrick-cli set-license \"LICENSE_TOKEN\"\nlist\tList all available expertise\tpatrick-cli list\nfetch\tGet expertise template from server\tpatrick-cli fetch daily-briefing\nsend\tStore results back to Patrick\tpatrick-cli send daily-briefing --data @output.json\nget\tRetrieve previously stored results\tpatrick-cli get daily-briefing\n\nKey Distinction:\n\nfetch = Get the expertise template/prompt FROM the server\nget = Retrieve your stored data/results THAT YOU SENT BACK\nUsing Expertise with LLMs\nWorkflow Overview\nList expertise to see what's available in your license\nFetch an expertise with optional context variables\nSend expertise content to an LLM for processing\nValidate response against the provided JSON schema (if structured)\nStore response back to Patrick using send (if bidirectional)\nRetrieve stored data later using get\nStep 1: List Available Expertise\npatrick-cli list\n\n\nExample output:\n\nAvailable Expertise:\n\n  daily-briefing (v1.0.0)\n    Name: Daily Executive Briefing\n    Category: sense\n    Response Format: structured\n    Bidirectional: ✓ (stores to 'daily-briefing')\n    Required Context: (none)\n    Description: What's urgent, developing, changed, and the one question\n\n  decision-framing (v1.0.0)\n    Name: Decision Framing\n    Category: decide\n    Response Format: structured\n    Bidirectional: ✓ (stores to 'decision-framing')\n    Required Context:\n      - decision\n    Description: Structures ambiguous decisions into clear trade-offs...\n\nStep 2: Fetch Expertise\n\nWithout context (for expertise that doesn't need it):\n\npatrick-cli fetch daily-briefing\n\n\nWith context variables:\n\npatrick-cli fetch decision-framing \\\n  --context '{\"decision\":\"Should we raise prices?\"}'\n\n\nGet JSON output for LLM integration:\n\npatrick-cli fetch daily-briefing \\\n  --json\n\nStep 3: Send to LLM\n\nWhen you fetch expertise, you receive:\n\ncontent: The filled expertise text to send to the LLM\nresponse_schema: JSON schema for validating the LLM response (if structured)\nresponse_format: How the LLM should format its response (structured/markdown/mixed)\n\nExample workflow:\n\n# Fetch expertise as JSON\nEXPERTISE_DATA=$(patrick-cli fetch daily-briefing --json)\n\n# Extract the content field\nEXPERTISE_CONTENT=$(echo \"$EXPERTISE_DATA\" | jq -r '.content')\n\n# Send to your LLM (pseudo-code)\n# LLM_RESPONSE=$(send_to_llm \"$EXPERTISE_CONTENT\")\n\n# If structured format, validate against schema\nRESPONSE_SCHEMA=$(echo \"$EXPERTISE_DATA\" | jq -r '.response_schema')\n# validate_json \"$LLM_RESPONSE\" \"$RESPONSE_SCHEMA\"\n\nStep 4: Store Results (Optional)\n\nFor bidirectional expertise, send the LLM response back to Patrick:\n\n# Store the response\npatrick-cli send daily-briefing \\\n  --data @llm-response.json\n\n# Later, retrieve stored data\npatrick-cli get daily-briefing\n\nKey Concepts\nContext Variables\n\nMany prompts require context to fill template variables. Use --context with a JSON object:\n\n{\n  \"current_phase\": \"pre-launch\",\n  \"launch_date\": \"2026-02-15\",\n  \"completed_items\": 12,\n  \"target_platforms\": [\"iOS\", \"Android\"]\n}\n\n\nVariables are substituted using {{context.key}} syntax in the expertise content.\n\nResponse Formats\nstructured: LLM must return JSON matching the provided schema\nmarkdown: LLM returns markdown text\nmixed: LLM returns markdown with embedded JSON blocks\nBidirectional Expertise\n\nSome expertise accepts data back from the LLM and stores it in Patrick's datastore:\n\n✓ (stores to 'key') - Use send command to store response\n✗ (one-way) - Expertise is read-only, no data storage\nCommon Patterns\nPattern 1: Simple Fetch\n# No context needed\npatrick-cli fetch daily-briefing\n\nPattern 2: Contextual Fetch\n# Provide context variables\npatrick-cli fetch decision-framing \\\n  --context '{\"decision\":\"Should we expand to EMEA?\"}'\n\nPattern 3: Full Bidirectional Workflow\n# 1. Fetch expertise template\npatrick-cli fetch daily-briefing --json > expertise.json\n\n# 2. Process with LLM (pseudo-code)\n# llm_process < expertise.json > response.json\n\n# 3. Store response back to Patrick\npatrick-cli send daily-briefing --data @response.json\n\n# 4. Later, retrieve stored data\npatrick-cli get daily-briefing\n\nTroubleshooting\nLicense Errors\nError: No license found at ~/.patrick/license.jwt\n\n\nSolution: Get a license from patrickbot.io and save it:\n\npatrick-cli set-license \"YOUR_LICENSE_HERE\"\n\nError: Expertise 'X' not in license\n\n\nSolution: Visit patrickbot.io to upgrade your license or add the expertise\n\nFetch Errors\nError fetching expertise: 401 Unauthorized\n\n\nSolution: Check your license is valid and not expired\n\nExpertise 'X' not found\n\n\nSolution: List available expertise with list to see what's accessible\n\nContext Errors\nWarning: Missing required context variables\n\n\nSolution: Check list-prompts output for required context fields and provide them via --context\n\nSignature Verification Errors\nError: HMAC signature verification failed for 'storage_key'\n\n\nCause: Files in ~/.patrick/data/ were manually edited, corrupted, or modified outside of Patrick CLI.\n\nSolution: Delete the corrupted file and regenerate the data:\n\nrm ~/.patrick/data/storage_key.json\n# Re-run the command that generates this data\n\n\nPrevention: Never manually edit files in ~/.patrick/ - all data is signed with HMAC-SHA256 tied to your customer identity.\n\nSwitching Licenses\nError: License belongs to a different account.\n\n\nCause: You're trying to set a license for a different account. Stored data is signed with your current customer identity and cannot be read under a different account.\n\nSolution: Use set-license with --wipe-data to switch accounts:\n\npatrick-cli set-license \"NEW_LICENSE\" --wipe-data\n\n\nThis deletes all stored data in ~/.patrick/data/ and saves the new license. You'll need to re-initialize afterwards.\n\nSecurity\nNever commit license.jwt or environment files with real credentials\nLicenses are authenticated on every API call\nExpertise content is verified with SHA256 checksums\nOnly expertise listed in your license are accessible\n\n⚠️ IMPORTANT: Do not manually edit files in ~/.patrick/\n\nAll data stored in ~/.patrick/ is signed with HMAC-SHA256 tied to your verified customer identity:\n\nlicense.jwt - Your license token\njwks_cache.json - Public key cache for license verification\ndata/ - Stored expertise responses (if using bidirectional expertise)\n\nManual modifications will break signature verification and cause errors like:\n\nError: Stored data signature verification failed\n\n\nIf you need to reset your data, delete the specific file and re-run the command - don't edit it manually.\n\nSee {baseDir}/references/security.md for detailed information on Patrick's cryptographic signing model.\n\nReference Documentation\n\nSee {baseDir}/references/ for:\n\nprompts-api.md - Full API documentation (now uses /v1/expertise endpoints)\nprompt-format.md - Expertise structure specification\nllm-integration.md - LLM integration patterns\nsecurity.md - Cryptographic signing and data integrity model\nAdvanced Usage\nCustom Server URL\n\nPoint to a self-hosted Patrick server:\n\nexport PATRICK_SERVER_URL=\"https://patrick.mycompany.com\"\n\nData Storage Path\n\nConfigure where Patrick stores local data (directory, not file):\n\nexport PATRICK_DATA_PATH=~/.patrick  # Default location\n\n\nPatrick will store customer data files in $PATRICK_DATA_PATH/data/<storage_key>.json\n\nDebug Logging\n\nEnable detailed logging:\n\nexport RUST_LOG=\"patrick_cli=debug\""
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/MCSH/patrick",
    "publisherUrl": "https://clawhub.ai/MCSH/patrick",
    "owner": "MCSH",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/patrick",
    "downloadUrl": "https://openagent3.xyz/downloads/patrick",
    "agentUrl": "https://openagent3.xyz/skills/patrick/agent",
    "manifestUrl": "https://openagent3.xyz/skills/patrick/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/patrick/agent.md"
  }
}