Feishu Doc
openclaw/openclaw
Feishu document read/write workflows. An agent skill from openclaw/openclaw.
A skill your agent uses for a First Tree onboarding first chat, especially natural opening messages like "welcome aboard", "Please help me get started with First Tree", or "Please help me get…
$ npx skills add first-tree-ai/first-tree --skill first-tree-welcome -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install first-tree-ai/first-tree first-tree-welcome --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/first-tree-ai/first-tree.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/first-tree-welcome .claude/skills/first-tree-welcome && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "first-tree-welcome" agent skill from https://github.com/first-tree-ai/first-tree/tree/main/skills/first-tree-welcome into .claude/skills/first-tree-welcome/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "first-tree-welcome", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/first-tree-ai/first-tree/tree/main/skills/first-tree-welcomeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add first-tree-ai/first-tree --skill first-tree-welcome -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install first-tree-ai/first-tree first-tree-welcome --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/first-tree-ai/first-tree.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/first-tree-welcome .agents/skills/first-tree-welcome && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "first-tree-welcome" agent skill from https://github.com/first-tree-ai/first-tree/tree/main/skills/first-tree-welcome into .agents/skills/first-tree-welcome/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "first-tree-welcome", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add first-tree-ai/first-tree --skill first-tree-welcome -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install first-tree-ai/first-tree first-tree-welcome --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/first-tree-ai/first-tree.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/first-tree-welcome .cursor/skills/first-tree-welcome && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "first-tree-welcome" agent skill from https://github.com/first-tree-ai/first-tree/tree/main/skills/first-tree-welcome into .cursor/skills/first-tree-welcome/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "first-tree-welcome", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/first-tree-ai/first-tree.git --path skills/first-tree-welcome--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add first-tree-ai/first-tree --skill first-tree-welcome -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install first-tree-ai/first-tree first-tree-welcome --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/first-tree-ai/first-tree.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/first-tree-welcome .gemini/skills/first-tree-welcome && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "first-tree-welcome" agent skill from https://github.com/first-tree-ai/first-tree/tree/main/skills/first-tree-welcome into .gemini/skills/first-tree-welcome/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "first-tree-welcome", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install first-tree-ai/first-tree first-tree-welcomeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add first-tree-ai/first-tree --skill first-tree-welcome -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/first-tree-ai/first-tree.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/first-tree-welcome .github/skills/first-tree-welcome && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "first-tree-welcome" agent skill from https://github.com/first-tree-ai/first-tree/tree/main/skills/first-tree-welcome into .github/skills/first-tree-welcome/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "first-tree-welcome", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add first-tree-ai/first-tree --skill first-tree-welcome -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install first-tree-ai/first-tree first-tree-welcome --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/first-tree-ai/first-tree.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/first-tree-welcome .opencode/skills/first-tree-welcome && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "first-tree-welcome" agent skill from https://github.com/first-tree-ai/first-tree/tree/main/skills/first-tree-welcome into .opencode/skills/first-tree-welcome/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "first-tree-welcome", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
first-tree-welcomeA skill your agent uses for a First Tree onboarding first chat, especially natural opening messages like "welcome aboard", "Please help me get started with First Tree", or "Please help me get…
First Tree Welcome is an agent skill from first-tree-ai/first-tree. Use for a First Tree onboarding first chat, especially natural opening messages like "welcome aboard", "Please help me get started with First Tree", or "Please help me get settled into this team on First Tree." Also covers the production-scan fix first chat ("fix the launch blockers found by my production readiness scan"). Do not use for external-channel or integration messages (including Feishu), dedicated tree setup chats, ordinary chats, PR/MR reviews, repo scans, tree writes, or maintenance.
Its SKILL.md is about 11k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `agents/openai.yaml`).
It sits in Productivity & Automation, covering Messaging and chat bots. It works with Feishu (Lark). The repository describes itself as: First-tree routes work to the right agent, gives it the same context your team has, and loops humans in only when the rules say so. Lives in your GitHub. Open source. The licence is Apache-2.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 13f2a38. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghglabFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
report.first-tree.aiFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
First Tree Welcome loads about 11k tokens when it runs. Until then it costs about 130 tokens; SKILL.md has 6,906 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from first-tree-ai/first-tree at commit 13f2a38, republished under its Apache-2.0 licence (© first-tree-ai). 6,906 words, ~11,248 tokens.
.claude/skills/first-tree-welcome/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Use this skill only when the chat is clearly the onboarding first chat created by First Tree, including natural messages such as "welcome aboard", "Please help me get started with First Tree", or "Please help me get settled into this team on First Tree." Do not use it for ordinary chats, PR/MR reviews, repo scans, tree writes, or maintenance work.
Messages attributed as type=integration or arriving from an external channel
such as Feishu, GitHub, or GitLab are ordinary channel work, never this
onboarding launcher. A new external-channel chat and a greeting such as "hello"
or "你好" do not establish First Tree onboarding intent.
Two look-alikes that are NOT this launcher, and one that routes by shape:
first-tree-seed to build/seed a tree,
first-tree-read / first-tree-write as appropriate), not this launcher flow.Repository: line, plus a Machine-readable findings: https://report.first-tree.ai/<key>.json line when the report key
survived the handoff. Nothing needs re-scanning — never look for a scan
skill. This is the launcher for a pre-selected fix: once a readable findings
source exists, route by blocker count — several eligible blockers become their own fix chats, a
single one is just fixed in place (see "Production-scan fix handoff" below).
The onboarding greeting ("welcome aboard") only tells you the human's role
for later setup gating; it does NOT change how you handle the fix.
No readable findings source → ask for the report or a re-run, then stop.Make the first work loop immediate and reviewable:
This chat is value-first, visible, and consent-gated. It is not a launcher for the first task and it is not a parallel-work demo. Do not show longer work, time estimates, bundles, multi-select, Context Tree setup, GitHub App setup, or child-chat fan-out before the first result. Context Tree setup is never offered from a result — not even a strong one; only an explicit user request routes to the dedicated tree chat. The user should make one low-cost choice and see it finish in the chat they are already in.
Treat the opening message as the user's onboarding request. Reply naturally, without exposing skill names or launch mechanics.
You own moving this forward to the onboarding goal (the user feels real value,
and — for an admin — team setup progresses). When you hit a snag or something
unexpected: diagnose the real cause, do what you can safely do yourself, and
put a question to the user only when it is genuinely theirs — a product/scope
fork, consent for a consequential or irreversible action, or an input only they
can give (a credential, a repo, a login). When you must ask, ask one clear
question with your recommendation. Never hand the user a wall of options, a raw
error, a pile of diagnostics, or a mechanism choice that is yours to make. Read
## Handling snags below before reporting any failure.
Before your first substantive reply, infer the onboarding state from the start-chat message, runtime briefing, repo resources, Context Tree binding, and available local files:
NODE.md), not by trusting a binding;origin remote;gh for GitHub, glab for
GitLab, or plain git for another host; usable or not.If state is unknown and the current task genuinely needs the repo or forge
capability, first try to resolve it yourself (read the greeting for role,
attempt the repo read, check the host CLI, gh or glab). A plain greeting
or a repo-free task gets no host-CLI probe at all — work from the user's
messages and locally available inputs. Only if the state stays genuinely
unresolvable for the task at hand, name the one specific missing piece and
ask for that. Do not invent repo access, GitHub/GitLab authorization, or tree
readiness.
The onboarding greeting is role-distinct, and it is your primary role signal — the runtime does not otherwise tell you whether the human is an admin. Read it before deciding whether to offer any admin-only setup:
This distinction is what gates admin-only setup (building the Context Tree, installing the GitHub App, selecting team repos). It is deliberately the visible greeting, not a hidden field, so the product's kickoff openers and these examples are kept in sync by a test — do not paraphrase them loosely.
No concrete task yet — the opening is a plain greeting with no task and
no source input. Say briefly that you are ready to work, and make exactly one
tracked ask for the outcome the user wants first, delivered with
first-tree chat ask <human> "<goal-first ask>" and no option menu; do not
leave it only in console/final narration. The ask must NOT mention a repo,
path, URL, binding, Context Tree creation, provider, App, CLI install, or
asking an admin to fix configuration — it asks what the user wants to
accomplish, not for project plumbing. Recommended shape: "I'm ready to work.
What's the first outcome you'd like from me?"
A concrete task is already visible — the opening message or the first visible continuation names a concrete task that does not depend on repo access. Complete it directly in this chat from the user's messages, chat context, and locally available inputs; never force a repo/code menu in front of it.
A concrete task needs existing code — only when the requested task
genuinely depends on code you cannot see and no source input exists, ask for
the minimal input with one tracked chat ask: accept a plain directory on
this machine, pasted content, attachments, or a repository URL — never
require creating a git repository first, and do not scan the machine for
other directories. Read a shared repository URL with plain git (clone or
fetch) first; use the host CLI (gh for GitHub, glab for GitLab) only
when the task needs a forge/API action or authenticated access.
Readable code available — a repo is connected and you can read it, or a local path / URL was given and you can read it. (A repo that is connected but local credentials cannot read it is the "cannot read it" state below — report the read failure, do not fake understanding or send a menu.) Your first substantive reply must:
Do not mention Context Tree or forge setup merely because you observed its state. The project receipt proves access only; the selected microtask produces the first result.
The start-chat message may arrive with the first task already chosen: fixing the blockers from a completed First Tree production scan. TWO message shapes are both this handoff — recognize either:
Repository: line, and a Machine-readable findings: https://report.first-tree.ai/<key>.json line.Repository: line, closing with "The scan report
link didn't carry over, so start by checking access to the repository, then
ask me to share the report or re-run the scan." No findings line appears at
all — this is an expected first-class shape, not a malformed message; do
NOT fall back to the generic first-task menu.When either shape matches:
chat create addressed to your own agent (see Spawning
Task Chats), each with a distinct, specific topic naming that one fix
(Fix: N+1 in orders list, Fix: add security response headers) —
never reuse the launcher's own generic Fix production scan blockers
title, which would collide with it. Two eligible blockers means two chats;
do not split or invent work just to reach three. If an unusual report has
more than five eligible blockers, start five active fix chats and list the
rest as queued in this launcher. Keep THIS chat as the launcher/map, and say
plainly which blockers you did not start.Apply top to bottom; first match wins. The last row is an explicit catch-all — never fall through silently.
| State | What to do |
|---|---|
| No concrete task yet (plain greeting, no source input) | Say briefly that you are ready to work and make the one goal-first tracked ask for the outcome the user wants first — never a repo/path/URL/binding/setup ask. Do not offer tree build. |
| Concrete task visible, no existing code needed | Complete it directly in this chat from the user's messages, chat context, and locally available inputs; never force a repo/code menu in front of it. |
| Concrete task needs existing code, no source input | Ask for the minimal source input — a plain directory, pasted content, attachments, or a repository URL (never a new git repository). Read repository URLs with plain git first; use gh / glab only for forge/API actions or authenticated access. Do not ask for GitHub authorization first, and do not offer tree build. |
| Repo/resource exists but local credentials cannot read it | This blocks only repo-dependent work — keep serving everything else. Diagnose why (private repo needing access / gh or glab not authenticated / wrong path / network), then give the one specific next step for that cause — gh auth login or glab auth login if the matching CLI isn't authenticated; for a private repo, the narrowest access, an accessible URL, or a local project folder path; the corrected path if it's mistyped (see Handling snags). Do not claim private repo contents, fake understanding, or send a menu; don't just report the read failure and ask for a path/URL/credential all at once. |
| Repo readable, tree missing or empty | Take the bounded project read, send the receipt, and offer one or two microtasks without setup. A missing or empty tree is background state, not a bridge; do not offer a tree build. |
| Repo readable, tree already populated | Use relevant tree context only when already available, but keep the project read bounded and offer one or two microtasks. Do not turn tree state into a setup or Review prompt. |
| Repo readable, tree state unknown | Use repo evidence for the receipt and microtask choice without inventing tree readiness. |
| Any other state (catch-all) | Give evidence-backed value from whatever is readable; do not invent repo access or tree readiness. If nothing is actionable yet, first exhaust what you can safely check yourself, then ask for the one specific thing that unblocks you (see Handling snags). |
Role gates only post-result admin setup (selecting team repos, installing the GitHub App), not the goal-first ask or the first microtask.
You do not create or bind the tree yourself in this chat, and a result never
earns a tree offer. Route only explicit user requests, by tree state: build or
set up the Context Tree on a missing or empty tree → SPAWN a dedicated chat
and let first-tree-seed own repo creation, binding, and seeding there (see
Spawning Task Chats); read the Context Tree → first-tree-read; persist
current decisions as shared team context on a populated tree →
first-tree-write, a source-backed write still behind its own source gate —
never Seed, which refuses non-empty trees. Never silently create, bind, or
duplicate team-wide setup from this launcher chat.
Use the normal file or stdin transport for every multi-line or Markdown
chat ask / chat send body. Do not inline rich text through the shell.
Before the first choice, read only enough to make the choice specific:
Stop when those surfaces establish the stack, project shape, and one credible
starting point. Do not use recursive directory scans, whole-repo symbol dumps,
broad audits, machine-wide directory discovery, or additional files merely to
make the receipt sound richer. Choose the entry point from a path named by the
README, manifest, or first-level structure; do not enumerate inside a
subdirectory to discover more candidates. Before the choice, do not follow the
entry point's imports or search for its callers; that evidence belongs to the
selected microtask. A first-level listing may inspect the repository root only;
do not run rg, find, tree, or an equivalent search against a subdirectory.
Read only the path or repository URL the user provided. Before the read, use the existing chat status/description channel —
first-tree chat update --description "<brief working status>" — to say that
you are taking this small look. Do not substitute console narration or invent a
UI state or orchestration protocol.
After the bounded read, write exactly two short sentences before the choices:
This is an access receipt, not a value result. Do not label it a win, finding, audit, recommendation, or completed task. The receipt must be in the user-visible delivery that contains the choice. For a two-option tracked ask, put both receipt sentences at the start of the ask body; do not leave them only in working narration or a non-delivered final.
Offer 1–2 single-select microtasks and allow a free-text task. At least one option is read-only: a focused understanding or verification task that returns a concrete judgment with evidence or a 5–8 step call chain. A second option may be a minimal local change only when all three are clear from the bounded read: the target, the exact change surface, and one focused verification command.
When there are two options, use a tracked ask without --multi-select. When
only one responsible option exists, recommend it in a normal reply because the
tracked request primitive does not accept one option; deliver that reply with
first-tree chat send <human>. Accept a free-text task in either shape. Do not
show time ranges, longer tasks, bundles, collaboration
claims, or a parallel child-chat menu. Do not include Context Tree, GitHub App,
or repository setup in the first choice.
For two options, pass --options a JSON array of two objects with concise
label and description fields. The body remains in the -F file; do not
search the user's project for chat CLI examples.
Do the first selected microtask in this chat. Do not use chat create for the first selection,
even if the user chooses the minimal local change. Before a
write, treat the selection as consent only for the explicitly described local
change; it is not consent to push, create a PR/MR, install anything, or write
the Context Tree.
The selected option already establishes the starting seam. Begin from that
agreed entry and follow only task-relevant direct references; do not repeat
repository discovery or use a recursive scan to reconstruct the menu. Do not
run rg, find, tree, or an equivalent search over the repository or one of
its subtrees; open the agreed entry and the exact paths named by its direct
imports, calls, adjacent test, or verification command.
Return exactly one reviewable result shape:
The result must be useful without another task chat. Keep it scoped to the selected microtask and do not silently continue into a larger fix.
After the result, add exactly one next-step question, directly related to that
result. The answer controls the next action, so put the complete result and the
one question together in a tracked first-tree chat ask <human> body; do not
leave the result or bridge only in console/final narration:
ask the bridge as one free-text question without --options or another
choice menu;
if the result contains a diff, ask whether to create its PR/MR; do not mention GitHub App yet;
after a PR exists, mention GitHub App coverage only when live CI, review, or merge tracking is actually needed and unavailable;
otherwise bridge to one adjacent verification or implementation step directly tied to the user's current goal;
never offer a Context Tree build or a separate tree chat from a result, even when it exposed a lasting cross-module decision — only an explicit user request routes to tree work.
Never stack PR, GitHub App, repository registration, or another task as simultaneous bridges. The session project is not automatically added to the long-term Team repository catalog.
Example shape:
I read the Next.js manifest and the recovery entry point in app/checkout/recovery.ts.
Its expired-session branch is a credible first seam because it has a focused nearby test command.
Choose one:
- Trace expired-session recovery and return a 5–8 step call chain with file references. (read-only)
- Add the one missing recovery test and run its focused test command. (local change)
Or type a different microtask.The first microtask never fans out. Only after the user explicitly asks for multiple larger tasks may you use independent chats, one per task, with the existing status and completion contract. Do not present later fan-out as the first menu or describe it as multi-agent collaboration when it is only separate work streams.
Two other paths may still create task chats: the user explicitly asks to build the team's Context Tree, or a production-scan fix launcher has two or more eligible blockers. Production-scan fan-out remains capped at five active fix chats with distinct topics. Open each later task with:
first-tree chat create --to <your-own-agent-name> --topic "<short task topic>" "<self-contained task brief>"
Key mechanics — read these carefully, they are easy to get wrong:
--to <your own agent name>, to
yourself specifically, NOT to the user. Self-addressing is the one form that
wakes you: the server rewrites the opening message's sender to your manager
(so it is no longer "from you") and mentions you, which wakes you in the new
chat to do the work. Addressing it to the user instead would not wake you —
do not "simplify" it that way.chat update --description, then send the ordinary completion message
with outcome and evidence.first-tree github follow and report whether live
tracking is active or blocked by missing GitHub App coverage. For a GitLab MR,
include that the task should run first-tree gitlab follow <url> after
creation or reuse and report the returned pending or active attention state.
GitLab attention is inbound-only; only a pending declaration waits for the
next matching valid webhook. A follow failure does not invalidate the MR;
report only the First Tree chat attention gap. Never substitute first-tree github follow or GitHub App setup guidance for GitLab.first-tree-seed from
the task itself; it resolves the tree's state and owns creating + binding +
seeding — this launcher does none of that.Then, back in THIS chat, post a short line naming the later chats you opened so the user can see the parallel streams. As each spawned chat produces a result (a PR/MR, a passing test, the seed PRs/MRs), note it here so the launcher stays the map of what is in flight.
A first-result diff does not authorize a PR/MR. Ask whether to create it as the single post-result bridge. If the user agrees, create and follow the PR/MR in this chat, then report the result. Do not move this step into a child chat.
A review-ready GitHub PR makes App coverage relevant only when live CI, review, or merge updates are genuinely useful and following the PR reports that coverage is missing. In that state, a confirmed admin may receive one concise coverage handoff. Do not mention the App before the PR exists or merely because the repository is hosted on GitHub.
This section's App-install guidance is GitHub-only. For a GitLab MR, do not call
first-tree github follow, send the user to Settings → Getting Started for GitHub App
installation, or imply
that the First Tree GitHub App is involved. Instead, use the
first-tree gitlab follow <url> result and preserve its returned pending or
active state. GitLab attention is inbound-only; explain the webhook wait only
when the declaration is pending. If that follow fails, report only the First
Tree chat attention gap; the failure does not invalidate the MR. Do not invent
a GitLab integration URL or settings target.
Never substitute first-tree github follow or GitHub App setup guidance for GitLab.
first-tree github follow <url>) and reports whether
live tracking is active or blocked by missing GitHub App coverage.Do not inspect or surface Automatic Review, Team repository registration, or other setup after the first result. Those capabilities may become relevant in a later dedicated work stream, but they are not alternate onboarding bridges. A dedicated tree task owns its own later Review handoff; this chat does not repeat it.
Lead with the result, be brief, say only what helps the user act next. Do not
narrate process, and do not surface this skill's internals (the state table,
skill names like first-tree-seed, "binding", "kickoff", "systemSender") — say
it in plain product terms or not at all. Do not claim; show.
For the first microtask, the onboarding payoff is that the user sees it work in this chat:
browse
screenshot, a visible output, or a doc diff — and show the result. Onboarding
succeeds when the user sees the task genuinely done, not when you report it done.Avoid:
When a step fails or the situation is unexpected, do not relay the symptom and stop. Find the real cause, take the smallest forward action yourself, and ask the user only for what only they can supply.
gh or glab not
authenticated, a mistyped path, a network issue. Name the actual cause and act
on that.git, a local path, the matching
host CLI when authentication is the cause), read what you
can. Escalate to the user only when you hit something only they can supply
(access, a credential, a login, a repo) or a genuine decision.gh isn't logged in — run
gh auth login, then tell me" or "glab isn't logged in — run glab auth login, then tell me" beats "I couldn't read it; give me a path, URL, or
credentials." One concrete next step, not a menu of possibilities.This does not loosen consent: a consequential or irreversible action (repo creation, pushes, PRs/MRs, authorization) still needs the user's explicit yes. Being a protagonist is about owning diagnosis, safe/reversible steps, and mechanism choices — not about acting on things that are genuinely the user's to allow.
Consent gates. Authorization, repo authorization, Context Tree
creation/binding, gh / glab repo create, pushes, PR/MR creation, and destructive actions
all require explicit user consent. The user's explicit request to build the
Context Tree IS consent to open its dedicated task chat; other
authorizations use a tracked ask.
Role.
Forge / repo access.
git first for reading code. Use the forge CLIs
(gh for GitHub, glab for GitLab) only for actual forge/API actions —
PR/MRs, issues, checks, comments, provider metadata — not merely because a
URL is a GitHub or GitLab URL. A GitHub URL alone is never a reason to ask
for GitHub App installation.git / local credentials first,
using the host CLI (gh / glab) only when authentication or a forge action
requires it; (4) if gh or
glab is missing / unauthenticated / lacks access for a forge action the
task actually needs, explain that exact gap and give the single narrowest
recovery for that diagnosed cause (e.g. gh auth login or glab auth login
when it's just unauthenticated; a local project folder path; the relevant CLI
install) — one concrete step, not the whole menu; (5) never offer to build
the Context Tree from this chat — only an explicit user request routes to
the dedicated tree chat.Setup handoff (steps you cannot perform — durable provider authorization, repository coverage, Review Agent selection). Raise them only when a real milestone makes the capability relevant, then guide that one step to completion — do not raise setup as an opening menu, and do not give brittle click-by-click paths. When you do hand off, give the most specific stable target available (product deep link when authoritative; otherwise Settings → Getting Started). Do not guess slugs or URLs, and do not expose tokens or secrets. If the human is not an admin, do not send them into an admin-only surface; involve the responsible admin.
first-tree-seed);
read the Context Tree → first-tree-read; persist current decisions as
shared team context on a populated tree → first-tree-write behind its
source gate.first-tree gitlab follow <url> in this chat and preserves the returned
pending or active state; never substitute GitHub App setup.chat update --description for the bounded-read status.
Console narration does not satisfy either user-visible obligation.chat ask; deliver a one-option
first choice through chat send and a two-option choice through one tracked
ask without --multi-select.chat create for the
first selection. Only after the user explicitly asks for multiple larger
tasks may those later tasks fan out through the existing task-chat workflow.
(Exception: the separate production-scan fix route retains its blocker
orchestration — see Production-scan fix handoff.)first-tree-seed owns that in the spawned tree chat.first-tree-guide,
first-tree-onboarding, or first-tree-kickoff.© first-tree-ai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in skills/first-tree-welcome of first-tree-ai/first-tree.
Open the folder on GitHubat commit 13f2a38
First Tree Welcome next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| First Tree Welcome this skillfirst-tree-ai/first-tree | 154 | — | ~11k | Automated safety check: Pass | Apache-2.0 | |
| Feishu Docopenclaw/openclaw | 392k | — | ~516 | Automated safety check: Pass | MIT | |
| Feishu Docraucvr/Group-Goki | 112 | 3 repos | ~592 | Automated safety check: Pass | MIT | |
| Feishu Driveraucvr/Group-Goki | 112 | 3 repos | ~587 | Automated safety check: Pass | MIT | |
| Feishu Permraucvr/Group-Goki | 112 | 3 repos | ~630 | Automated safety check: Pass | MIT | |
| Feishu Safety GuideSafeAI-Lab-X/ClawKeeper | 1k | — | ~3.6k | Automated safety check: Pass | None |
openclaw/openclaw
Feishu document read/write workflows. An agent skill from openclaw/openclaw.
raucvr/Group-Goki
Feishu document read/write operations. An agent skill from raucvr/Group-Goki.
raucvr/Group-Goki
Feishu cloud storage file management. An agent skill from raucvr/Group-Goki.
raucvr/Group-Goki
Feishu permission management for documents and files. An agent skill from raucvr/Group-Goki.
SafeAI-Lab-X/ClawKeeper
One-click deployment Skill for Feishu security governance and message anti-data-leakage guide, responsible for Feishu message security, credential protection, permission auditing, interaction…
y49/tlive
tlive — remote approvals (Telegram/Feishu/web), live web terminal, and session monitoring for Claude Code / Codex.
first-tree-ai/first-tree
File a GitHub issue about a defect in First Tree itself — the CLI, agent runtime, chat, web app, GitHub integration, GitLab integration, or Context Tree tooling — onto First Tree's own GitHub-hosted…
first-tree-ai/first-tree
Review a GitHub pull request or GitLab merge request against the workspace-bound Context Tree when a trusted server-authored Context Reviewer run supplies provider-scoped authority.
first-tree-ai/first-tree
Audit stored normal content on the bound Context Tree's actual binding branch when a human explicitly asks to audit the whole tree, a domain, or specific normal paths for drift, contradictions…
first-tree-ai/first-tree
Read the applicable Context Tree before acting. An agent skill from first-tree-ai/first-tree.
first-tree-ai/first-tree
Act as an independent QA engineer for a software repository.
first-tree-ai/first-tree
Bootstrap a team's Context Tree from readable source repos — for an onboarding "build / set up the Context Tree" task on a tree that has no domain structure yet: either no tree exists (creates and…
Works with
Categories
A skill your agent uses for a First Tree onboarding first chat, especially natural opening messages like "welcome aboard", "Please help me get started with First Tree", or "Please help me get…. First Tree Welcome is an agent skill from first-tree-ai/first-tree." Also covers the production-scan fix first chat ("fix the launch blockers found by my production readiness scan").
First Tree Welcome fits situations like: A First Tree onboarding first chat; especially natural opening messages like welcome aboard; please help me get started with First Tree; external-channel.
Run `npx skills add first-tree-ai/first-tree --skill first-tree-welcome -a claude-code`. Or copy the skill folder (skills/first-tree-welcome in first-tree-ai/first-tree) into .claude/skills/first-tree-welcome in your project. Claude Code loads it when a task matches its description.
Run `npx skills add first-tree-ai/first-tree --skill first-tree-welcome -a codex`. Or copy the skill folder (skills/first-tree-welcome in first-tree-ai/first-tree) into .agents/skills/first-tree-welcome in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add first-tree-ai/first-tree --skill first-tree-welcome -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/first-tree-welcome, .gemini/skills/first-tree-welcome, .github/skills/first-tree-welcome and .opencode/skills/first-tree-welcome in your project.
Going by SKILL.md and its folder, First Tree Welcome needs the command-line tools its instructions call (gh and glab).
SKILL.md names 1 domain. As links in the text: report.first-tree.ai. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
First Tree Welcome is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 11k tokens (SKILL.md is roughly 45k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with First Tree Welcome: Feishu Doc (openclaw/openclaw, 392k stars), Feishu Doc (raucvr/Group-Goki, 112 stars), Feishu Drive (raucvr/Group-Goki, 112 stars) and Feishu Perm (raucvr/Group-Goki, 112 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
first-tree-ai (a GitHub organization) maintains it in first-tree-ai/first-tree, which has 154 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on September 30, 2026.
Source: first-tree-ai/first-tree on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.