frontmatter · SKILL.md+
name: inklate-setup
description: >
Connect the agent to a real Inklate workspace and prove the connection works end to end.
Logs in from the terminal (device flow, or an environment key when headless), lists every
connected channel across LinkedIn, X (Twitter), Instagram, and Facebook today (with
Mastodon, Threads, Bluesky, TikTok, and YouTube in platform review), and fetches the live
capability rules for each one. Use when the user says "set up Inklate",
"connect Inklate", "verify my Inklate connection", or asks "which channels do I have".
Requires the Inklate CLI (npm i -g inklate) or the Inklate MCP connection — this skill is
the smoke test that every other Inklate skill assumes has already passed. Reads
social-context.md when present and offers to pre-fill its Platforms section from the
channels that are actually connected. Run this first, once per workspace.
license: MIT
metadata:
version: 0.1.1
topics:
- foundation
examplePrompt: "Set up Inklate and show me my connected channels"
pairsWith:
- social-context
mcpTools:
- organizations_list
- channels_list
- capabilities
- connections_create
- connections_get
- connections_destinations
- connections_select
- channels_disconnect
cliCommands:
- auth login
- auth check
- auth set
- organizations list
- channels list
- channels connect
- channels disconnect
- capabilitiesVerify the Inklate connection, inventory the connected channels with their real capability rules, and leave the workspace ready for every other skill.
Transports
Every Inklate skill drives the platform through whichever transport this agent has — the operations are identical:
- CLI (preferred): the
inklatecommand (npm i -g inklate). Structured YAML on stdout (--jsonfor JSON), progress and prompts on stderr, and typed exit codes:3no credentials,4a deliberate refusal with its machine-readable payload on stdout,6the resource changed underneath you,7rate limited but safe to re-run later. Pass--no-inputwhen running unattended so a missing flag fails loudly instead of prompting, and--yesto carry an approval the user has already given in chat. - MCP (fallback): the Inklate MCP tools, when the CLI is not installed.
Steps below name the MCP operation with its CLI equivalent in parentheses; run the CLI form when available.
Connection check
- Run
inklate auth check(MCP: callorganizations_list). This is always the first step. - On exit 3 — the CLI is installed but has no credentials — pick the path that fits the session:
- Interactive:
inklate auth loginruns the device flow. It prints a short code and a browser URL; the user approves the code and picks the organization, and the key lands automatically. - Headless (CI, unattended agents): the key comes from
INKLATE_API_KEY=inklate_…in the environment, orinklate auth set --token inklate_…. No browser involved. Agents holding several workspaces keep them apart with--profile <name>. - If neither the CLI nor the Inklate tools are available at all, tell the user to install with
npm i -g inklate(or connect athttps://inklate.com/skills/connect?ref=skills-inklate-setup) and STOP. Do not attempt any workaround.
- Interactive:
- If exactly one organization comes back, name it and continue. If several come back, list them and ask which one to use — never guess. Remember the choice for the rest of the session (CLI: pass
--org <slug>).
Context
Look for social-context.md at the project root, then .agents/social-context.md. If found, read it — especially the ## Platforms section — so you can later compare what the user says they post on against what is actually connected. If absent, proceed without it; setup does not depend on it.
Workflow
With the organization settled, call
channels_list(CLI:inklate channels list). For each channel record: platform (LinkedIn, X, Instagram, Facebook, Mastodon, Threads, Bluesky, TikTok, YouTube — the last five in platform review), account name/handle, and connection status.If
channels_listreturns nothing, say so plainly: the connection works but no social accounts are connected yet. Offer to connect one right now —inklate channels connect <provider>opens the provider's consent in the browser and picks destinations in the terminal (MCP:connections_create→ hand the URL to the user → pollconnections_get→connections_destinations→connections_select). Otherwise stop after the receipt.Call
capabilitiesonce (CLI:inklate capabilities) — it returns every channel's effective capabilities plus every provider's manifest in one response, so there is no per-channel call to make. Read out of it, per connected channel, the rules that matter day to day:- Character limits per post and per thread segment.
- Media rules: image/video counts, formats, and whether media is required (Instagram) or optional.
- Threading support and link handling.
- Anything the channel flags as unavailable, restricted, or expired.
The same response also enumerates providers that have an adapter but no connection here — that is what connecting one more would unlock.
If any channel reports a broken or expired connection, flag it prominently — it will fail silently later during publishing if ignored. Reconnecting is
inklate channels connect <provider>again. Only reach forinklate channels disconnect <id>(MCP:channels_disconnect) when the user explicitly wants a channel gone, and say what it costs first: scheduled posts targeting that channel return to draft, though published history survives.Summarize the inventory in chat: one line per channel with platform, handle, status, and the two or three capability rules the user is most likely to hit (e.g. "X: 280 chars, 4 images max, threads supported").
Offer the social-context sync. If
social-context.mdexists, compare its## Platformssection with the connected channels:- Channels connected in Inklate but missing from the file: offer to add them.
- Platforms in the file but not connected: point them out, but never remove them — the user may connect them later.
- Show the exact lines you would add, get an explicit yes, then apply the edit. Additive only: never rewrite, reorder, or delete anything the user wrote by hand.
- If no
social-context.mdexists, suggest running thesocial-contextskill and offer to seed its Platforms section from this inventory when they do.
Confirm the smoke test verdict: transport reachable, N channels live, M channels needing attention.
Close by naming what the workspace is now ready for, one line each, only for skills whose channels are actually healthy:
posts-createfor a validated draft in one call,posts-publishfor shipping or scheduling it,calendar-schedulefor booking a whole plan,posts-updatefor editing or cancelling what is already queued,files-uploadfor getting media in first,inbox-triagefor engagement,analytics-reviewfor retros.
Quality bar
- Never proceed past a failed
auth check/organizations_list— a broken connection makes every downstream answer fiction. - Report channel status exactly as the API returns it; do not soften "expired" or "disconnected" into "needs a refresh sometime".
- Capability summaries must come from the live
capabilitiesresponse, not from memorized platform trivia — limits change. One call covers every channel; calling it per channel is waste, not thoroughness. - Edits to
social-context.mdare additive and pre-approved by the user, line by line. When in doubt, show the diff and ask. - If multiple organizations exist, every subsequent statement names which organization it refers to.
- Disconnecting a channel is the user's explicit call, made after hearing that its scheduled posts return to draft — never a cleanup you perform on your own initiative.
- This skill changes nothing in Inklate itself unless the user asks for a connect or disconnect — it reads, verifies, and (with approval) touches only the local
social-context.md.
Receipt
End with this table, filled from the real responses:
| Organization | Channel | Platform | Status | Capabilities summary |
|---|---|---|---|---|
| Acme Inc | @acme | X | connected | 280 chars, 4 images, threads OK |
| Acme Inc | Acme Page | connected | 3000 chars, 9 images, no threads | |
| Acme Inc | acme.co | expired — reconnect | requires media on every post |
Below the table, state: the organization in use, the count of healthy channels, any channels needing reconnection, and whether social-context.md was updated (with the exact lines added) or left untouched.