Switches every call site to `node scripts/newsletter` and, in the same pass, fixes three structural problems in the skill layer. The seven subcommands were spelled out in five files; they are now enumerated once in docs/newsletter/engine-commands.md, and every other mention is a link except where a skill inlines the one or two commands it actually invokes. The shared post mechanics move out of mt-add-url's directory into docs/newsletter/, so no skill owns another skill's documentation and both runtimes reach it by a repository-relative path. The Codex adapters become symlinks to their canonical counterparts, which removes the parallel frontmatter that could drift. Two skills are renamed for a uniform mt-<verb>-<object> scheme: mt-add-post becomes mt-add-article, since it adds an article to a post, and mt-webfetch becomes mt-fetch-url. The other four already conformed. Note that $mt-add-post and mt-webfetch no longer resolve; no alias directories are left behind, because two names for one skill is the duplication this change removes. Trigger wording in the frontmatter descriptions is left alone apart from the renamed tokens and the corrected fetch-tier summary: those strings are how the runtimes decide whether to invoke a skill. Setup documentation now states the npm ci prerequisite. The engine has dependencies, so unlike its predecessor it does not run on a bare clone.
3.1 KiB
name, description
| name | description |
|---|---|
| mt-add-article | Article handler for the Hugo blog newsletter. Adds a single article/blog URL to the target newsletter post as a main-content entry with the original source title and a Vietnamese summary. Normally invoked by the mt-add-url meta skill after classification, but can be used directly for a known article URL. |
Overview
mt-add-article is the article handler: given a clean article/blog URL, it extracts the source title and content, writes a Vietnamese summary, and inserts it into the target newsletter post's main content (today's post unless the user pinned another one). It does not classify or route URLs — that is mt-add-url's job. For YouTube/images/other types, use mt-add-url.
Shared scripts: scripts/newsletter/. Shared procedure: docs/newsletter/post-mechanics.md (resolve/create the target post, newsletter numbering, section insertion, language rules) — follow it for all post mechanics.
Input
A clean article URL (passed by mt-add-url, or given directly). If a raw URL is provided directly, you may run the classifier to clean/dedup it first:
node scripts/newsletter add-url "<url>"
Trust route: article; skip if duplicate or not accessible.
Workflow
- Post mechanics — follow
docs/newsletter/post-mechanics.mdto resolve/create the target post and (if new) get the newsletter number + apply the template. - Extract the original article title and main content. Try
WebFetchfirst; if the host blocks it (403, Cloudflare challenge, empty body), work through themt-fetch-urlfallback chain before giving up. Aaccessible: falsefrom the router is not by itself a reason to skip — many public tech blogs block plain fetches but serve the fallback fetchers fine. Preserve the source title exactly enough to remain recognizable: do not translate/localize it; keep source-language wording, capitalization, punctuation, and proper nouns from metadata (og:title, page title, or fetcher frontmatter). - Summarize in Vietnamese — 1-2 paragraphs, max 300 words, professional tone for junior developers. Summary paragraphs only; do not add a key-points bullet list.
- Write the main-content block and insert it before the
### Bonussection (or append at end of file if there is no Bonus yet — do not create an empty Bonus):
## [Original article title](clean_url)
[Tóm tắt tiếng Việt — tối đa 300 từ]
- Report:
✅ Article added to Newsletter #[number]
📄 content/post/YYYY/MM/DD/index.md
🔗 [clean_url]
📊 [tally]
The tally comes from post-stats — see Post tally in the shared post mechanics.
Checklist
- Valid Hugo front matter (if post was created) with correct date
- Title
"Newsletter #[number]"(if created) - Tags include
"AI-Assisted" - URL is clean (no tracking params)
- Heading uses the original source article title, not a Vietnamese translation
- Summary paragraphs only, no key-points bullet list
- Vietnamese content ≥99%, grammar correct
- Article inserted before the Bonus section