一键导入
openclaw-projects
Project management, memory storage, and communications backend for OpenClaw agents
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Project management, memory storage, and communications backend for OpenClaw agents
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Onboard a new external API, configure credentials, and verify endpoints
Build a comprehensive view of a contact with relationships, links, and memories
Generate a summary report for a completed dev session
Audit namespace content by searching across projects, memories, and items
Create meeting notes with attendees, action items, and linked references
Set up a new terminal connection with credentials and verification
| name | openclaw-projects |
| description | Project management, memory storage, and communications backend for OpenClaw agents |
| metadata | {"openclaw":{"emoji":"📋","requires":{"env":["OPENCLAW_PROJECTS_URL","OPENCLAW_API_TOKEN"]}}} |
A backend service for managing projects, tasks, memories, and communications. Designed as the persistent storage and coordination layer for OpenClaw agents.
| Variable | Description | Example |
|---|---|---|
OPENCLAW_PROJECTS_URL | Base URL of the openclaw-projects instance | https://projects.example.com |
OPENCLAW_API_TOKEN | Shared secret for API authentication | (from 1Password or file) |
All API requests require a Bearer token:
curl -H "Authorization: Bearer $OPENCLAW_API_TOKEN" \
"$OPENCLAW_PROJECTS_URL/work-items"
Alternative secret sources:
OPENCLAW_API_TOKEN_COMMAND - Execute command (e.g., op read 'op://Vault/secret')OPENCLAW_API_TOKEN_FILE - Read from filePOST $OPENCLAW_PROJECTS_URL/work-items
Content-Type: application/json
Authorization: Bearer $OPENCLAW_API_TOKEN
{
"title": "Asparagus",
"parent_work_item_id": "<shopping-list-uuid>",
"kind": "issue"
}
POST $OPENCLAW_PROJECTS_URL/work-items
Content-Type: application/json
{
"title": "Call the dentist",
"not_before": "2026-02-05T09:00:00Z",
"kind": "issue"
}
The not_before date triggers a hook to OpenClaw when the time arrives.
POST $OPENCLAW_PROJECTS_URL/memory
Content-Type: application/json
{
"memory_type": "preference",
"title": "Communication style",
"content": "User prefers async communication over meetings"
}
GET $OPENCLAW_PROJECTS_URL/memory?search=notification+preferences
# Create project
POST $OPENCLAW_PROJECTS_URL/work-items
{
"title": "Tiny Home Build",
"kind": "project",
"description": "Build a tiny home on wheels"
}
# Create epic under project
POST $OPENCLAW_PROJECTS_URL/work-items
{
"title": "Electrical System",
"kind": "epic",
"parent_work_item_id": "<project-uuid>"
}
# Create issue under epic
POST $OPENCLAW_PROJECTS_URL/work-items
{
"title": "Install solar panels",
"kind": "issue",
"parent_work_item_id": "<epic-uuid>"
}
Work items are the core data model - representing projects, epics, initiatives, issues, and tasks in a hierarchical structure.
POST /work-items
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Title of the work item |
kind | string | No | project, epic, initiative, issue (default: issue) |
description | string | No | Detailed description (markdown supported) |
parent_work_item_id | uuid | No | Parent item for hierarchy |
status | string | No | backlog, todo, in_progress, done, cancelled |
not_before | timestamp | No | Don't show/remind before this time |
not_after | timestamp | No | Deadline |
estimated_effort_minutes | integer | No | Effort estimate |
Response: Created work item with id, created_at, etc.
GET /work-items
Returns flat list of all work items.
GET /work-items/tree
Query params:
root_id - Start from specific itemmax_depth - Limit tree depthReturns hierarchical structure with children nested.
GET /work-items/:id
Returns full work item with all fields.
PUT /work-items/:id
All fields are optional - only include fields to update.
PATCH /work-items/:id/status
{ "status": "in_progress" }
PATCH /work-items/:id/dates
{
"not_before": "2026-02-10T09:00:00Z",
"not_after": "2026-02-15T17:00:00Z"
}
DELETE /work-items/:id
PATCH /work-items/:id/reparent
{ "new_parent_id": "<new-parent-uuid>" }
PATCH /work-items/:id/reorder
{ "after_id": "<sibling-uuid>" }
GET /work-items/:id/rollup
Returns aggregated data from children:
Store and retrieve contextual memories for agents.
POST /memory
| Field | Type | Required | Description |
|---|---|---|---|
memory_type | string | Yes | preference, fact, decision, context |
title | string | Yes | Short title |
content | string | Yes | Full content |
work_item_id | uuid | No | Link to work item |
contact_id | uuid | No | Link to contact |
GET /memory
Query params:
search - Text searchmemory_type - Filter by typework_item_id - Filter by linked work itemcontact_id - Filter by linked contactPUT /memory/:id
DELETE /memory/:id
GET /work-items/:id/memories
POST /work-items/:id/memories
Manage people and their communication endpoints.
POST /contacts
{
"displayName": "Jane Doe",
"notes": "Met at conference",
"contactKind": "person"
}
| Field | Type | Required | Description |
|---|---|---|---|
displayName | string | Yes | Contact display name |
notes | string | No | Free-text notes |
contactKind | string | No | person (default), organisation, group, or agent |
Contact Kinds:
person — Individual human contact (default)organisation — Company, business, or institutiongroup — Household, family, team, or collective (e.g., "The Kelly Household")agent — AI agent or automated systemGET /contacts
Query params:
search - Search by name/email/phonecontact_kind - Filter by kind: person, organisation, group, agent (comma-separated for multiple)limit - Results per page (default: 50, max: 100)offset - Pagination offsetGET /contacts/:id
Returns contact with all endpoints and contact_kind.
PATCH /contacts/:id
Supports updating contactKind along with other fields.
DELETE /contacts/:id
POST /contacts/:id/endpoints
{
"type": "telegram",
"value": "@janedoe"
}
Endpoint types: email, phone, telegram, whatsapp, slack, discord
GET /contacts/:id/work-items
POST /work-items/:id/contacts
{ "contact_id": "<contact-uuid>" }
Simple checklist items within work items.
GET /work-items/:id/todos
POST /work-items/:id/todos
{
"title": "Buy screws",
"completed": false
}
PATCH /work-items/:id/todos/:todoId
{ "completed": true }
DELETE /work-items/:id/todos/:todoId
Threaded comments on work items.
GET /work-items/:id/comments
POST /work-items/:id/comments
{
"content": "This looks good! @jane what do you think?",
"parent_id": "<optional-parent-comment-id>"
}
PUT /work-items/:id/comments/:commentId
DELETE /work-items/:id/comments/:commentId
POST /work-items/:id/comments/:commentId/reactions
{ "emoji": "👍" }
Track all changes across the system.
GET /activity
Query params:
limit - Number of items (default: 50)offset - Pagination offsetproject_id - Filter by projectaction_type - Filter by action (created, updated, deleted)since - ISO timestamp, only newer itemsGET /activity/stream
Real-time Server-Sent Events for live updates.
POST /activity/:id/read
POST /activity/read-all
User notifications from agent actions and system events.
GET /notifications
Query params:
unread_only - Booleanlimit, offset - PaginationGET /notifications/unread-count
POST /notifications/:id/read
POST /notifications/read-all
DELETE /notifications/:id
GET /notifications/preferences
PATCH /notifications/preferences
Global search across all entities.
GET /search
Query params:
q - Search querytypes - Comma-separated: work_item, contact, memoryVisual timeline of work items with dates.
GET /timeline
Query params:
start - Start dateend - End datekind - Filter by work item kindGET /work-items/:id/timeline
Timeline for specific item and descendants.
Project health and progress metrics.
GET /analytics/project-health
GET /analytics/velocity
GET /analytics/effort
GET /analytics/burndown/:id
GET /analytics/overdue
GET /analytics/blocked
GET /analytics/activity-summary
Track dependencies between work items.
GET /work-items/:id/dependencies
POST /work-items/:id/dependencies
{
"depends_on_id": "<other-work-item-uuid>",
"dependency_type": "blocks"
}
Types: blocks, relates_to, duplicates
GET /work-items/:id/dependency-graph
Returns full graph of connected items.
External links attached to work items.
GET /work-items/:id/links
POST /work-items/:id/links
{
"url": "https://github.com/org/repo/issues/123",
"title": "GitHub Issue #123",
"link_type": "github_issue"
}
Batch updates for efficiency.
PATCH /work-items/bulk
{
"ids": ["uuid1", "uuid2", "uuid3"],
"updates": {
"status": "done"
}
}
Ingest messages from external sources (SMS, email).
POST /ingest/external-message
{
"source": "twilio",
"from": "+1234567890",
"to": "+0987654321",
"body": "Message content",
"external_id": "SM123456"
}
GET /health # Basic health
GET /health/live # Kubernetes liveness
GET /health/ready # Kubernetes readiness (checks DB)
GET /health # Detailed status with components
Create a shopping list:
POST /work-items
{ "title": "Shopping List", "kind": "project" }
Add items:
POST /work-items
{ "title": "Milk", "parent_work_item_id": "<list-id>", "kind": "issue" }
Check off item:
PATCH /work-items/:id/status
{ "status": "done" }
Create reminder:
POST /work-items
{
"title": "Take medication",
"not_before": "2026-02-02T08:00:00Z",
"kind": "issue"
}
OpenClaw receives hook when time arrives (via pgcron)
Store preference:
POST /memory
{
"memory_type": "preference",
"title": "Timezone",
"content": "User is in Australia/Melbourne timezone"
}
Retrieve for context:
GET /memory?search=timezone
Create project structure:
Track effort:
estimated_effort_minutes on items/work-items/:project-id/rollup for totalsMonitor progress:
/analytics/velocity for throughput/analytics/burndown/:id for burndown| Kind | Description | Typical Use |
|---|---|---|
project | Top-level container | Major initiatives, life areas |
epic | Large feature/goal | Multi-week efforts |
initiative | Group of related work | Sprint or milestone |
issue | Specific task | Day-level work items |
| Status | Description |
|---|---|
backlog | Not yet scheduled |
todo | Ready to start |
in_progress | Currently being worked |
done | Completed |
cancelled | Won't be done |
| Type | Description | Example |
|---|---|---|
preference | User likes/dislikes | "Prefers morning meetings" |
fact | Known information | "Birthday is March 15" |
decision | Past decisions | "Chose React over Vue for frontend" |
context | Situational context | "Working on home renovation" |
clawhub install openclaw-projects
git clone https://github.com/troykelly/openclaw-projects ~/.openclaw/skills/openclaw-projects
Add to your shell profile or .env:
export OPENCLAW_PROJECTS_URL="https://your-instance.example.com"
export OPENCLAW_API_TOKEN_COMMAND="op read 'op://Vault/openclaw-projects/secret'"