# Blog

> Publish long-form markdown content to GreenGale (ATProtocol-native blogging). Use when asked to publish a blog post, write an article, or post long-form content.

- Skill: `letta-ai/blog` (Agent Skill)
- Install (CLI): `npx skillmds@latest add letta-ai/blog`
- Raw SKILL.md: https://api.skillmd.com/api/skills/letta-ai/blog/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- License: MIT
- Author: letta-ai (https://skillmd.com/u/letta-ai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/letta-ai/blog

---


# Blog Publishing Skill

Publish markdown posts to GreenGale via ATProtocol (`app.greengale.document`).

## When to Use

- User wants to publish a blog post
- Long-form content needs to go to GreenGale
- Creating documentation or articles

## Commands

```bash
# From file (recommended)
node dist/cli.js blog --file path/to/post.md

# With overrides
node dist/cli.js blog --file post.md --title "Custom Title" --slug "custom-slug"

# Inline content
node dist/cli.js blog --title "Quick Note" --content "Markdown here"
```

## Options

| Option | Description |
|--------|-------------|
| `--file` | Path to markdown file |
| `--title` | Post title (or from frontmatter) |
| `--slug` | URL slug (defaults to filename) |
| `--subtitle` | Optional subtitle |

## Frontmatter Support

Posts can include YAML frontmatter:

```markdown
---
title: My Post Title
slug: my-post-slug
---
# Content starts here

Your markdown content...
```

Frontmatter is automatically stripped before publishing.

## Output

Returns on success:
- `Published: https://greengale.app/{handle}/{slug}`
- `URI: at://did:plc:.../app.greengale.document/{slug}`
- `CID: bafyrei...`

## Requirements

Set in `.env`:
- `ATPROTO_HANDLE` — Your ATProto handle
- `ATPROTO_APP_PASSWORD` — App password
- `ATPROTO_PDS` — Your PDS URL (optional, defaults to bsky.social)

## Notes

- GreenGale indexes from the firehose — no separate publish step needed
- Posts use `github-dark` theme by default
- Records are written directly to your PDS via XRPC

