Operating without a UI — MCP / IDE / Slack mode. How to compensate for missing client tools, how to be useful in a text-only chat. Load when the session client kind is NOT `posthog-code`.
66
80%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./products/agent_platform/backend/kernel_skills/working-outside-the-console/SKILL.mdHow to be useful when there is no UI — load when the session
reports a non-PostHog-Desktop client kind (Claude Code, Cursor, MCP
Inspector, or any unknown shape) or when none of the focus_* /
toast client tools are in your tool surface. Without client
tools, every navigation has to happen in text.
| Capability | PostHog Desktop | MCP / IDE |
|---|---|---|
| User sees the artifact you're working on | Yes — focus_* tools drive the panel | No — the user sees only your text |
| User can context-switch by clicking | Yes — they can wander | No — the conversation IS the navigation |
| Status notifications | toast | A short line in the chat |
| Streaming partial output | Sometimes rendered nicely | Usually rendered as plain text |
| Approval requests | Inline buttons in the dock | A text instruction to take action elsewhere |
The biggest shift: the user has zero visibility into the
artifacts you call MCP tools against unless you put them in
text. A posthog__agent-applications-revisions-bundle-retrieve that
returns 5 files in PostHog Desktop can be opened in the panel; over
MCP, you have to summarize.
Every artifact you touch gets named in text. Slug, revision id, file path. The user copy-pastes these into their own tools (a browser at app.posthog.com, a curl) if they want to verify.
Reading
weekly-digest(idapp_abc123), live revisionr_xyz789, fileagent.md(87 lines, last edited 2026-05-12).
vs the PostHog Desktop-friendly equivalent:
Opening weekly-digest's live revision in the panel.
The MCP version pays for the extra words; the value is the user can act on the references without further round-trips.
When the user would have looked at the read panel, instead include the summary in your message. Trade tokens for context.
System prompt summary (3 sections, 87 lines total):
- Identity (1-12): "You are the weekly-digest agent…"
- Job (13-50): walks through the digest flow, mentions $pageview / $autocapture
- Tone (51-87): casual, asks for ack at the end
Full file (paste to read)?
[contents on request]
Don't dump the file unprompted — offer to.
In PostHog Desktop, you can fire multiple MCP calls in one turn because the user is watching the panel transitions. Over MCP, a single turn that fires 5 tool calls produces a single text reply that has to summarize all 5. Prefer:
Look at the session-start info event — it reports the client kind. Treat it as a hint, not a contract:
The reliable signal is your own tool surface: if the focus_*
and toast client tools are present you're in PostHog Desktop; if
they're absent, you're not.
The MCP transport exposes things PostHog Desktop doesn't always:
Mcp-Session-Id header — the connecting MCP client's
session id. Multiple chat-trigger sessions from the same MCP
connection share this. Useful when the user says "what was
that other session we just looked at?" — you can list resources
filtered by their MCP connection.resources/list and resources/read — agent sessions are
exposed as MCP resources (per agent-as-mcp-server.md §3).
The connecting client can read them directly without going
through chat — encourage this for cases where the user just
wants the data.E.g. "show me the file tree visually" or "click that button". Be direct:
The file tree view is a PostHog Desktop-only thing — you're connected via MCP. I can list the file paths in text instead:
- agent.md
- skills/triage-playbook.md
- skills/slack-thread-protocol.md
- tests/happy-path.json
Or, if you want the visual view, open PostHog Desktop → weekly-digest → bundle.
Don't pretend you can drive a UI that isn't there.
IDE clients render code blocks well. Use them for:
Keep them short. A 200-line agent.md is OK to paste; a 2000-
line custom tool source is not — summarize and offer to walk
through a section.
Not in v0. When the agent grows a slack trigger and is invoked
in a Slack channel, the rules from working-outside-the-console
mostly apply (text-only) but with Slack-specific formatting:
*bold*, _italic_, code with single
backticks)Until the slack trigger lands, you won't see this client kind.
047ca00
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.