using-git-worktrees
OBobra/superpowers298k近 7 天新增 2,631 个 star
openloomi Connectors tools - manage the native 7 messaging integrations and pair with the composio skill for the 1000+ apps OAuth layer (Slack, Discord, X, Gmail, Outlook, Google Calendar/Drive/Docs, GitHub, Notion, Linear, HubSpot, LinkedIn, Jira, Asana). Triggers: connect platform, integration status, list accounts, disconnect, list-accounts, status, connect, send-reply, native vs composio, 1000+ apps, list connections.
Note: If OpenLoomi readiness is unknown, use
openloomi-setupfirst. If OpenLoomi Desktop is not installed, follow Getting Started.
OpenLoomi Connectors handle two directions: pulling Signals in from your authorized platforms and pushing approved Actions back out through the same channel. OpenLoomi ships them through two layers:
openloomi-connectors CLI covers OAuth / app-credential / QR / interactive setup, list, status, disconnect, contact query, and message send for these.composio skill) — a hosted OAuth broker that authorizes ~1000+ apps including Slack, Discord, X, Gmail, Outlook, Google Calendar/Drive/Docs, GitHub, Notion, Linear, HubSpot, LinkedIn, Jira, Asana. Composio handles "is this user authorised?" and stores the tokens; OpenLoomi's Loop channels consume the events as Signals (see Glossary — Composio / Loop channel).When the user asks "what am I connected to?" or "list my accounts", run both — list-accounts here and the composio connection listing — and present the union. Keep auth, OAuth, and disconnect flows native to each skill.
This skill does not manage Loop channels, custom decision types, or classifier rules — those are openloomi-loop's job.
OpenLoomi is an open-source AI coworker, driven by an attention agent — a desktop app (Loomi) that connects your authorized tools, builds a local knowledge graph of people / projects / decisions, and surfaces the day's decisions as one-tap bubbles you Approve. It runs locally (local-first, AES-256), supports Skills + Plugins so any Agent Runtime (Claude Code, Codex, OpenCode, Hermes, OpenClaw) can plug into the same resident desktop. See openloomi-feature-guide for the full picture.
Connectors are the per-platform input that Loop reads on every tick. When you authorize a platform, OpenLoomi continuously syncs (with your permission):
The aggregated stream feeds OpenLoomi's Memory and the Signals Loop polls on every tick — so an unprompted reminder, a contextual reply draft, or a Decision Card arrives with full historical grounding instead of starting from scratch.
The CLI list-platforms returns these 7 platforms. Other connectable
platforms (Slack, Discord, X, Gmail, Outlook, LinkedIn, Google Calendar,
Google Drive, Google Docs, HubSpot, Notion, etc.) are managed via the
desktop UI or the composio skill — see "Platform Connection Methods"
below for details.
| ID | Display Name | Aliases |
|---|---|---|
telegram | Telegram | tg |
whatsapp | ||
imessage | iMessage | |
feishu | Lark/Feishu | lark, 飞书 |
dingtalk | DingTalk | 钉钉 |
qqbot | qq, qq_bot | |
weixin | wechat, 微信, wechat_work, wecom, 企业微信 |
The CLI auto-reads your token from ~/.openloomi/token (base64 encoded JWT).
The local API server runs on port 3414 (fallback: 3515). If 3414 is unavailable, try 3515.
/api/integrations/accounts - List Connected AccountsReturns all connected platform accounts for the authenticated user.
curl http://localhost:3414/api/integrations/accounts \
-H "Authorization: Bearer $TOKEN"
Response:
{
"accounts": [
{
"id": "int_xxx",
"platform": "gmail",
"externalId": "[email protected]",
"displayName": "My Gmail",
"status": "active",
"metadata": {},
"createdAt": "2024-01-01T00:00:00Z",
"botId": "bot_xxx"
}
]
}
Note: Each account includes a botId field which is used for send-reply and other bot operations.
/api/integrations/slack/oauth/start?userId=<userId> - Start Slack OAuthReturns the Slack OAuth authorization URL. The CLI opens this URL in the browser for the user to complete authorization.
curl "http://localhost:3414/api/integrations/slack/oauth/start?userId=<userId>"
Response:
{
"authorizationUrl": "https://slack.com/oauth/v2/authorize?...",
"state": "userId:uuid"
}
/api/integrations/discord/oauth/start?userId=<userId> - Start Discord OAuthReturns the Discord OAuth authorization URL.
/api/integrations/x/oauth/start?userId=<userId> - Start X OAuthReturns the X/Twitter OAuth authorization URL.
/api/integrations/slack/oauth/exchange?code=<code>&state=<state> - Exchange Slack CodeExchange OAuth code for Slack access.
/api/integrations/discord/oauth/exchange?code=<code>&state=<state> - Exchange Discord CodeExchange OAuth code for Discord access.
| Platform | Endpoint |
|---|---|
| Feishu | POST /api/feishu/listener/init |
| DingTalk | POST /api/dingtalk/listener/init |
| QQ Bot | POST /api/qqbot/listener/init |
POST /api/weixin/listener/init | |
| Telegram | POST /api/telegram/user-listener/init |
POST /api/whatsapp/register-socket | |
| iMessage | POST /api/imessage/init-self-listener |
/api/integrations/:id - Disconnect AccountDelete a connected integration account.
curl -X DELETE http://localhost:3414/api/integrations/int_xxx \
-H "Authorization: Bearer $TOKEN"
Response:
{
"success": true,
"deletedAccountId": "int_xxx",
"deletedBotIds": ["bot_xxx"]
}
/api/contacts - Query ContactsQuery user contacts with optional filtering and pagination.
curl "http://localhost:3414/api/contacts?name=John&page=1&pageSize=10" \
-H "Authorization: Bearer $TOKEN"
Parameters:
name (string, optional) - Filter contacts by name (partial match)page (number, default 1) - Page numberpageSize (number, default 10) - Items per page (max 100)Response:
{
"success": true,
"contacts": [
{
"id": "contact_xxx",
"name": "John Doe",
"type": "email",
"botId": "bot_xxx",
"platform": "gmail"
}
],
"pagination": {
"page": 1,
"pageSize": 10,
"totalCount": 50,
"totalPages": 5,
"hasMore": true,
"hasPrevious": false
}
}
/api/messages - Send MessageSend a message via a connected platform bot.
curl -X POST http://localhost:3414/api/messages \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"botId": "bot_xxx",
"recipients": ["John"],
"message": "Hello!",
"subject": "Optional subject"
}'
Parameters:
botId (string, required) - The bot ID to send fromrecipients (array, required) - List of recipient namesmessage (string, required) - Message contentsubject (string, optional) - Email subject linecc (array, optional) - CC recipientsbcc (array, optional) - BCC recipientsNote: botId is returned by list-accounts in the botId field (different from account id).
Aliases are case-insensitive and support both English and Chinese:
| Alias | Platform |
|---|---|
tg | telegram |
wechat, 微信 | weixin |
lark, 飞书 | feishu |
钉钉 | dingtalk |
qq, qq_bot | qqbot |
Users can also authorize accounts directly through the openloomi desktop application without using CLI commands.
Open openloomi desktop app on your computer
Navigate to Settings (gear icon in the sidebar or top-right menu)
Go to Integrations tab/section
Click on the platform you want to connect (e.g., Telegram, Slack, Discord, Gmail, etc.)
Follow the platform-specific authorization flow:
Verify connection — once authorized, the platform will show as "Connected" with a green checkmark
# List all supported platforms
node $SKILL_DIR/scripts/openloomi-connectors.cjs list-platforms
# List all connected accounts (includes botId for send-reply)
node $SKILL_DIR/scripts/openloomi-connectors.cjs list-accounts
# Cross-source audit: openloomi-native + composio-linked accounts (run together, present union)
node $SKILL_DIR/scripts/openloomi-connectors.cjs list-accounts
# In parallel, invoke the `composio` skill (e.g. `composio list-connections` via composio-cli,
# or `mcp__composio__COMPOSIO_MANAGE_CONNECTIONS` with action: "list")
# Check connection status for a platform
node $SKILL_DIR/scripts/openloomi-connectors.cjs status telegram
# Connect a platform (opens browser for OAuth)
node $SKILL_DIR/scripts/openloomi-connectors.cjs connect slack
# Disconnect an account by ID
node $SKILL_DIR/scripts/openloomi-connectors.cjs disconnect int_xxx
# Query contacts
node $SKILL_DIR/scripts/openloomi-connectors.cjs query-contacts --name=John --page=1 --pageSize=10
# Send a message (requires botId from list-accounts)
node $SKILL_DIR/scripts/openloomi-connectors.cjs send-reply --botId=bot_xxx --recipients=John --message="Hello!"
| Command | Description |
|---|---|
list-platforms | List all 7 supported platforms with IDs and aliases |
list-accounts | List all connected integration accounts (includes botId) |
status <platform> | Check if a platform is connected (e.g., telegram, slack) |
connect <platform> [options] | Connect a platform (OAuth, App Password, or App Credentials) |
disconnect <accountId> | Disconnect a specific account by ID |
query-contacts [options] | Query contacts (--name=, --page=, --pageSize=) |
send-reply --botId= --recipients= --message= | Send a message via REST API |
| Method | Platforms |
|---|---|
| OAuth (auto-opens browser) | slack, discord, x |
| App Password | gmail --email=x --password=xxxx, outlook --email=x --password=xxxx |
| App Credentials | dingtalk --clientId=x --clientSecret=x, feishu --appId=x --appSecret=x, qq --appId=x --appSecret=x |
| iLink Token | wechat --token=x |
| Browser Required (QR/interactive) | whatsapp, telegram, imessage |
Triggered when the user asks about:
list-accounts here and the composio skill in parallel, then present the unionExecution Flow:
gh -> github)Note on send-reply: The botId is returned by list-accounts in the botId field.
OBobra/superpowers298k近 7 天新增 2,631 个 star
OBobra/superpowers298k近 7 天新增 2,631 个 star
OBobra/superpowers298k近 7 天新增 2,631 个 star
MAmattpocock/skills288k近 7 天新增 10,178 个 star
MAmattpocock/skills288k近 7 天新增 10,178 个 star
MAmattpocock/skills288k近 7 天新增 10,178 个 star