{
  "schemaVersion": "1.0",
  "item": {
    "slug": "freedcamp-agent-skill",
    "name": "Freedcamp Project Management",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/agrublev/freedcamp-agent-skill",
    "canonicalUrl": "https://clawhub.ai/agrublev/freedcamp-agent-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/freedcamp-agent-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=freedcamp-agent-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "_meta.json",
      "README.md",
      "SKILL.md",
      "AGENTS.md",
      "scripts/freedcamp.mjs",
      "scripts/demo.mjs"
    ],
    "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-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-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/freedcamp-agent-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/freedcamp-agent-skill",
    "agentPageUrl": "https://openagent3.xyz/skills/freedcamp-agent-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/freedcamp-agent-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/freedcamp-agent-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": "Freedcamp",
        "body": "This skill provides a dependency-free Node.js CLI that calls the Freedcamp REST API (v1) using HMAC-SHA1 secured credentials (API Key + API Secret).\n\nScript: {baseDir}/scripts/freedcamp.mjs\nAuth: FREEDCAMP_API_KEY + FREEDCAMP_API_SECRET\nOutput: JSON only (stdout), suitable for agents and automation"
      },
      {
        "title": "Setup",
        "body": "Obtain your Freedcamp API key and secret from your Freedcamp account settings.\nProvide both values as environment variables."
      },
      {
        "title": "Common injection patterns",
        "body": "Shell env (local testing):\nexport FREEDCAMP_API_KEY=\"...\"\nexport FREEDCAMP_API_SECRET=\"...\"\n\n\n\nOpenClaw config (recommended): set skills.entries.freedcamp.apiKey and skills.entries.freedcamp.env.FREEDCAMP_API_SECRET so secrets are injected only for the agent run."
      },
      {
        "title": "Configure via OpenClaw CLI (recommended)",
        "body": "openclaw config set skills.entries.freedcamp.enabled true\nopenclaw config set skills.entries.freedcamp.apiKey \"YOUR_API_KEY\"\nopenclaw config set skills.entries.freedcamp.env.FREEDCAMP_API_SECRET \"YOUR_API_SECRET\"\n\nVerify what is stored:\n\nopenclaw config get skills.entries.freedcamp\n\nRemove stored credentials:\n\nopenclaw config unset skills.entries.freedcamp.apiKey\nopenclaw config unset skills.entries.freedcamp.env.FREEDCAMP_API_SECRET"
      },
      {
        "title": "First calls (sanity + discovery)",
        "body": "Who am I / session info:\nnode {baseDir}/scripts/freedcamp.mjs me\n\n\nList all groups, projects, and apps:\nnode {baseDir}/scripts/freedcamp.mjs groups-projects"
      },
      {
        "title": "ID resolution",
        "body": "When the user provides project names, resolve to IDs using:\n\ngroups-projects returns all groups with their projects, including project IDs and names\nUse the exact project_name from the output for other commands\n\nAvoid guessing a project ID when multiple matches exist."
      },
      {
        "title": "List tasks in a project",
        "body": "node {baseDir}/scripts/freedcamp.mjs tasks --project <project_id> --all"
      },
      {
        "title": "List tasks with filters",
        "body": "node {baseDir}/scripts/freedcamp.mjs tasks --project <project_id> --status in_progress,not_started --assigned_to 2,-1\n\nUseful filters:\n\n--status comma-separated: not_started, completed, in_progress, invalid, review\n--assigned_to comma-separated user IDs. 0 = unassigned, -1 = everyone\n--due_from YYYY-MM-DD / --due_to YYYY-MM-DD\n--created_from YYYY-MM-DD / --created_to YYYY-MM-DD\n--list_status active|archived|all\n--with_archived true to include tasks from archived projects\n--limit <n> (max 200 per page, default 200)\n--offset <n> for pagination"
      },
      {
        "title": "Get a single task (with comments and files)",
        "body": "node {baseDir}/scripts/freedcamp.mjs task <task_id>"
      },
      {
        "title": "Create a task",
        "body": "node {baseDir}/scripts/freedcamp.mjs create-task --project <project_id> --title \"Task title\"\n\nWith optional description and task list:\n\nnode {baseDir}/scripts/freedcamp.mjs create-task --project <project_id> --title \"Task title\" --description \"Details here\" --task_group <task_group_id>"
      },
      {
        "title": "Update a task",
        "body": "node {baseDir}/scripts/freedcamp.mjs update-task <task_id> --title \"New title\" --status in_progress\n\nStatus values: not_started (0), completed (1), in_progress (2), invalid (3), review (4)"
      },
      {
        "title": "Create a task by project name",
        "body": "node {baseDir}/scripts/freedcamp.mjs create-task-by-name --project_name \"My Project\" --app_name \"Tasks\" --title \"New task\"\n\nResolves the project name to an ID using session data. Currently supports the Tasks app."
      },
      {
        "title": "Task lists (groups)",
        "body": "List task lists for a project:\nnode {baseDir}/scripts/freedcamp.mjs task-lists --project <project_id>\n\n\nSpecify app (default is Tasks / app_id 2):\nnode {baseDir}/scripts/freedcamp.mjs task-lists --project <project_id> --app_id 2"
      },
      {
        "title": "Comments",
        "body": "Add a comment to any item:\nnode {baseDir}/scripts/freedcamp.mjs comment <item_id> --app_name \"Tasks\" --text \"My comment\"\n\nComments are automatically wrapped in <p> tags. You can also pass raw HTML:\n\nnode {baseDir}/scripts/freedcamp.mjs comment <item_id> --app_name \"Tasks\" --html \"<p>Bold <b>text</b></p>\""
      },
      {
        "title": "App names for comments",
        "body": "When adding comments, the --app_name must be one of:\nTasks, Discussions, Milestones, Time, Files, Issue Tracker, Wikis, CRM, Passwords, Calendar, Planner, Translations"
      },
      {
        "title": "Notifications",
        "body": "Fetch recent notifications (last 60 days):\nnode {baseDir}/scripts/freedcamp.mjs notifications\n\n\nMark a notification as read:\nnode {baseDir}/scripts/freedcamp.mjs mark-read <notification_uid>"
      },
      {
        "title": "Task statuses",
        "body": "NameValueCLI flagNot Started0not_startedCompleted1completedIn Progress2in_progressInvalid3invalidReview4review"
      },
      {
        "title": "Priorities",
        "body": "NameValueNone0Low1Medium2High3"
      },
      {
        "title": "App types",
        "body": "IDNameKey2TasksTODOS3DiscussionsDISCUSSIONS4MilestonesMILESTONES5TimeTIME6FilesFILES13Issue TrackerBUGTRACKER14WikisWIKI16CRMCRM17PasswordsPASSMAN19CalendarCALENDAR47PlannerPLANNER48TranslationsTRANSLATIONS"
      },
      {
        "title": "Important notes",
        "body": "Comments must contain HTML. Plain text passed via --text is auto-wrapped in <p> tags.\nTask pagination max is 200 per request; use --offset for more.\nSession is cached locally and auto-refreshes on 401 errors.\nThe --all flag on tasks auto-paginates to fetch every result."
      },
      {
        "title": "Out of scope",
        "body": "Invoices and Invoices Plus APIs are not exposed.\n\"Bot personality\" is not embedded; configure behavior in your agent prompt."
      }
    ],
    "body": "Freedcamp\n\nThis skill provides a dependency-free Node.js CLI that calls the Freedcamp REST API (v1) using HMAC-SHA1 secured credentials (API Key + API Secret).\n\nScript: {baseDir}/scripts/freedcamp.mjs\nAuth: FREEDCAMP_API_KEY + FREEDCAMP_API_SECRET\nOutput: JSON only (stdout), suitable for agents and automation\nSetup\nObtain your Freedcamp API key and secret from your Freedcamp account settings.\nProvide both values as environment variables.\nCommon injection patterns\n\nShell env (local testing):\n\nexport FREEDCAMP_API_KEY=\"...\"\nexport FREEDCAMP_API_SECRET=\"...\"\n\n\nOpenClaw config (recommended): set skills.entries.freedcamp.apiKey and skills.entries.freedcamp.env.FREEDCAMP_API_SECRET so secrets are injected only for the agent run.\n\nConfigure via OpenClaw CLI (recommended)\nopenclaw config set skills.entries.freedcamp.enabled true\nopenclaw config set skills.entries.freedcamp.apiKey \"YOUR_API_KEY\"\nopenclaw config set skills.entries.freedcamp.env.FREEDCAMP_API_SECRET \"YOUR_API_SECRET\"\n\n\nVerify what is stored:\n\nopenclaw config get skills.entries.freedcamp\n\n\nRemove stored credentials:\n\nopenclaw config unset skills.entries.freedcamp.apiKey\nopenclaw config unset skills.entries.freedcamp.env.FREEDCAMP_API_SECRET\n\nFirst calls (sanity + discovery)\n\nWho am I / session info:\n\nnode {baseDir}/scripts/freedcamp.mjs me\n\nList all groups, projects, and apps:\n\nnode {baseDir}/scripts/freedcamp.mjs groups-projects\n\nID resolution\n\nWhen the user provides project names, resolve to IDs using:\n\ngroups-projects returns all groups with their projects, including project IDs and names\nUse the exact project_name from the output for other commands\n\nAvoid guessing a project ID when multiple matches exist.\n\nCore: tasks\nList tasks in a project\n\nnode {baseDir}/scripts/freedcamp.mjs tasks --project <project_id> --all\n\nList tasks with filters\n\nnode {baseDir}/scripts/freedcamp.mjs tasks --project <project_id> --status in_progress,not_started --assigned_to 2,-1\n\nUseful filters:\n\n--status comma-separated: not_started, completed, in_progress, invalid, review\n--assigned_to comma-separated user IDs. 0 = unassigned, -1 = everyone\n--due_from YYYY-MM-DD / --due_to YYYY-MM-DD\n--created_from YYYY-MM-DD / --created_to YYYY-MM-DD\n--list_status active|archived|all\n--with_archived true to include tasks from archived projects\n--limit <n> (max 200 per page, default 200)\n--offset <n> for pagination\nGet a single task (with comments and files)\n\nnode {baseDir}/scripts/freedcamp.mjs task <task_id>\n\nCreate a task\n\nnode {baseDir}/scripts/freedcamp.mjs create-task --project <project_id> --title \"Task title\"\n\nWith optional description and task list:\n\nnode {baseDir}/scripts/freedcamp.mjs create-task --project <project_id> --title \"Task title\" --description \"Details here\" --task_group <task_group_id>\n\nUpdate a task\n\nnode {baseDir}/scripts/freedcamp.mjs update-task <task_id> --title \"New title\" --status in_progress\n\nStatus values: not_started (0), completed (1), in_progress (2), invalid (3), review (4)\n\nCreate a task by project name\n\nnode {baseDir}/scripts/freedcamp.mjs create-task-by-name --project_name \"My Project\" --app_name \"Tasks\" --title \"New task\"\n\nResolves the project name to an ID using session data. Currently supports the Tasks app.\n\nTask lists (groups)\n\nList task lists for a project:\n\nnode {baseDir}/scripts/freedcamp.mjs task-lists --project <project_id>\n\nSpecify app (default is Tasks / app_id 2):\n\nnode {baseDir}/scripts/freedcamp.mjs task-lists --project <project_id> --app_id 2\n\nComments\n\nAdd a comment to any item:\n\nnode {baseDir}/scripts/freedcamp.mjs comment <item_id> --app_name \"Tasks\" --text \"My comment\"\n\nComments are automatically wrapped in <p> tags. You can also pass raw HTML:\n\nnode {baseDir}/scripts/freedcamp.mjs comment <item_id> --app_name \"Tasks\" --html \"<p>Bold <b>text</b></p>\"\n\nApp names for comments\n\nWhen adding comments, the --app_name must be one of: Tasks, Discussions, Milestones, Time, Files, Issue Tracker, Wikis, CRM, Passwords, Calendar, Planner, Translations\n\nNotifications\n\nFetch recent notifications (last 60 days):\n\nnode {baseDir}/scripts/freedcamp.mjs notifications\n\nMark a notification as read:\n\nnode {baseDir}/scripts/freedcamp.mjs mark-read <notification_uid>\n\nData model reference\nTask statuses\nName\tValue\tCLI flag\nNot Started\t0\tnot_started\nCompleted\t1\tcompleted\nIn Progress\t2\tin_progress\nInvalid\t3\tinvalid\nReview\t4\treview\nPriorities\nName\tValue\nNone\t0\nLow\t1\nMedium\t2\nHigh\t3\nApp types\nID\tName\tKey\n2\tTasks\tTODOS\n3\tDiscussions\tDISCUSSIONS\n4\tMilestones\tMILESTONES\n5\tTime\tTIME\n6\tFiles\tFILES\n13\tIssue Tracker\tBUGTRACKER\n14\tWikis\tWIKI\n16\tCRM\tCRM\n17\tPasswords\tPASSMAN\n19\tCalendar\tCALENDAR\n47\tPlanner\tPLANNER\n48\tTranslations\tTRANSLATIONS\nImportant notes\nComments must contain HTML. Plain text passed via --text is auto-wrapped in <p> tags.\nTask pagination max is 200 per request; use --offset for more.\nSession is cached locally and auto-refreshes on 401 errors.\nThe --all flag on tasks auto-paginates to fetch every result.\nOut of scope\nInvoices and Invoices Plus APIs are not exposed.\n\"Bot personality\" is not embedded; configure behavior in your agent prompt."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/agrublev/freedcamp-agent-skill",
    "publisherUrl": "https://clawhub.ai/agrublev/freedcamp-agent-skill",
    "owner": "agrublev",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/freedcamp-agent-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/freedcamp-agent-skill",
    "agentUrl": "https://openagent3.xyz/skills/freedcamp-agent-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/freedcamp-agent-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/freedcamp-agent-skill/agent.md"
  }
}