From Kestral
Use when the user explicitly runs Kestral setup, asks to onboard, organize, or import work into Kestral, or wants projects created from connected tools, goals, repos, documents, or local files.
How this skill is triggered — by the user, by Claude, or both
Slash command
/kestral:kestral-setupThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Authenticate with Kestral, inspect whatever sources the user provides, propose a small active-workstream taxonomy, and
Authenticate with Kestral, inspect whatever sources the user provides, propose a small active-workstream taxonomy, and create one or more Kestral projects with relevant documents, tasks, and Project Brain generation.
Setup works from connected tools (Linear, Jira, GitHub, Notion, Google Drive, Slack, and others), user-provided goals, repositories, and optionally local files. If the user only says they are not organized yet, help them get organized by inspecting available sources and proposing a focused starting structure.
Kestral must show as connected with tools such as whoami, create_project, or query_entities in this
session. If missing, reconnect in the client.
Keep Kestral IDs internal unless the user asks for them. In user-facing output:
slug - title when a slug is available, linked with url when the host can render links.url when the host can render links.Unknown member (id: <rawId>).Unknown <entity type> (id: <rawId>).Run before any Kestral MCP call. Stop on failure; exact messages in docs/manifest-copy-spec.md.
Kestral tools (all hosts) — Confirm Kestral tools such as whoami, create_project, or query_entities in this
thread (/mcp). If absent → MCP not connected. Give the user the matching troubleshooting steps:
/kestral:kestral-setup again./config), go to MCP Servers, add or reconnect the Kestral
server, then run /kestral:kestral-setup again.$kestral-setup
in a new thread.Do not block setup if upload tools are missing. Step 7 handles upload attempts gracefully — trying the best available
tool, offering egress fix instructions on failure, and falling back to create_document for text files. Project
creation, task import, and external doc linking work regardless of upload capability.
Call whoami. If it succeeds, proceed. If it fails (401 / unauthorized), tell the user:
Kestral isn't authenticated yet. Open your app's MCP settings, find the Kestral server, and reconnect or authenticate it — a browser window should open for sign-in. Once you've signed in, ask me to continue.
If you haven't set up Kestral MCP yet, visit your workspace's Integrations page in the Kestral web app for setup instructions.
On Cursor, retry via mcp_auth if available. Do not call other Kestral tools until whoami succeeds.
After whoami succeeds, call query_entities({ type: "projects", query: "all projects", explanation: "Check for existing projects before setup" })
to see whether the workspace already has projects.
| Condition | Behavior |
|---|---|
| No projects | Continue to step 2 (current flow, unchanged). |
| 1–3 projects | Show each with title, URL, and a brief description when available. |
| 4+ projects | Show the top 3 by recent activity and mention the total count (e.g. "…and 4 more"). |
When projects exist, offer a choice — do not auto-skip setup:
I found existing Kestral projects in your workspace:
- Project Name — brief description when available
- ...
What would you like to do?
- Add more context to one of these — import new docs or tasks and refresh the Project Brain
- Create a new project — start fresh with a new workstream
- Just explore what I have — I'll share the links and help you plan your day
Routing:
| User choice | Next step |
|---|---|
| Add more context to [project] | Enter the enrich existing project flow (below). Skip step 2 opener; frame around "what new context should we add?" |
| Create a new project | Continue to step 2 (current flow, unchanged). |
| Just explore | Show project links, then skip directly to step 9 (guided journey). Use the selected or most recent project for journey prompts. |
When the user picks an existing project to enrich:
projectId and url — do not call create_project.create_project. Upload/link documents and create tasks against the existing projectId. Call trigger_brain_build for that project after new context is attached.If the user cancels during enrich, follow the same cancel behavior as the main flow.
Open with this framing:
Welcome to Kestral. I can help organize your work into Kestral projects so you and your team can stay on track automatically.
Tell me what you're working on — a goal, a project you want to move over, or point me at where your context lives (Linear, Jira, GitHub, Notion, Google Drive, Slack, files, or anything else). I'll propose a starting structure with projects, tasks, and Project Brains.
Accept any useful source input:
Use lightweight steering prompts when they fit:
Want me to use your task system as the main signal, or do you already have buckets in mind?
I found active work in Linear and GitHub, plus docs in Drive. I'll use those unless you want to limit scope.
I can create the recommended projects, just the top few, or let you rename/split/merge first.
This is a curated first pass. I'll import the most relevant context now and leave the rest available to add later.
For read-only source inspection, tell the user what is being checked and proceed. Do not ask for per-source approvals.
Inspect independent sources in parallel when possible. Dispatch sub-agents for independent source families when the host supports it; otherwise use parallel tool calls for independent reads. Keep sub-agent outputs compact: source name, candidate workstreams, task metadata, document titles/paths/URLs/IDs, confidence notes, and failures. Do not load huge task or document bodies into main context when metadata, paths, URLs, or IDs are enough.
Use these source-specific helpers and patterns:
| Source family | Guidance |
|---|---|
| User buckets | Treat user-provided project names, goals, work areas, and outcomes as the taxonomy unless the user asks you to infer alternatives. |
| Task systems | Use scan-tasks/SKILL.md for Linear, Jira, GitHub Issues, and similar tools. Prefer open, in-progress, recently updated, high-priority, or recently completed work. |
| Document systems | Discover Notion, Google Drive, Slack, Confluence, and other linkable sources through available MCP tools. Keep canonical URLs for link_external_document; content text is only a fallback snapshot. |
| Repositories | Use repo metadata, issue links, README/docs references, milestones, labels, and recent activity to support task and document signals. |
| Local files | Only when the user explicitly provides a folder or file paths. Use scan-folder/SKILL.md for folders and explicit file lists. Treat files as evidence first: inspect representative document content when possible, keep file paths, sizes, sampled titles, candidate themes, and notable omissions, then decide whether each file should also be uploaded. |
If the user scoped sources, honor that scope. If they only said they are not organized yet, inspect available connected task and document sources, then propose a focused starting structure. Do not proactively scan local folders unless the user mentions them.
If a connected source read fails, mark that source skipped and continue with the other sources. If all usable sources are missing or unreadable, ask one targeted question that would unblock setup.
Default to active workstreams, not archive categories or source-system silos.
Documents are flexible evidence. A document may be:
create_document and projectId, not the
project description field.For a small document set, inspect enough content to understand the work at a high level before proposing projects. For a large document set, sample representative documents, summarize coverage, and let the user steer expansion. If only filename, path, metadata, or a failed extraction is available, say that clearly and do not present filename-only guesses as if the contents were understood. Ask one focused question only when the evidence is too thin or risky for a useful manifest.
Taxonomy rules:
Project count rules:
Default import is curated, not capped. Select the most relevant representative tasks and documents for the first pass. If the user asks for more or all matching tasks/documents, import more or all in batches within the approved projects.
Use readable labels throughout the manifest: document names, source labels, task titles, and priority labels. External task IDs are provenance/debug details only; do not show them unless the user asks.
Show proposed Kestral projects, not a source dump. Each proposed project includes:
[local] or [<source>] labels.Render compactly:
Proposed projects
1. Billing Automation
Description: Consolidates active billing workflow work and supporting implementation docs.
Rationale: Linear project, recent GitHub issues, and matching Drive design docs.
Selected tasks:
- Fix invoice retry state [linear, high]
- Add webhook replay tests [github, medium]
Selected documents:
- billing-architecture.md [local]
- Billing rollout notes [google-drive, linked]
Coverage: 12 tasks selected, 43 more matching; 8 docs selected, 96 more candidates.
Confidence: High. Ambiguity: one Slack thread may belong to Support Ops.
Extra candidates to revisit later
- Legacy billing cleanup: stale tasks and low recent activity.
Make clear that the curated manifest is a starting import, not a hard limit:
This is a curated first pass. I'll import the most relevant context now and leave the rest available to add later.
Render the manifest for visibility, then proceed — do not block on a separate manifest approval when the host already prompts for write-tool permission (Claude Code, Claude Cowork, Cursor, Codex with tool permissions enabled).
Then continue to step 7 unless the user sends an edit or cancel command first. Supported commands mirror
docs/manifest-copy-spec.md. If an edit target is ambiguous in a multi-project manifest, ask one focused clarification
before applying it:
| Command or intent | Effect |
|---|---|
ok / yes / go / create these | Proceed to create selected projects and import selected context |
revise | Edit the manifest before proceeding (same as edit commands below) |
remove <file> | Remove a specific local file from the selected document list |
add <path> | Validate the path, stat its byte size, and add it to the selected local documents |
remove <source> documents | Remove all selected documents from a source, such as Notion or Google Drive |
skip tasks | Remove selected tasks from this run so no tasks are imported |
title: <new> / change title <new> | Override a proposed project title; ask if the target project is unclear |
description: <new> / change description <new> | Override a proposed project description; ask if the target project is unclear |
only create <project> | Deselect other proposed projects |
skip <project> | Remove a proposed project from this run |
rename <project> to <new title> | Update a proposed project title |
split <project> | Ask one focused follow-up and split into clearer workstreams |
merge <project A> and <project B> | Combine proposed projects and their selected context |
move <item> to <project> | Move a selected task or document between proposed projects |
use these buckets: <list> | Switch to user-led taxonomy and remap sources |
import more <source> into <project> | Expand import scope for that project/source |
import all matching <tasks/documents> | Switch that project/source to bulk import mode |
look at <folder> instead / change folder <path> | Re-scan a new folder and remap the proposed taxonomy |
cancel / no / stop | Exit cleanly without Kestral write calls |
Re-render the manifest after edits. Do not add redundant approval loops — the host's tool-permission prompt is the approval gate for normal curated setup.
Hosts without per-tool permission prompts (agents that auto-run MCP writes with no confirmation): wait for explicit
ok / create these before calling any write MCP tool. Ask: "Okay to proceed? ok/revise/cancel"
Ask for explicit confirmation and wait before writes when:
For large writes, confirm scope in one concise message, such as:
This will import 437 tasks and 82 documents into 3 projects. Okay to proceed? ok/revise/cancel
Do not ask separate confirmations for every project, source, document batch, or task batch.
Apply each selected project after the manifest checkpoint (or after explicit ok for no-permission hosts). Use parallel write calls only where writes are independent and the host allows it; otherwise proceed sequentially with compact progress updates. Always preserve successful project URLs.
For each selected project:
create_project with the project title, description, and lifecycle status when appropriate. Store projectId
and url.link_external_document.create_document with { title, content, projectId } — not upload_document or
project_management.create_tasks.trigger_brain_build for that project.Follow the document upload workflow in upload/SKILL.md (Steps 1–2 for upload and egress recovery, plus the fallback
for creating documents from file content when upload isn't possible).
Report upload failures per-file; do not pre-declare hard limits. Skip rejected files and continue.
External documents:
link_external_document for documents with canonical source URLs.url, title, projectId, and fallback content when available.create_document; that loses provenance and breaks autosync.resolutionStatus. A pending result is partial success: the snapshot is linked, but the matching Kestral
integration should be connected for live autosync.Tasks:
create_tasks with the selected task records for the project.Project Brain:
trigger_brain_build per project after documents and tasks are attached.Return a compact summary:
Present created projects, linked documents, uploaded documents, and imported tasks by readable title/name and URL when available.
Always return successful project URLs when any project creation succeeded, even if imports or Project Brain failed.
If one or more linked docs returned resolutionStatus: "pending", add one line naming the distinct sources and pointing
the user to connect them in Kestral:
I linked your Notion and Google Drive docs from saved snapshots. Connect those integrations in Kestral (Workspace Settings → Integrations) and they'll autosync to the latest version.
If brain generation was enqueued, say:
Your Project Brain is generating — it takes about 1–2 minutes. Once it's ready, visit your project to see it: Project Name
The Project Brain gives your AI agent context about your work — goals, blockers, recent activity, and team dynamics. It updates automatically as you work.
If multiple projects were created or enriched, include a visit prompt for each project with its URL.
If Project Brain is not enabled:
Project created. Project Brain isn't enabled for this workspace — ask your admin to turn it on, then open the project and click Generate.
If Project Brain fails:
Project created. Brain generation couldn't start. Open the project and click Generate to retry.
After step 8, walk the user through the post-setup journey. Each beat is a suggestion — never auto-run the next skill. Present the journey in order. The user can skip any beat or stop after any prompt.
Take a minute to visit your project and explore the Project Brain. It should be ready by now: Project Name
When you're back, I can help you plan your day with Kestral.
If the user came from "just explore" (step 1.5) with no new imports, adapt: "Visit your project and explore the Project Brain when you're ready" and link each existing project.
Ready to see how Kestral can help you start your day? Ask me to plan your day — it pulls your daily brief, calendar, and task state into a realistic plan with focus blocks.
One more thing — when you wrap up today, ask me for an end-of-day review. It reviews what got done, reconciles project state, and sets up tomorrow's priorities.
Ready to tackle a task or blocker? Pick one and I'll help you get started. If you set up Kestral Sync or assign it to a code agent, progress updates flow back to Kestral automatically — your Project Brain stays current and your team sees outcomes in real time, no extra work needed.
| User intent | Do this |
|---|---|
| Start a task | Help the user pick a task, set it to in progress, and begin working. Mention Kestral Sync for automatic progress updates. |
| Add more context | Scan or link new sources, attach them to the relevant project, and rerun trigger_brain_build. |
| Help clear blockers | Use Kestral task tools to inspect open project work and help the user pick the next blocker. |
| Map remaining candidates | Return to extra candidate workstreams and ask one targeted question if the next split is unclear. |
Before any write MCP tool has been called, cancel or stop exits cleanly. Confirm:
Cancelled. No changes were made in Kestral.
After project creation or import writes have started, cancellation means stop future writes as soon as safely possible. Do not start additional project creation, document upload/link, task creation, or Project Brain calls after cancellation. Return a compact partial-results summary with:
create_document.create_document; binary files skipped with manual-upload message.Use docs/manifest-copy-spec.md for exact user-facing copy: preflight messages, error principles, partial-success
examples, and pending-link nudges. Adapt project counts, source names, item counts, and URLs to the actual run.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub kestral-team/kestral-plugins --plugin kestral