Awesome-openclaw-skills twenty-crm
Interact with Twenty CRM (self-hosted) via REST/GraphQL.
install
source · Clone the upstream repo
git clone https://github.com/sundial-org/awesome-openclaw-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/twenty-crm" ~/.claude/skills/sundial-org-awesome-openclaw-skills-twenty-crm && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/twenty-crm" ~/.openclaw/skills/sundial-org-awesome-openclaw-skills-twenty-crm && rm -rf "$T"
manifest:
skills/twenty-crm/SKILL.mdsource content
Twenty CRM
Interact with your self-hosted Twenty instance via REST and GraphQL.
Config
Create
config/twenty.env (example at config/twenty.env.example):
(e.g.TWENTY_BASE_URL
orhttps://crm.example.com
)http://localhost:3000
(Bearer token)TWENTY_API_KEY
Scripts load this file automatically.
Commands
Low-level helpers
-
REST GET:
skills/twenty-crm/scripts/twenty-rest-get.sh "/companies" 'filter={"name":{"ilike":"%acme%"}}&limit=10' -
REST POST:
skills/twenty-crm/scripts/twenty-rest-post.sh "/companies" '{"name":"Acme"}' -
REST PATCH:
skills/twenty-crm/scripts/twenty-rest-patch.sh "/companies/<id>" '{"employees":550}' -
REST DELETE:
skills/twenty-crm/scripts/twenty-rest-delete.sh "/companies/<id>" -
GraphQL:
skills/twenty-crm/scripts/twenty-graphql.sh 'query { companies(limit: 5) { totalCount } }'
Common objects (examples)
- Create company:
skills/twenty-crm/scripts/twenty-create-company.sh "Acme" "acme.com" 500 - Find companies by name:
skills/twenty-crm/scripts/twenty-find-companies.sh "acme" 10
Notes
- Twenty supports both REST (
) and GraphQL (/rest/...
)./graphql - Object names/endpoints can differ depending on your workspace metadata and Twenty version.
- Auth tokens can be short-lived depending on your setup; refresh if you get
.401