Skip to content

Tile Creator Feedback ​

Send feedback about your /tile-creator session — what was confusing, what broke, what should change. The skill uploads the current conversation trace and posts a short note to the Joiner team so they can replay the exact context that triggered the issue.

User Argument:

If empty, ask "What's the feedback?" and stop. Otherwise treat the argument as the verbatim user complaint.

Example invocations:

  • /tile-creator-feedback the schema scaffold left an unused mutator and the publish step failed silently
  • /tile-creator-feedback haptic feedback advice should mention the iOS Safari gap up front

Prerequisites ​

  • POE_API_KEY in the shell environment.
  • bash, curl, and jq on PATH.

This skill is self-contained. All HTTP work is done by the bundled submit-feedback.sh script next to this file — no dev-tools CLI or other in-repo tooling is required.

Workflow ​

The bundled submit-feedback.sh has two subcommands:

  • prepare — locate the latest Claude Code session JSONL and upload it. Prints TRACE_URL=... on stdout.
  • post — post the top-level + thread reply to Slack via dev-tools-api /post-message. Reads TOP_TEXT / THREAD_TEXT from env (multi-line user complaints with quotes/backticks would mangle as positional args).

Step 1 — Prepare (upload trace) ​

submit-feedback.sh lives in the same directory as this SKILL.md. The Claude Code runtime exposes that directory as the Base directory for this skill: line in the skill's system prompt. Set SCRIPT to that absolute path:

bash
SCRIPT="<base-directory-for-this-skill>/submit-feedback.sh"

eval "$("$SCRIPT" prepare)"
# After eval: $TRACE_URL is set in the shell.

If prepare exits non-zero, surface the error to the user and stop — do not attempt to post without a trace URL.

Step 2 — Draft the messages ​

From the verbatim complaint and the recent /tile-creator conversation, draft two messages:

  1. Top-level summary (posted in channel). Use the literal token — the dev-tools-api server substitutes the caller's Slack handle from POE_EMPLOYEES.slackHandle (resolved via Bearer auth). Do NOT embed a Poe handle yourself; Poe handles and Slack handles are different namespaces and a textual @<poe-handle> would either fail to mention anyone or mention the wrong person.

    `/tile-creator-feedback` from @{{currentUserSlackHandle}}:
    ```{verbatim complaint}```

    No "see thread" suffix — Slack already shows a reply count.

  2. Thread reply with full context. Must be:

    • Reproducible — what the user did/asked that triggered the issue.
    • Actionable — what should change, or what specific fix would address it.
    • Include the trace URL.

Suggested thread template:

*Skill:* /tile-creator
*Session:* $TRACE_URL
*Issue:* {what went wrong + suggested fix}
*Reproduction:* {action that triggered it}

Step 3 — Confirm with the user before posting ​

Always show both drafted messages, the target channel, and the trace URL to the user, and wait for explicit approval. Do not post until they confirm. This is non-negotiable.

Channel: joiner-feedback
Trace:   $TRACE_URL

[top-level — posted in channel; `{{currentUserSlackHandle}}` shown literal]
…drafted top-level message…

[thread reply]
…drafted thread reply…

If the user wants edits, revise and re-confirm.

Step 4 — Post ​

After explicit confirmation, run the post subcommand. Pass message bodies via env vars so multi-line text with quotes/backticks survives:

bash
TOP_TEXT="…final top-level…" \
THREAD_TEXT="…final thread reply…" \
"$SCRIPT" post

(Optional: CHANNEL=… to override the default joiner-feedback.)

Step 5 — Confirm to the user ​

Tell the user the message was posted and include the trace URL.

Notes ​

  • The dev-tools-api /upload and /post-message endpoints require a valid POE_API_KEY. If a call returns 401, your key may not yet be authorized for these endpoints — surface the error rather than retrying.
  • Any token in the complaint passes through to Slack as a literal — meta-feedback like "the placeholder broke" is safe.
  • Trace files are capped at 50 MB by the upload endpoint. If your session is larger, the upload will fail with a 413 — split or trim before retrying.