{"skill":{"slug":"freedcamp-agent-skill","displayName":"Freedcamp Project Management","summary":"Manage Freedcamp tasks, projects, groups, comments, notifications, and task lists via HMAC-SHA1 API credentials.","description":"---\nname: freedcamp\ndescription: \"Manage Freedcamp tasks, projects, groups, comments, notifications, and task lists via HMAC-SHA1 API credentials.\"\nhomepage: https://freedcamp.com\nuser-invocable: true\nmetadata: {\"openclaw\":{\"requires\":{\"env\":[\"FREEDCAMP_API_KEY\",\"FREEDCAMP_API_SECRET\"]},\"primaryEnv\":\"FREEDCAMP_API_KEY\",\"homepage\":\"https://freedcamp.com\"}}\n---\n\n# 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\n- Script: `{baseDir}/scripts/freedcamp.mjs`\n- Auth: `FREEDCAMP_API_KEY` + `FREEDCAMP_API_SECRET`\n- Output: **JSON only** (stdout), suitable for agents and automation\n\n## Setup\n\n1. Obtain your Freedcamp API key and secret from your Freedcamp account settings.\n2. Provide both values as environment variables.\n\n### Common injection patterns\n\n- Shell env (local testing):\n\n  ```\n  export FREEDCAMP_API_KEY=\"...\"\n  export FREEDCAMP_API_SECRET=\"...\"\n  ```\n\n- OpenClaw 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\n### Configure via OpenClaw CLI (recommended)\n\n```bash\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\n**Verify what is stored:**\n\n```bash\nopenclaw config get skills.entries.freedcamp\n```\n\n**Remove stored credentials:**\n\n```bash\nopenclaw config unset skills.entries.freedcamp.apiKey\nopenclaw config unset skills.entries.freedcamp.env.FREEDCAMP_API_SECRET\n```\n\n## First calls (sanity + discovery)\n\n- Who am I / session info:\n\n  `node {baseDir}/scripts/freedcamp.mjs me`\n\n- List all groups, projects, and apps:\n\n  `node {baseDir}/scripts/freedcamp.mjs groups-projects`\n\n## ID resolution\n\nWhen the user provides project names, resolve to IDs using:\n\n- `groups-projects` returns all groups with their projects, including project IDs and names\n- Use the exact `project_name` from the output for other commands\n\nAvoid guessing a project ID when multiple matches exist.\n\n## Core: tasks\n\n### List tasks in a project\n\n`node {baseDir}/scripts/freedcamp.mjs tasks --project <project_id> --all`\n\n### List tasks with filters\n\n`node {baseDir}/scripts/freedcamp.mjs tasks --project <project_id> --status in_progress,not_started --assigned_to 2,-1`\n\nUseful filters:\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\n\n### Get a single task (with comments and files)\n\n`node {baseDir}/scripts/freedcamp.mjs task <task_id>`\n\n### Create a task\n\n`node {baseDir}/scripts/freedcamp.mjs create-task --project <project_id> --title \"Task title\"`\n\nWith optional description and task list:\n\n`node {baseDir}/scripts/freedcamp.mjs create-task --project <project_id> --title \"Task title\" --description \"Details here\" --task_group <task_group_id>`\n\n### Update a task\n\n`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)\n\n### Create a task by project name\n\n`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.\n\n## Task lists (groups)\n\n- List task lists for a project:\n\n  `node {baseDir}/scripts/freedcamp.mjs task-lists --project <project_id>`\n\n- Specify app (default is Tasks / app_id 2):\n\n  `node {baseDir}/scripts/freedcamp.mjs task-lists --project <project_id> --app_id 2`\n\n## Comments\n\n- Add a comment to any item:\n\n  `node {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\n  `node {baseDir}/scripts/freedcamp.mjs comment <item_id> --app_name \"Tasks\" --html \"<p>Bold <b>text</b></p>\"`\n\n### App names for comments\n\nWhen adding comments, the `--app_name` must be one of:\nTasks, Discussions, Milestones, Time, Files, Issue Tracker, Wikis, CRM, Passwords, Calendar, Planner, Translations\n\n## Notifications\n\n- Fetch recent notifications (last 60 days):\n\n  `node {baseDir}/scripts/freedcamp.mjs notifications`\n\n- Mark a notification as read:\n\n  `node {baseDir}/scripts/freedcamp.mjs mark-read <notification_uid>`\n\n## Data model reference\n\n### Task statuses\n\n| Name | Value | CLI flag |\n|---|---|---|\n| Not Started | 0 | `not_started` |\n| Completed | 1 | `completed` |\n| In Progress | 2 | `in_progress` |\n| Invalid | 3 | `invalid` |\n| Review | 4 | `review` |\n\n### Priorities\n\n| Name | Value |\n|---|---|\n| None | 0 |\n| Low | 1 |\n| Medium | 2 |\n| High | 3 |\n\n### App types\n\n| ID | Name | Key |\n|---|---|---|\n| 2 | Tasks | TODOS |\n| 3 | Discussions | DISCUSSIONS |\n| 4 | Milestones | MILESTONES |\n| 5 | Time | TIME |\n| 6 | Files | FILES |\n| 13 | Issue Tracker | BUGTRACKER |\n| 14 | Wikis | WIKI |\n| 16 | CRM | CRM |\n| 17 | Passwords | PASSMAN |\n| 19 | Calendar | CALENDAR |\n| 47 | Planner | PLANNER |\n| 48 | Translations | TRANSLATIONS |\n\n## Important notes\n\n- Comments must contain HTML. Plain text passed via `--text` is auto-wrapped in `<p>` tags.\n- Task pagination max is 200 per request; use `--offset` for more.\n- Session is cached locally and auto-refreshes on 401 errors.\n- The `--all` flag on `tasks` auto-paginates to fetch every result.\n\n## Out of scope\n\n- Invoices and Invoices Plus APIs are not exposed.\n- \"Bot personality\" is not embedded; configure behavior in your agent prompt.\n","tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":1958,"installsAllTime":73,"installsCurrent":0,"stars":2,"versions":1},"createdAt":1770845504790,"updatedAt":1778487906275},"latestVersion":{"version":"1.0.0","createdAt":1770845504790,"changelog":"Initial release of the Freedcamp skill.\n\n- Manage Freedcamp tasks, projects, groups, comments, notifications, and task lists via HMAC-SHA1 API credentials.\n- Node.js CLI, outputting JSON for agent and automation usage.\n- Supports environment-based and OpenClaw settings for API key/secret management.\n- Core commands for listing, creating, updating, and fetching tasks and comments.\n- Task and comment creation supports both project names and IDs.\n- Includes robust filtering, auto-pagination for tasks, and project/group discovery.\n- Outlines Freedcamp app types, statuses, and priorities for reference.","license":null},"metadata":{"setup":[{"key":"FREEDCAMP_API_KEY","required":true},{"key":"FREEDCAMP_API_SECRET","required":true}],"os":null,"systems":null},"owner":{"handle":"agrublev","userId":"s173m42csry7evz6h3hnqeasq1879nms","displayName":"Angel Grablev","image":"https://avatars.githubusercontent.com/u/801433?v=4"},"moderation":null}