用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/aspectrr/denchclaw-workspace --skill crm-debug命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Connected app tool recipes for Composio integrations (Gmail, Slack, GitHub, Notion, Google Calendar, Linear)
Manage DuckDB CRM data, aggressive relation-linked fields, and synced markdown documents in the workspace. Use when creating or updating objects, fields, entries, foreign-table links, row notes, or entry-linked edit logs.
Find and connect with engineers working on ELK/observability stacks at ICP companies. Use when: (1) Researching individual contributors at a company that passed ICP company research, (2) Finding engineers with ELK/platform/SRE skills, (3) Verifying someone's work involves ELK/logstash/observability, (4) Connecting with practitioners who manage the stack day-to-day, (5) Discovering new ICP companies through engineer profiles. Workflow: Company from CRM → DuckDuckGo → PinchTab → LinkedIn MCP (verify ELK in skills/experience + connect) → Add to engineers CRM. Flipped discovery: If engineer has strong ELK signals but company isn't in CRM → add company as 'Discovered'. This skill DOES connect on LinkedIn.
基于 SOC 职业分类
正在显示 SKILL.md
| name | crm-debug |
| description | Debugging CRM objects not showing entries despite data existing in database |
| metadata | {"openclaw":{"inject":true}} |
This skill helps debug why an object shows no entries in the UI even when data exists in the database.
objects table (check via .object.yaml or API /api/workspace/objects/{name})entries table for that object_id"entries": [] and "totalCount": 0The CRM uses an EAV (Entity-Attribute-Value) pattern. The API queries data through auto-generated PIVOT views (v_{object_name}). Without this view, the API cannot read the entry data.
Objects with views: company, conversation, lead, people, task, vp_prospect
Missing view: any object created manually that doesn't have v_{name} view
-- Check object exists
SELECT id, name FROM objects WHERE name = 'team_leads';
-- Check entries exist (use the object_id from above)
SELECT COUNT(*) FROM entries WHERE object_id = 'obj_team_leads_001';
-- Check field values exist
SELECT f.name as field_name, ef.value
FROM entries e
JOIN entry_fields ef ON ef.entry_id = e.id
JOIN fields f ON f.id = ef.field_id
WHERE e.object_id = 'obj_team_leads_001';
SELECT table_name FROM information_schema.views
WHERE table_name = 'v_team_leads';
If 0 rows: view is missing.
SELECT name FROM fields
WHERE object_id = (SELECT id FROM objects WHERE name = 'team_leads')
AND type != 'action'
ORDER BY sort_order;
CREATE OR REPLACE VIEW v_team_leads AS
PIVOT (
SELECT e.id as entry_id, e.created_at, e.updated_at,
f.name as field_name, ef.value
FROM entries e
JOIN entry_fields ef ON ef.entry_id = e.id
JOIN fields f ON f.id = ef.field_id
WHERE e.object_id = (SELECT id FROM objects WHERE name = 'team_leads')
AND f.type != 'action'
) ON field_name IN ('Full Name','Title','Company',...) USING first(value);
IMPORTANT: List all field names explicitly in the IN (...) clause. Omitting it causes schema drift.
SELECT * FROM v_team_leads;
Or call the API:
GET /api/workspace/objects/team_leads
Should now return entries and "totalCount": > 0.
When creating a new object via .object.yaml, ensure the PIVOT view is created after the first entry is added. Check if existing objects have views (v_{name}) and create any missing ones.
Run this to find all objects without views:
SELECT o.name as object_name
FROM objects o
LEFT JOIN information_schema.views v ON v.table_name = 'v_' || o.name
WHERE v.table_name IS NULL;