naver-post
Skill3 starsChanged 34 days agoMITView on GitHub
Write and publish a Naver Blog post from a keyword set. Grammar, media refs, person-picked form and category, preview, extension check. 네이버 블로그 발행.
In this repository50 other files it gives its agents.
- automationsSkill
- commentsSkill
- hooksSkill
- ig-auditSkill
- ig-captionSkill
- ig-carouselSkill
- ig-dmSkill
- ig-humanSkill
- ig-profileSkill
- ig-reelSkill
- ig-storySkill
- ig-viralSkill
- inboxSkill
- linkedin-comment-drafterSkill
- linkedin-content-plannerSkill
- linkedin-employee-advocacySkill
- linkedin-engager-analyticsSkill
- linkedin-hook-extractorSkill
- linkedin-humanizerSkill
- linkedin-interviewerSkill
- linkedin-post-writerSkill
- linkedin-profile-optimizerSkill
- linkedin-reply-handlerSkill
- linkedin-repurposerSkill
- linkedin-thread-monitorSkill
- naver-ai-citeSkill
- naver-draftsSkill
- naver-engageSkill
- naver-keywordsSkill
- performance-reviewSkill
- publishSkill
- repurposeSkill
- schedule-weekSkill
- setupSkill
- threadsSkill
- troubleshootSkill
- voice-profileSkill
- yt-auditSkill
- yt-benchmarkSkill
- yt-chaptersSkill
- yt-commentSkill
- yt-editSkill
- yt-packageSkill
- yt-planSkill
- yt-retentionSkill
- yt-scriptSkill
- yt-seoSkill
- yt-shortsSkill
- yt-uploadSkill
- yt-viralSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Write a Naver Blog post, usually from a keyword set, and publish it through the Uplika extension in the person's own Chrome.
- Very specific: line 10
Use it for any Naver Blog post.
- Very specific: line 14
Voice: Read ~/.uplika/<workspace-slug>/voice.md if it exists.
- Distinctive: line 16
Post type: Ask this before anything about the content, because it changes the title and the structure:
- Very specific: line 17
Search post (검색형): written to be found for a keyword.
- Very specific: line 34
Keywords: Put the set's main keyword and subs in options.naver_blog.seoKeywords, so the post keeps a record of what it targets.
- Very specific: line 39
Category: Read the blog's categories from list_accounts (naverBlog.categories) and let the person pick one.
- Very specific: line 41
Preview: Call naver_layout with the same content, media ids and the chosen form, and show the person the result.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Naver post
Write a Naver Blog post, usually from a keyword set, and publish it through the Uplika extension in the person's own Chrome. The person picks the post type, the form and the category; you write, place the photos, preview, and publish after they approve.
Use it for any Naver Blog post. For a post meant to be cited in Naver's AI Briefing, run naver-ai-cite first and come back here to publish. To publish a draft already sitting in Naver's draft box, use naver-drafts.
Before writing
- Voice. Read
~/.uplika/<workspace-slug>/voice.mdif it exists. If not, ask three questions (tone, ending style such as 해요체 or 합니다체, words to avoid) and offer to save the answers with thevoice-profileskill. - Account. Call
select_channelswith scope["naver_blog"]. It returns theaccountIdsto publish to and abridgeobject with the extension's state. If it answersworkspace_required, show the workspaces it lists, ask which one, and passworkspaceIdon this and every later call. If no Naver Blog is connected, send the person to https://uplika.com/dashboard/connections. - Post type. Ask this before anything about the content, because it changes the title and the structure:
- Search post (검색형): written to be found for a keyword. It needs a keyword set: get one with the
naver-keywordsskill, or pick a saved one fromlist_naver_keyword_reports. - Home feed post (홈피드형): written to be opened by people who see it in Naver's home feed or their neighbors' feed rather than search for it, so the title and the first photo have to make them open it. A keyword set is optional.
- Search post (검색형): written to be found for a keyword. It needs a keyword set: get one with the
- Brief. For a search post, use the set's
draftPromptas the brief, unchanged. It already carries the keyword placement, the number of sections and the length, so do not restate those numbers in your own words. The voice file decides tone and endings; the brief decides where the keywords go. If the saved set has onlyprompt, use it for the skeleton, or get a fresh set fromnaver-keywords. - The gap. If you can browse, open Naver's blog search results for the main keyword and skim the top posts; otherwise ask the person to paste a few top titles or links. Name one thing those posts leave out and give it one subheading of its own.
Writing
- Grammar. Before the first Naver body in a session, call
describe_grammarwithplatform: "naver_blog"for the overview, and again with atopic(media,blocks,highlight,limitsand so on) when you need more. What it returns is whatpublishaccepts, including the mistakes that fail silently. Length and media limits come fromdescribe_grammar(topiclimits) andlist_platforms; never write them from memory. - Clean the draft. The brief's output format has parts that do not belong in the body as they are:
- The
#title line: move it tooptions.naver_blog.title. The title is not part of the body. - Notes after subheadings such as
(서브: 키워드): delete them. - The tag line at the end: move the tags to
options.naver_blog.tags(no#, no spaces). - Each photo spot
[사진: 무엇을 찍은 사진인지]and the caption line under it: handled in the next step.
- The
- Photos. Never publish a
[사진: …]line. For each spot, get the person's real photo, or remove the spot and its caption line. Do not invent photos they did not take. Show the person the list of spots so they know what to shoot or capture.- With a terminal (Claude Code, Codex, OpenClaw, Hermes):
media_presignwith the file name, type and size, PUT the bytes to the returneduploadUrlwith curl, thenmedia_complete. - Without one (claude.ai, ChatGPT):
media_from_urlfor a file at a public https address, ormedia_upload_linkfor files on the person's device, then pollmedia_upload_statusuntil it is ready. Ready photos come back as images you can look at, so you can match each one to its paragraph. - Place a photo on a line of its own as
: the alt text becomes the photo's caption, so the brief's caption line goes there. A video is@video(media:ID)and photos side by side are@group(media:A, media:B). Add{.ai}at the end of a photo or group line when the image was made or substantially changed with AI (or passaiGeneratedwhen uploading). Media referenced in the body does not need to be repeated inmediaIds; media passed inmediaIdsbut never referenced goes at the end of the post.
- With a terminal (Claude Code, Codex, OpenClaw, Hermes):
- Keywords. Put the set's main keyword and subs in
options.naver_blog.seoKeywords, so the post keeps a record of what it targets. - Other settings. Font, size, alignment and photo size are in the Naver options schema that
list_platformsreturns. Set them only when the person asks.
Category, form, preview
- Category. Read the blog's categories from
list_accounts(naverBlog.categories) and let the person pick one. Pass it asoptions.naver_blog.categoryId, or by name asoptions.naver_blog.category. There is no default. If a category they just created is missing, callrefresh_accountfor that account and read again. - Form. A Naver post goes out in a form (a house layout) unless it is kept exactly as written. If the person dictated the structure or wants the body exactly as written, set
options.naver_blog.layouttoas-is. Otherwise callnaver_layoutwith the body, the media ids andforms: "all": it lays the post out in every form side by side, each with its name, when to use it and a summary. Show them, let the person pick, and pass the id asoptions.naver_blog.form. Never pick for them. A form changes the layout, never the text. - Preview. Call
naver_layoutwith the same content, media ids and the chosen form, and show the person the result. - Extension. Call
bridge_status. The extension in the person's Chrome writes the post, so nothing goes out while that Chrome is closed. Ifstateis notonline, relayuserMessageword for word and say the post will wait in the queue until that Chrome is open and logged in to Naver. With a terminal on the same computer, show thewakecommand for their system and run it only if they say yes; without one, ask them to open Chrome.
Confirm and publish
- Confirm. Show the person the title, the body as it will go out, the photos, the category, the form (or
as-is), the tags, who can see it (options.naver_blog.openType, public unless they say otherwise) and the time (now, orscheduledAtwith its time zone). Publish only after they approve. - Publish. Send Naver Blog in a
publishcall of its own, not mixed with other channels: media references would reach other channels as literal text, so the server refuses the mix. PassaccountIds,content,mediaIdsif any,options.naver_blog,workspaceIdwhen the person has more than one workspace, andwait: true.
- Later: pass
scheduledAton the post (ISO 8601 with an offset; ask which time zone they mean). Chrome has to be on at that time (faq:naver-schedule-chrome). - For the person to finish by hand in Naver: set
options.naver_blog.draftOnly. Thenaver-draftsskill publishes it later.
- Report. If the response carries
bridge, the post is queued: relaybridge.userMessageand do not say it was published. Otherwise callget_postwith the returned id for the status and the permalink. A wait that runs out is not a failure (faq:publish-still-publishing): check withget_postinstead of publishing again.
When something fails
naver_form_required: the response listsforms(id, name, when). Show them, let the person pick, and publish again withoptions.naver_blog.form.naver_category_requiredornaver_category_unknown: show the categories fromlist_accountsand let the person pick.naver_media_kind_mismatch: a video id sits on a photo line or the other way round; the error names the line and the line to write.naver_rate_limited: Naver capped how much this ID publishes. Do not call again beforeretryAfterSeconds; the draft is already in Naver.extension_outdated: the response carries the installed and required versions, and Uplika asks that Chrome to update at the same moment. Relay it withfaq:extension-not-updatingand try again after the person says it updated.- Queued because the extension is offline:
faq:naver-extension-offline. research_tool_disabledfromlist_naver_keyword_reports: only a research tool still in beta answers this. Ask the person once to turn it on at the link in the error, and do not retry until they say it is on.account_disconnected: hand over to thetroubleshootskill.- Anything else: call
get_helpwith the error code and pass its answer and link on.
Tools
select_channels: the Naver Blog account to publish to, plus the extension statelist_naver_keyword_reports: a saved keyword set and itsdraftPromptdescribe_grammar: Naver body syntax, media lines and limitslist_platforms: Naver limits and the options schemamedia_presign: upload slot when you can PUT bytes yourselfmedia_complete: confirm an upload from media_presignmedia_from_url: attach a photo or video from a public https addressmedia_upload_link: let the person upload from their devicemedia_upload_status: wait for that upload and see the photoslist_accounts: the blog's categoriesrefresh_account: re-read categories the person just creatednaver_layout: forms side by side, and the preview of the chosen onebridge_status: whether the extension in the person's Chrome is onlinepublish: send or schedule the post (needs approval first)get_post: final status and permalinkget_help: the answer for an error code
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

