plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-staff/SKILL.md
Connect staff roles to a human chat surface (Telegram or Slack) via OpenClaw using a facilitator/specialist hub-and-spoke model. Registers bots/apps, creates or reuses the human-facing surface, wires routes in ~/.openclaw/openclaw.json, writes facilitator/specialist agent prompts, validates the gateway, resets stale sessions, and runs an end-to-end route test. Use when you want a "chief of staff" facilitator and its specialists reachable from chat. Requires lisa-openclaw-setup first.
npx skillsauth add codyswanngt/lisa lisa-openclaw-connect-staffInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Wire existing staff roles into a working hub-and-spoke chat deployment on Telegram or Slack through OpenClaw. Humans talk only to the facilitator (the "chief of staff"); the facilitator consults specialists internally and synthesizes one answer back to the human.
This SKILL.md is the complete, runnable definition for both Claude Code and Codex. Codex has no
command or $ARGUMENTS layer, so every behavior — including platform selection — is specified here.
Keep all real values (org names, ids, handles, tokens, paths) out of any committed file; they belong
only in ~/.openclaw/openclaw.json (machine-local, never committed).
lisa-openclaw-setup has run (an openclaw section exists in .lisa.config.json, and the
required gateway capabilities — sessions_spawn, native-reply session scoping, NO_REPLY — are
confirmed). If a capability is unmet, fail closed: do not create routes that would post
duplicates or bleed cross-thread context.config.staff[] and each has a dual-runtime subagent
(.claude/agents/<id>.md + .codex/agents/<id>.toml). If a role or its subagent is missing:
/lisa:add-role <Role> first.$lisa-wiki:lisa-wiki-add-role first.
Only auto-delegate if that skill is available in the active runtime; otherwise print the exact
next step and stop. Never infer agent ids from display names — always use config.staff[].id.Resolve the platform with this precedence:
telegram or slack).openclaw.defaultPlatform from .lisa.config.json.Connect staff via telegram or slack?sessions_spawn with explicit
agentIds — never by messaging another bot on the chat platform (bot-to-bot delivery is
unreliable; treat any visible specialist "workroom" as an audit copy, not proof of delivery).NO_REPLY as its assistant final
so the gateway does not post a duplicate loose message.[Facilitator]; the platform shows
identity.private (default) or public; for Telegram, whether any
specialist audit topics are wanted (default: none)For exact route shapes and the facilitator/specialist prompt text, read references/platform-routing.md and references/prompts.md.
Read only what you need; never print token contents:
~/.openclaw/openclaw.json (existing agents, channels, groups, topics, routes)config.staff[] and the staff subagent filesTelegram: create or reuse one organization supergroup with forum topics enabled; create one
human-facing facilitator topic; create one bot per visible identity only when separate names/avatars
are needed; specialist audit topics only if explicitly requested. The Bot API chat_id for a
supergroup is the signed id (usually starting -100); the topic id is the
message_thread_id.
Slack: use Socket Mode for a workstation-hosted gateway unless told otherwise; create or reuse one
human-facing facilitator channel (default <organization-slug>-chief-of-staff, private/invite-only
unless public is requested); bind routes by stable channel id, not channel name; optional
specialist workrooms are audit-only.
Telegram bot-to-bot and bot-originated-topic messages can fail to wake other bots — this is exactly
why internal sessions_spawn is the default route.
xoxb/xapp tokens.0600 local files outside the repo).
Never print/paste tokens into chat, logs, docs, or any committed file. After saving, verify the
token via an OpenClaw probe or platform API check without exposing it.For the facilitator and each specialist, ensure the OpenClaw agent exists and its prompt encodes the
hub-and-spoke contract. Use the prompt templates in references/prompts.md.
The facilitator prompt must require: consult ≥1 specialist before substantive answers; treat the
current thread/native-reply root as the session boundary; route via sessions_spawn with explicit
agentIds; acknowledge → yield/wait → evaluate → synthesize → reply in the original thread; return
NO_REPLY after any message-tool send; isolate/clear/archive consulted specialist context after the
investigation. Specialist prompts must require: accept work only via internal dispatch; return
concise structured results; never post to human-facing surfaces.
Edit ~/.openclaw/openclaw.json carefully (see references/platform-routing.md
for exact shapes). Back up the file first. Parse JSON, change only the intended keys, and preserve
all unrelated agents, channels, routes, and tokens:
agents.listsubagents.allowAgents = the specialist ids; set
subagents.requireAgentId = true when supportedchannels.slack.replyToModeByChatType.channel = "all" so acknowledgements and final
answers are real thread repliesShow the exact route keys you will change before writing.
Run, waiting for the gateway to warm up before declaring success:
openclaw config validate
openclaw gateway restart
openclaw channels status --probe --timeout 90000
Archive (don't delete) affected session files under ~/.openclaw/session-archive/, remove active
session pointers for the changed routes, restart the gateway, and re-probe. Old session history can
preserve stale routing instructions after a prompt/config change.
Do not call the work complete until the live loop passes. Acceptance criteria:
sessions_spawn consultation with ≥1 explicit specialist id.NO_REPLY rule held).If the test fails, inspect gateway logs and sessions before changing config; check the bot's admin rights (Telegram) / app channel membership and scopes (Slack), and mention-gating, first.
Finish with: platform and human-facing surface; surfaces created/reused; apps/bots registered and any pending; token storage location (no values); facilitator + specialist agents created/updated; validation results; end-to-end test result; and any remaining manual or cooldown follow-up.
lisa-openclaw-setup (run first), lisa-openclaw-connect-repo-topic (Telegram repo-coding topics).
Staff "brains" come from the lisa-wiki plugin's add-role.
development
Prepare a machine — a fresh laptop or a throwaway container — to run coding agents, before any repository exists. Detects which of Lisa's supported agents (Claude Code, Codex, Cursor, OpenCode, Antigravity, Copilot) are already installed, asks which credential manager the machine uses (Bitwarden, 1Password, Doppler, Vault, AWS, or none), and installs only what is missing, each by its vendor's own preferred method. Idempotent, headless by default, and emits a Dockerfile for a spin-up/spin-down environment. Run it on a new machine, in a container, or before cloning anything.
tools
Provision and verify a remote execution environment for a host project — Codex Cloud today, other remote surfaces as they are added. Generates a repository-owned setup script that installs the declared toolchain, materializes secrets through lisa-secrets-access, and runs the project's own hook. Provisions by API where one exists, by driving the vendor console where one does not, and by emitting exact config otherwise — then proves the result with the same read-back regardless of which tier did the work. Use before dispatching any work with executionEnv.
tools
Bring a developer's machine in line with the toolchain the project declares. Reports every tool in remoteEnv.tools that is missing, outdated, or unpinned for this platform, and installs the missing ones into ~/.local/bin from the same pinned, checksummed entries the remote surfaces use — but only when asked. Same manifest, same pins, same installers as lisa-setup-remote-env; what differs is consent and that the pin is a floor rather than an equality. Run it on a fresh checkout, after a manifest change, or when a tool fails at the moment of use.
tools
Route one unit of work to a remote execution surface. Reads the executionEnv parameter (local by default, codex-cloud or claude-web today), verifies the environment is provisioned and bound to this repository, submits a thin skill invocation, records the task identifier to .lisa/remote-dispatch.json, and exits without polling. Routing only — the remote runs the identical skill from the identical repository. Composable and inline: other skills invoke it via the Skill tool rather than users calling it directly.