Skip to content
Back to skills

Write An Article

ASecurity

Turn a resolved ticket into a help-center article, draft a known-issue status page when something breaks, send personalized 'you asked, we shipped' notes to the customers who requested a feature, or flag stale articles that need a refresh after a product change. Pick the flavor and get a publish-ready draft grounded in real conversations and your voice.

  • 117 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 19, 2026
businessgogit

Security analysis

A100/100

Scanned September 19, 2026

npx -y skills add gethouston/houston --skill write-an-article --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Write An Article?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Write An Article
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gethouston-write-an-article/badge)](https://www.skillsdirectory.com/skills/gethouston-write-an-article)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: write-an-article
description: "Turn a resolved ticket into a help-center article, draft a known-issue status page when something breaks, send personalized 'you asked, we shipped' notes to the customers who requested a feature, or flag stale articles that need a refresh after a product change. Pick the flavor and get a publish-ready draft grounded in real conversations and your voice."
version: 1
category: Support
featured: no
image: headphone
integrations: [googledocs, notion, github, linear]
x_houston:
  created_by: houston
  skill_schema: 1
---


# Write an Article

One skill, every help-center writing ask. Branch on `type`.

## When to use

- **from-ticket**  -  "turn this ticket into article" / "document this
  resolution" / "answered same question 3x  -  write up." Called
  implicitly from `flag-a-signal signal=repeat-question` when cluster
  hits ≥3, no matching article.
- **known-issue**  -  "draft known-issue doc for {bug}" / "P1, put up
  status page" / chained from `draft-a-playbook`.
- **broadcast-shipped**  -  "shipped X  -  tell customers who asked" /
  "send 'you asked, we shipped' note."
- **refresh-stale**  -  "refresh articles affected by this ship" /
  "audit docs  -  pricing changed" / monthly help-center routine.

## Connections I need

I run external work through Composio. Before this skill runs I check that the categories below are linked. Missing → I name the category, ask you to connect it from the Integrations tab, stop.

- **Knowledge base** (Notion / Google Docs / Help Scout / Intercom)  -  mirror the draft to your published KB. Required for `from-ticket` and `refresh-stale` if you want me to push the draft there.
- **Dev tracker** (GitHub / Linear)  -  pull bug context for the `known-issue` doc. Required for `known-issue`.
- **Inbox** (Gmail)  -  source the resolved thread when it's not already in `conversations.json`. Optional.

If you ask for a known-issue page and your tracker isn't connected I stop and ask you to connect it.

## Information I need

I read your support context first. For every required field that's missing I ask ONE plain-language question (best modality: connected app > file drop > URL > paste) and wait.

- **Help-center platform**  -  Required. Why I need it: format and tone vary by destination. If missing I ask: "Where do your help articles live today  -  Notion, Intercom, a docs site, or nowhere yet?"
- **Voice samples**  -  Required. Why I need it: KB articles in the wrong voice get rewritten. If missing I ask: "Want me to mine your sent folder for tone, or can you drop 3 to 5 of your recent customer emails?"
- **KB tone profile**  -  Optional. Why I need it: some teams want KB more formal than chat replies. If you don't have it I keep going with TBD and match your reply voice.
- **What shipped**  -  Required for `broadcast-shipped`. Why I need it: I won't broadcast a vague "we shipped stuff." If missing I ask: "What did you ship  -  give me a title and one sentence on what's new?"
- **What changed**  -  Required for `refresh-stale`. Why I need it: I scan articles for refs to the changed thing. If missing I ask: "What changed  -  pricing, a feature name, a UI flow, something else?"

## Parameter: `type`

- `from-ticket`  -  article grounded in resolved conversation. Pull
  thread, extract reusable answer, write to `articles/{slug}.md`.
  Mirror to connected KB platform if linked.
- `known-issue`  -  customer-facing status entry. Write to
  `known-issues/{slug}.md` + append to `known-issues.json` with
  `{id, title, affectedProduct, currentStatus, postedAt, updatedAt}`.
- `broadcast-shipped`  -  personalized "you asked, we shipped"
  drafts, one per customer in `requests.json` who asked for thing
  just shipped. Write to `broadcasts/{YYYY-MM-DD}-{slug}.md`.
- `refresh-stale`  -  scan `articles/` for refs now wrong (pricing,
  UI, feature name), flag `needsReview: true` in `outputs.json`,
  draft update.

## Steps
<!-- houston-workflow:v1 -->

1. **Read `context/support-context.md`.** Missing? Stop.
2. **Read ledger.** Fill gaps.
3. **Branch on `type`:**
   - `from-ticket`: ask which `{conversation id}` to source, or
     pick auto from cluster surfaced by `flag-a-signal
     signal=repeat-question`. Read
     `conversations/{id}/thread.json`. Extract question, answer,
     screenshots, code refs. Draft in tone from
     `domains.help-center.toneProfile`.
   - `known-issue`: ask bug id + title if not given. Read
     `bug-candidates.json` for details. Draft status doc: what's
     broken, who affected, workaround, current status, ETA (only
     if pre-approved). Append to `known-issues.json`.
   - `broadcast-shipped`: ask what shipped (title + 1-sentence
     blurb). Read `requests.json`, filter to customers who asked
     for exactly this. Draft short personal note per customer,
     ref specific ask. Never bulk-send  -  one file per customer in
     `broadcasts/`.
   - `refresh-stale`: ask what changed (pricing / UI / feature
     name). Scan every `articles/{slug}.md` via grep for refs to
     changed element. Each hit: write proposed rewrite diff, don't
     overwrite. Mark `needsReview: true` in `outputs.json`.
4. **Write artifact** atomically.
5. **Append to `outputs.json`** with `type` =
   `kb-article` | `known-issue` | `broadcast` | `article-refresh`,
   `domain: "help-center"`, title, summary, path, status `draft`.
6. **Summarize**: headline + what to review + where to publish.

## Outputs

- `articles/{slug}.md` (for `type = from-ticket`, `refresh-stale`)
- `known-issues/{slug}.md` + `known-issues.json` entry (for
  `type = known-issue`)
- `broadcasts/{YYYY-MM-DD}-{slug}.md` (for `type = broadcast-shipped`)
- Append to `outputs.json` with `domain: "help-center"`.

## What I never do

- Publish direct to connected KB. I draft; you publish.
- Invent ETA for `known-issue`  -  engineering not committed? Write
  "investigating."
- Generic template for `broadcast-shipped`  -  every note cite
  specific request.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…