| name | velog-cli |
| description | Use when the user wants to manage velog.io blog posts from the terminal. Activates when the user mentions velog, wants to publish a blog post, list their velog posts, create or edit articles, manage drafts, or check trending posts on velog.io. Also use when the user writes markdown content and wants to publish it as a blog post, or when they ask about their velog account status. Even if they just say "post this to my blog" or "publish this", consider activating if velog-cli is installed.
|
velog-cli Skill
velog is a CLI client for velog.io, a developer blogging platform.
It lets you manage blog posts entirely from the terminal — create from markdown files,
edit, publish drafts, browse trending posts, and more.
Prerequisites
The velog binary must be installed:
brew tap hamsurang/velog-cli && brew install velog-cli
cargo install velog-cli
If velog is not found, tell the user to install it first.
Authentication
Most write operations require authentication. Check status before attempting mutations.
velog auth status
velog auth login
velog auth logout
How to get tokens: The user opens velog.io in their browser, opens DevTools (F12) →
Application → Cookies, and copies access_token and refresh_token. The CLI prompts
for these during velog auth login.
Credentials are stored at ~/.config/velog-cli/credentials.json and auto-refresh when expired.
Post Management
List Posts
velog post list
velog post list --drafts
velog post list --trending
velog post list --trending --period week
velog post list --recent
velog post list -u <username>
velog post list --limit 50
velog post list --recent --cursor <cursor>
velog post list --trending --offset 20
Show a Post
velog post show <slug>
velog post show <slug> -u <username>
The slug is the URL path segment (e.g., my-first-post from velog.io/@user/my-first-post).
Create a Post
velog post create -t "Post Title" -f article.md
echo "# Hello World" | velog post create -t "Hello"
velog post create -t "Title" -f article.md --publish
velog post create -t "Title" -f article.md --tags "rust,cli,velog" --slug my-custom-slug
velog post create -t "Title" -f article.md --publish --private
Edit a Post
velog post edit <slug> -f updated.md
velog post edit <slug> -t "New Title"
velog post edit <slug> --tags "new,tags"
velog post edit <slug> -t "New Title" -f updated.md --tags "new,tags"
Publish a Draft
velog post publish <slug>
Delete a Post
velog post delete <slug>
velog post delete <slug> -y
Output Formats
All commands accept --format to control output style:
| Format | Use case | Description |
|---|
pretty | Human reading (default) | Tables, colors, markdown rendering |
compact | AI agents, scripts | Minified JSON on a single line |
silent | CI/CD, exit-code-only checks | Queries emit JSON, mutations emit nothing |
When Claude is running velog commands programmatically, use --format compact to get
structured JSON output that's easy to parse:
velog post list --format compact
velog post show my-post --format compact
Common Workflows
Write and publish a blog post
- Write markdown content to a file
- Create as draft:
velog post create -t "Title" -f article.md --tags "tag1,tag2"
- Preview on velog.io if needed
- Publish:
velog post publish <slug>
Update an existing post
- Find the slug:
velog post list --format compact
- Edit:
velog post edit <slug> -f updated.md
Browse trending posts for inspiration
velog post list --trending --period week --limit 10
Shell Completions
velog completions zsh
Error Handling
- Not authenticated: Run
velog auth status first. If not logged in, guide
the user through velog auth login.
- Post not found: Verify the slug with
velog post list --format compact.
- Binary not found: Tell the user to install via
brew or cargo.
Tips for AI Agent Usage
- Always use
--format compact when you need to parse the output programmatically.
- Check auth status before attempting create/edit/delete/publish operations.
- When creating posts from user-written content, save to a temp file first, then
pass via
-f. This avoids shell escaping issues with stdin piping.
- Default behavior is to save as draft — use
--publish only when the user
explicitly asks to publish immediately.
- Use
--format silent for mutations when you only care about success/failure
(check exit code).