Inklate skill · Set up

inklate-setup

Connect the agent to a real Inklate workspace and prove the connection works end to end.

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
    - capabilities

Verify 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 inklate command (npm i -g inklate). Structured YAML on stdout (--json for JSON), progress and prompts on stderr, and typed exit codes: 3 no credentials, 4 a deliberate refusal with its machine-readable payload on stdout, 6 the resource changed underneath you, 7 rate limited but safe to re-run later. Pass --no-input when running unattended so a missing flag fails loudly instead of prompting, and --yes to 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

  1. Run inklate auth check (MCP: call organizations_list). This is always the first step.
  2. On exit 3 — the CLI is installed but has no credentials — pick the path that fits the session:
    • Interactive: inklate auth login runs 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, or inklate 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 at https://inklate.com/skills/connect?ref=skills-inklate-setup) and STOP. Do not attempt any workaround.
  3. 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

  1. 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.

  2. If channels_list returns 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 → poll connections_getconnections_destinationsconnections_select). Otherwise stop after the receipt.

  3. Call capabilities once (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.

  4. 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 for inklate 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.

  5. 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").

  6. Offer the social-context sync. If social-context.md exists, compare its ## Platforms section 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.md exists, suggest running the social-context skill and offer to seed its Platforms section from this inventory when they do.
  7. Confirm the smoke test verdict: transport reachable, N channels live, M channels needing attention.

  8. Close by naming what the workspace is now ready for, one line each, only for skills whose channels are actually healthy: posts-create for a validated draft in one call, posts-publish for shipping or scheduling it, calendar-schedule for booking a whole plan, posts-update for editing or cancelling what is already queued, files-upload for getting media in first, inbox-triage for engagement, analytics-review for 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 capabilities response, not from memorized platform trivia — limits change. One call covers every channel; calling it per channel is waste, not thoroughness.
  • Edits to social-context.md are 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 LinkedIn connected 3000 chars, 9 images, no threads
Acme Inc acme.co Instagram 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.

Related skills