{
  "schemaVersion": "1.0",
  "item": {
    "slug": "salesforce-skill",
    "name": "Salesforce Skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/lucas-riverbi/salesforce-skill",
    "canonicalUrl": "https://clawhub.ai/lucas-riverbi/salesforce-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/salesforce-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=salesforce-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/salesforce-helper.sh"
    ],
    "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/salesforce-skill"
    },
    "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/salesforce-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/salesforce-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/salesforce-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/salesforce-skill/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Salesforce CRM Skill",
        "body": "Interact with Salesforce CRM using the official Salesforce CLI (sf) and REST API."
      },
      {
        "title": "Prerequisites",
        "body": "Salesforce CLI (sf) installed via npm or Homebrew\nAuthentication configured via one of:\n\nsf org login web (OAuth browser flow - recommended for interactive)\nsf org login jwt (JWT for headless/automated)\nSALESFORCE_ACCESS_TOKEN environment variable (direct token)"
      },
      {
        "title": "Authentication & Org Management",
        "body": "# Login to org (opens browser)\nsf org login web --alias myorg\n\n# Login with JWT (headless)\nsf org login jwt --client-id <consumer-key> --jwt-key-file <path-to-key> --username <user> --alias myorg\n\n# List connected orgs\nsf org list\n\n# Set default org\nsf config set target-org myorg\n\n# Display org info\nsf org display --target-org myorg"
      },
      {
        "title": "Query Records (SOQL)",
        "body": "# Query contacts\nsf data query --query \"SELECT Id, Name, Email, Phone FROM Contact LIMIT 10\" --target-org myorg\n\n# Query with WHERE clause\nsf data query --query \"SELECT Id, Name, Amount, StageName FROM Opportunity WHERE StageName = 'Prospecting'\" --target-org myorg\n\n# Query accounts by name\nsf data query --query \"SELECT Id, Name, Industry, Website FROM Account WHERE Name LIKE '%Acme%'\" --target-org myorg\n\n# Export to CSV\nsf data query --query \"SELECT Id, Name, Email FROM Contact\" --result-format csv > contacts.csv\n\n# Export to JSON\nsf data query --query \"SELECT Id, Name FROM Account\" --result-format json"
      },
      {
        "title": "Create Records",
        "body": "# Create a Contact\nsf data create record --sobject Contact --values \"FirstName='John' LastName='Doe' Email='john.doe@example.com'\" --target-org myorg\n\n# Create an Account\nsf data create record --sobject Account --values \"Name='Acme Corp' Industry='Technology' Website='https://acme.com'\" --target-org myorg\n\n# Create an Opportunity\nsf data create record --sobject Opportunity --values \"Name='Big Deal' AccountId='001XXXXXXXXXXXXXXX' StageName='Prospecting' CloseDate='2025-06-30' Amount=50000\" --target-org myorg\n\n# Create a Lead\nsf data create record --sobject Lead --values \"FirstName='Jane' LastName='Smith' Company='NewCo' Email='jane@newco.com' Status='Open - Not Contacted'\" --target-org myorg\n\n# Create a Case\nsf data create record --sobject Case --values \"Subject='Support Request' Description='Customer needs help' Status='New' Priority='Medium'\" --target-org myorg"
      },
      {
        "title": "Update Records",
        "body": "# Update a Contact\nsf data update record --sobject Contact --record-id 003XXXXXXXXXXXXXXX --values \"Phone='555-1234' Title='VP Sales'\" --target-org myorg\n\n# Update an Opportunity stage\nsf data update record --sobject Opportunity --record-id 006XXXXXXXXXXXXXXX --values \"StageName='Negotiation/Review' Amount=75000\" --target-org myorg\n\n# Update Account\nsf data update record --sobject Account --record-id 001XXXXXXXXXXXXXXX --values \"Description='Key strategic account'\" --target-org myorg"
      },
      {
        "title": "Delete Records",
        "body": "# Delete a record\nsf data delete record --sobject Contact --record-id 003XXXXXXXXXXXXXXX --target-org myorg\n\n# Bulk delete via query (careful!)\nsf data delete bulk --sobject Lead --file leads-to-delete.csv --target-org myorg"
      },
      {
        "title": "Bulk Operations",
        "body": "# Bulk insert from CSV\nsf data import bulk --sobject Contact --file contacts.csv --target-org myorg\n\n# Bulk update from CSV\nsf data upsert bulk --sobject Account --file accounts.csv --external-id Id --target-org myorg\n\n# Check bulk job status\nsf data bulk status --job-id <job-id> --target-org myorg"
      },
      {
        "title": "Schema & Metadata",
        "body": "# Describe an object (get fields)\nsf sobject describe --sobject Account --target-org myorg\n\n# List all objects\nsf sobject list --target-org myorg\n\n# Get field details\nsf sobject describe --sobject Opportunity --target-org myorg | jq '.fields[] | {name, type, label}'"
      },
      {
        "title": "Pipeline Report",
        "body": "SELECT StageName, COUNT(Id) NumDeals, SUM(Amount) TotalValue\nFROM Opportunity\nWHERE IsClosed = false\nGROUP BY StageName"
      },
      {
        "title": "Recent Activities",
        "body": "SELECT Id, Subject, WhoId, WhatId, ActivityDate\nFROM Task\nWHERE OwnerId = '<user-id>'\nAND ActivityDate >= LAST_N_DAYS:7\nORDER BY ActivityDate DESC"
      },
      {
        "title": "Contacts by Account",
        "body": "SELECT Account.Name, Id, Name, Email, Title\nFROM Contact\nWHERE Account.Name = 'Acme Corp'"
      },
      {
        "title": "Open Cases",
        "body": "SELECT Id, CaseNumber, Subject, Status, Priority, CreatedDate\nFROM Case\nWHERE IsClosed = false\nORDER BY Priority, CreatedDate"
      },
      {
        "title": "Leads by Status",
        "body": "SELECT Status, COUNT(Id) Total\nFROM Lead\nWHERE IsConverted = false\nGROUP BY Status"
      },
      {
        "title": "REST API (Alternative)",
        "body": "For operations not covered by CLI, use curl with the REST API:\n\n# Set variables\nINSTANCE_URL=\"https://yourorg.salesforce.com\"\nACCESS_TOKEN=\"$SALESFORCE_ACCESS_TOKEN\"\n\n# Query via REST\ncurl -s \"$INSTANCE_URL/services/data/v59.0/query?q=SELECT+Id,Name+FROM+Account+LIMIT+5\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\"\n\n# Create record via REST\ncurl -s \"$INSTANCE_URL/services/data/v59.0/sobjects/Contact\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"FirstName\":\"Test\",\"LastName\":\"User\",\"Email\":\"test@example.com\"}'"
      },
      {
        "title": "Error Handling",
        "body": "INVALID_SESSION_ID: Token expired. Re-authenticate with sf org login web\nMALFORMED_QUERY: Check SOQL syntax. Use single quotes for strings.\nENTITY_IS_DELETED: Record was deleted. Query to verify before updating.\nREQUIRED_FIELD_MISSING: Check object schema for required fields."
      },
      {
        "title": "Tips",
        "body": "Use aliases: Set --alias when logging in, then use --target-org alias\nJSON output: Add --json flag for programmatic parsing\nDry run: Use --dry-run flag on bulk operations to preview\nField names: Use API names (e.g., FirstName), not labels (e.g., \"First Name\")\nDate format: Use YYYY-MM-DD for dates, YYYY-MM-DDThh:mm:ssZ for datetimes"
      },
      {
        "title": "Limitations",
        "body": "Bulk operations have daily API limits (varies by Salesforce edition)\nSome objects (e.g., ContentDocument) have special handling requirements\nComplex queries may hit governor limits"
      }
    ],
    "body": "Main skill definition with frontmatter, CLI reference, SOQL patterns\n\n---\nname: salesforce\ndescription: Manage Salesforce CRM - query records, create/update contacts, accounts, opportunities, leads, and cases. Use when the user asks about CRM data, sales pipeline, customer records, or Salesforce operations.\nmetadata: {\"moltbot\":{\"emoji\":\"☁️\",\"requires\":{\"bins\":[\"sf\"],\"env\":[\"SALESFORCE_ACCESS_TOKEN\"]},\"primaryEnv\":\"SALESFORCE_ACCESS_TOKEN\",\"install\":[{\"id\":\"npm\",\"kind\":\"node\",\"package\":\"@salesforce/cli\",\"bins\":[\"sf\"],\"label\":\"Install Salesforce CLI (npm)\"},{\"id\":\"brew\",\"kind\":\"brew\",\"formula\":\"salesforce-cli\",\"bins\":[\"sf\"],\"label\":\"Install Salesforce CLI (brew)\"}]}}\nhomepage: https://developer.salesforce.com/tools/salesforcecli\n---\n\nSalesforce CRM Skill\n\nInteract with Salesforce CRM using the official Salesforce CLI (sf) and REST API.\n\nPrerequisites\nSalesforce CLI (sf) installed via npm or Homebrew\nAuthentication configured via one of:\nsf org login web (OAuth browser flow - recommended for interactive)\nsf org login jwt (JWT for headless/automated)\nSALESFORCE_ACCESS_TOKEN environment variable (direct token)\nQuick Reference\nAuthentication & Org Management\n# Login to org (opens browser)\nsf org login web --alias myorg\n\n# Login with JWT (headless)\nsf org login jwt --client-id <consumer-key> --jwt-key-file <path-to-key> --username <user> --alias myorg\n\n# List connected orgs\nsf org list\n\n# Set default org\nsf config set target-org myorg\n\n# Display org info\nsf org display --target-org myorg\n\nQuery Records (SOQL)\n# Query contacts\nsf data query --query \"SELECT Id, Name, Email, Phone FROM Contact LIMIT 10\" --target-org myorg\n\n# Query with WHERE clause\nsf data query --query \"SELECT Id, Name, Amount, StageName FROM Opportunity WHERE StageName = 'Prospecting'\" --target-org myorg\n\n# Query accounts by name\nsf data query --query \"SELECT Id, Name, Industry, Website FROM Account WHERE Name LIKE '%Acme%'\" --target-org myorg\n\n# Export to CSV\nsf data query --query \"SELECT Id, Name, Email FROM Contact\" --result-format csv > contacts.csv\n\n# Export to JSON\nsf data query --query \"SELECT Id, Name FROM Account\" --result-format json\n\nCreate Records\n# Create a Contact\nsf data create record --sobject Contact --values \"FirstName='John' LastName='Doe' Email='john.doe@example.com'\" --target-org myorg\n\n# Create an Account\nsf data create record --sobject Account --values \"Name='Acme Corp' Industry='Technology' Website='https://acme.com'\" --target-org myorg\n\n# Create an Opportunity\nsf data create record --sobject Opportunity --values \"Name='Big Deal' AccountId='001XXXXXXXXXXXXXXX' StageName='Prospecting' CloseDate='2025-06-30' Amount=50000\" --target-org myorg\n\n# Create a Lead\nsf data create record --sobject Lead --values \"FirstName='Jane' LastName='Smith' Company='NewCo' Email='jane@newco.com' Status='Open - Not Contacted'\" --target-org myorg\n\n# Create a Case\nsf data create record --sobject Case --values \"Subject='Support Request' Description='Customer needs help' Status='New' Priority='Medium'\" --target-org myorg\n\nUpdate Records\n# Update a Contact\nsf data update record --sobject Contact --record-id 003XXXXXXXXXXXXXXX --values \"Phone='555-1234' Title='VP Sales'\" --target-org myorg\n\n# Update an Opportunity stage\nsf data update record --sobject Opportunity --record-id 006XXXXXXXXXXXXXXX --values \"StageName='Negotiation/Review' Amount=75000\" --target-org myorg\n\n# Update Account\nsf data update record --sobject Account --record-id 001XXXXXXXXXXXXXXX --values \"Description='Key strategic account'\" --target-org myorg\n\nDelete Records\n# Delete a record\nsf data delete record --sobject Contact --record-id 003XXXXXXXXXXXXXXX --target-org myorg\n\n# Bulk delete via query (careful!)\nsf data delete bulk --sobject Lead --file leads-to-delete.csv --target-org myorg\n\nBulk Operations\n# Bulk insert from CSV\nsf data import bulk --sobject Contact --file contacts.csv --target-org myorg\n\n# Bulk update from CSV\nsf data upsert bulk --sobject Account --file accounts.csv --external-id Id --target-org myorg\n\n# Check bulk job status\nsf data bulk status --job-id <job-id> --target-org myorg\n\nSchema & Metadata\n# Describe an object (get fields)\nsf sobject describe --sobject Account --target-org myorg\n\n# List all objects\nsf sobject list --target-org myorg\n\n# Get field details\nsf sobject describe --sobject Opportunity --target-org myorg | jq '.fields[] | {name, type, label}'\n\nCommon SOQL Patterns\nPipeline Report\nSELECT StageName, COUNT(Id) NumDeals, SUM(Amount) TotalValue\nFROM Opportunity\nWHERE IsClosed = false\nGROUP BY StageName\n\nRecent Activities\nSELECT Id, Subject, WhoId, WhatId, ActivityDate\nFROM Task\nWHERE OwnerId = '<user-id>'\nAND ActivityDate >= LAST_N_DAYS:7\nORDER BY ActivityDate DESC\n\nContacts by Account\nSELECT Account.Name, Id, Name, Email, Title\nFROM Contact\nWHERE Account.Name = 'Acme Corp'\n\nOpen Cases\nSELECT Id, CaseNumber, Subject, Status, Priority, CreatedDate\nFROM Case\nWHERE IsClosed = false\nORDER BY Priority, CreatedDate\n\nLeads by Status\nSELECT Status, COUNT(Id) Total\nFROM Lead\nWHERE IsConverted = false\nGROUP BY Status\n\nREST API (Alternative)\n\nFor operations not covered by CLI, use curl with the REST API:\n\n# Set variables\nINSTANCE_URL=\"https://yourorg.salesforce.com\"\nACCESS_TOKEN=\"$SALESFORCE_ACCESS_TOKEN\"\n\n# Query via REST\ncurl -s \"$INSTANCE_URL/services/data/v59.0/query?q=SELECT+Id,Name+FROM+Account+LIMIT+5\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\"\n\n# Create record via REST\ncurl -s \"$INSTANCE_URL/services/data/v59.0/sobjects/Contact\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"FirstName\":\"Test\",\"LastName\":\"User\",\"Email\":\"test@example.com\"}'\n\nError Handling\nINVALID_SESSION_ID: Token expired. Re-authenticate with sf org login web\nMALFORMED_QUERY: Check SOQL syntax. Use single quotes for strings.\nENTITY_IS_DELETED: Record was deleted. Query to verify before updating.\nREQUIRED_FIELD_MISSING: Check object schema for required fields.\nTips\nUse aliases: Set --alias when logging in, then use --target-org alias\nJSON output: Add --json flag for programmatic parsing\nDry run: Use --dry-run flag on bulk operations to preview\nField names: Use API names (e.g., FirstName), not labels (e.g., \"First Name\")\nDate format: Use YYYY-MM-DD for dates, YYYY-MM-DDThh:mm:ssZ for datetimes\nLimitations\nBulk operations have daily API limits (varies by Salesforce edition)\nSome objects (e.g., ContentDocument) have special handling requirements\nComplex queries may hit governor limits"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/lucas-riverbi/salesforce-skill",
    "publisherUrl": "https://clawhub.ai/lucas-riverbi/salesforce-skill",
    "owner": "lucas-riverbi",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/salesforce-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/salesforce-skill",
    "agentUrl": "https://openagent3.xyz/skills/salesforce-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/salesforce-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/salesforce-skill/agent.md"
  }
}