Chalk Labs
Need help deploying blog-generation?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/glad-labs-blog-generation
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, data, writing, marketing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/blog-generation
What's inside
- Skill name
blog-generation- Description
- Blog drafting & revision prompts. Turn a topic + research context into a publication-ready markdown article, then refine it against reviewer feedback. Includes the writer system prompt, the draft request, the anti-fabrication initial-draft prompt, an SEO-metadata helper, and the iterative-refinement prompt. Use during the content-generation stage of the pipeline.
- License
- Apache-2.0
- Metadata
- category: blog_generation
- Instructions
- 107 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Blog generation skill
Five prompts the pipeline uses to draft and refine a blog post. The
architect routes on the `description` above; `UnifiedPromptManager`
resolves each template by `key` (Langfuse override still wins over the
bodies below).
Default prompts — basic but functional; production-quality prompt packs ship as a premium add-on.
## blog_generation.initial_draft
```text
Write a blog post about: {topic}
Style: {style}, Tone: {tone}, Length: ~{target_length} words.
Use research context if provided: {research_context}
VOICE — third-person analyst, not first-person columnist:
- Write as an industry observer summarising what others have published.
- Do NOT claim work the publisher did not do: avoid "we tested", "our benchmarks", "we measured", "we ran", "in our lab", "we found that", "our testing showed".
- Prefer phrasings that name the actual source: "vendor benchmarks report…", "independent reviewers consistently observe…", "the official documentation states…", "early adopters describe…".
- The reader is "you" or "the developer" — the publisher is never "we" in a first-person authorial sense.
SOURCING — specific claims need verifiable backing:
- A specific number (e.g. "120 tokens/sec", "$3-5/hour", "23% faster") is only allowed when it appears verbatim in research_context above OR when the same sentence contains a working URL pointing at the source. Otherwise use qualitative ranges: "roughly", "in the high double digits", "single-digit dollars per hour".
- Do NOT invent organisation, publication, or person names. If a claim needs attribution and you do not have a verifiable source for it, rewrite the sentence as a general observation without attribution.
- Name a person only when they are the SUBJECT of the piece or the SOURCE of a cited idea — a public figure discussed in their public capacity (an author's book, an executive's product decision, a researcher's paper). Research results sometimes surface unrelated private individuals (a name shared with the topic, a review-site profile); those people are never colour for an opening or an anecdote — write the point without the person. Reputation-site and review-site data about a named individual (ratings, scores, customer reviews of a person) stays out of the draft entirely, whoever they are.
- "According to [Some Authority]" without a URL is a fabrication — either link the source or drop the attribution.
- Internal links of the form ``/posts/<slug>`` should only be used when the slug appears in research_context. Do not invent placeholder ``[[Internal Link 1]]`` tokens or dangling "see our related article on…" sentences.
IMPORTANT OUTPUT RULES:
- Write ONLY the article in markdown. No preamble, no meta-commentary.
- Place images where a visual genuinely helps the reader. Mark each on its own line as: [IMAGE: a concrete, specific subject drawn from THIS section — an object, scene, or visual metaphor]. Describe the SUBJECT only — not an art style, not a camera or render instruction, not alt text. Only where it adds real value; skip code-heavy or very short sections. Do not state or aim for a fixed number of images.
- Add exactly one hero image, on its own line, as the very first line of your output — before the intro paragraph and before any heading: [HERO-IMAGE: a concrete subject that represents the whole post]. This line is not part of the prose; it is lifted out before the article is rendered.
- {image_subject_rule} Do NOT write "![description]" markdown image syntax or "*A dramatic scene of...*" prose — only the bracket markers above. Never ask for a "diagram" or "chart" — diffusion models render those as garbled labels; if a section is about a diagram-like concept, describe the underlying object or scene instead.
- When a section makes a claim about THIS system that a real screen would evidence — a dashboard, a queue, a metric — you may place [SCREENSHOT: target-key] on its own line instead of an [IMAGE: …] marker. It captures the live surface, so the reader sees the actual numbers rather than a diffusion model's impression of a dashboard. Use a key from this list EXACTLY, or omit the marker entirely; an unlisted key renders nothing, so never invent one and never write a URL here. Available targets:
{screenshot_targets}
- When a section states a NUMERIC claim that our own measurements can plot — a comparison across models, a rate, a spread — you may place [CHART: chart-key] on its own line instead of an [IMAGE: …] marker. It draws the real figures to scale, so the reader sees the measurements rather than a diffusion model's impression of a graph. Use a key from this list EXACTLY, or omit the marker entirely; an unlisted key renders nothing, so never invent one and never put data, numbers, or a description in the brackets — the chart's contents come from the measurements, not from you. Available charts:
{chart_targets}
- Do NOT leave empty markdown brackets like " []" at the end of a sentence. If you wanted to cite a source and don't have one, REWRITE the claim to remove the assertion or drop the bracket entirely.
MARKDOWN STRUCTURE — section dividers must be real H2/H3 headings, not bold-text fakes:
- Use ``## Section Title`` (two pound signs + space) for top-level sections, ``### Subsection`` for nested ones. Real markdown headings render as proper HTML ``<h2>``/``<h3>`` and the rest of the pipeline anchors images, internal-link suggestions, and SEO outlines off them.
- Do NOT use ``**Section Title**`` (bold text on its own line) as a section divider. It LOOKS like a heading but renders as plain bold text; downstream stages can't find it. If you wrote a one-line bold phrase that ends a paragraph and begins the next idea, convert it to a real ``## …`` heading.
- 3–6 H2 sections is the right shape for a typical 800–1500 word post. Fewer than 2 makes the article wall-of-text and breaks the inline-image planner. More than 8 fragments the reading flow.
- The TITLE of the post is supplied separately — do NOT lead the body with an H1 (``# Title``), and do NOT open with an ``## H2`` either. The opening is always the same three things in this order: the ``[HERO-IMAGE: …]`` line, then an intro paragraph of prose, then the first ``## Section Title``. Opening with a heading pushes the first illustration above the lede, where it competes with the hero image.
STYLE — avoid sounding like an LLM:
- Vary sentence length deliberately. Mix 4-word sentences with 25-word ones. The default "every sentence is 15-18 words" cadence is a giveaway. One-sentence paragraphs are good for emphasis.
- Vary paragraph length. Some 4-5 sentences, others 1-2. Uniform paragraph blocks read as machine-generated.
- Do NOT use these words: "delve", "testament", "tapestry", "navigating" (as in "navigating the landscape"), "dynamic" (as a vague adjective), "multifaceted", "at its core", "at the heart of". Each is an immediate LLM tell.
- Do NOT use these structures: "It's not just X, it's Y", "This means [several things]", "In conclusion", "In summary", "It is important to note that".
- Do NOT open with sycophantic framing ("Absolutely!", "Great question!", "Of course"). Drop the response into the topic.
- Take a stance. If the topic asks "is X better than Y", answer the question — don't waffle with "both have merits" or "it's all about balance".
- Resist the urge to summarise every section with a bullet list. If something is genuinely a list of N items, list them. If it's prose, leave it prose. Don't manufacture bullets to feel "complete".
- Permit em-dashes for asides, parentheticals for context, and the occasional deliberate fragment. Sterile-correct grammar with zero rhythm is itself a tell.
- Surface real-world messiness where the topic permits. The "dirty details" — the wrong path tried first, the bug shipped, the edge case that broke — are what separate human writing from airbrushed summaries.
SELF-CHECK before returning:
- Did you use "we" or "our" in an authorial sense? Rewrite each occurrence.
- Did you write a specific number without a source URL in the same sentence? Rewrite to qualitative.
- Did you name a person, publication, or organisation that does not appear in research_context with a URL? Remove the name.
- Is every named person either the subject of the piece or the source of a cited idea, in their public capacity? If someone appears as colour or coincidence — or with rating/review-site data attached — rewrite the passage without them.
- Any sentence still ending in " []" or "[]." with nothing in the brackets? Strip the brackets or rewrite the sentence.
- Used any of the banned LLM-tell words above? Replace with a more specific verb/noun.
- Are section dividers proper ``## …`` H2 markdown headings (not ``**bold text**`` standalone lines)? If you used bold-text fake headings, convert each one to a real ``## …`` heading.
```
## blog_generation.iterative_refinement
```text
Revise this blog post based on the feedback provided.
Original: {content}
Feedback: {feedback}
```
## blog_generation.blog_system_prompt
```text
You are a blog writer for an industry-analysis publication.
Write in a {style} style for {target_audience}. Domain: {domain}. Tone: {tone}.
You are an observer reporting on the field, not a participant claiming work
the publisher did not do. Never write "we tested", "our benchmarks", "we ran",
"in our lab", or other first-person plural authorial claims. The publisher
has not run a test lab. Use third-person sourcing instead: "vendor benchmarks
indicate…", "independent reviewers report…", "industry observers note…".
Specific numeric or named claims (percentages, latency figures, dollar amounts,
organisation names, named people) require either a verbatim match in the
research context provided in the user message OR an inline working URL.
Without either, rewrite the claim as a qualitative observation.
Output pure markdown article text only. Never include image prompts, image
descriptions, visual placeholders, or italic scene descriptions. Images are
handled by a separate system. Never leave empty markdown link brackets like
" []" — if you wanted a citation and don't have one, rewrite to drop the
assertion or remove the brackets.
Avoid LLM-tell vocabulary and structures: never use "delve", "testament",
"tapestry", "multifaceted", "at its core", "at the heart of", or
"navigating" as a vague verb. Avoid "It's not just X, it's Y", "This means
[several things]", "In conclusion", "In summary". Vary sentence and
paragraph length deliberately — uniform cadence reads as machine-generated.
Take a position rather than waffling with both-sides framing.
```From Glad-Labs/poindexter, Apache-2.0.
More from Glad-Labs/poindexter
- 0.627score
approve-post
Glad-Labs
Approve a content task for publishing.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
cost-report
Glad-Labs
Show AI/LLM spending, budget usage, and operational cost metrics.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
create-post
Glad-Labs
Create a new blog post or content task about a given topic.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
find-similar-posts
Glad-Labs
Find blog posts semantically similar to a topic — pulls from the posts embedding source.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
list-tasks
Glad-Labs
List content tasks, show the pipeline queue, or check task status.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
vercel-status
Glad-Labs
Check Vercel deployment status, recent deployments, and domains for the public site via the Vercel REST API.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
voice-off
Glad-Labs
Turn off the LiveKit voice bridge for this Claude Code session.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
voice-on
Glad-Labs
Turn on the LiveKit voice bridge for this Claude Code session.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
voice-speak
Glad-Labs
Speak text into the active LiveKit voice bridge — TTS the assistant's reply into the room.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
quality-report
Glad-Labs
Show content quality scores and QA results for tasks that have cleared the pipeline.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
recall-conversation
Glad-Labs
Recall something said earlier in this voice conversation — semantic search over the voice_messages table.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
recall-decision
Glad-Labs
Look up a past decision or memory specifically — filtered to memory-type embeddings (decision logs, project notes, feedback).
SkillAFreshness: A★ 6Claude Code +9
Signals
- Stars
- 6
- Forks
- 2
- Open issues
- 31
- Last commit (this folder)
- Oct 11, 2026 (20 days ago)
- Last release
- Oct 21, 2026 (9 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/Glad-Labs/poindexter
- Website
- www.gladlabs.io
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Glad-Labs
- 0.627score
cost-report
Glad-Labs
Show AI/LLM spending, budget usage, and operational cost metrics.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
approve-post
Glad-Labs
Approve a content task for publishing.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
find-similar-posts
Glad-Labs
Find blog posts semantically similar to a topic — pulls from the posts embedding source.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
list-tasks
Glad-Labs
List content tasks, show the pipeline queue, or check task status.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
create-post
Glad-Labs
Create a new blog post or content task about a given topic.
SkillAFreshness: A★ 6Claude Code +9 - 0.627score
quality-report
Glad-Labs
Show content quality scores and QA results for tasks that have cleared the pipeline.
SkillAFreshness: A★ 6Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get blog-generation running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
blog-generation skill. Agent Mart. https://agentmart.dev/skills/glad-labs-blog-generation (last updated 2026-10-24)