ワンクリックで
articles-repo-maintenance
Maintain Peter's articles repo with the correct date-folder layout, bilingual article pairing, and MOC updates.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Maintain Peter's articles repo with the correct date-folder layout, bilingual article pairing, and MOC updates.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Use when drafting, editing, humanizing, de-AI-ing, polishing, voice-matching, or preparing user-facing prose across docs, articles, emails, posts, memos, and publication text.
Maintain this articles repository. Use when adding, updating, publishing, indexing, verifying, committing, or pushing articles; when converting source URLs such as WeChat, X/Twitter, Substack, Google/OpenAI/model launch pages, docs, benchmark pages, or product pages into bilingual Markdown articles; and when preserving article images/media, updating README.md/MOC.md, checking bilingual pairs, or returning public GitHub links.
| name | articles-repo-maintenance |
| description | Maintain Peter's articles repo with the correct date-folder layout, bilingual article pairing, and MOC updates. |
| version | 1.0.0 |
| author | Hermes Agent |
| license | MIT |
| metadata | {"hermes":{"tags":["articles","markdown","bilingual","repo-maintenance","moc","indexing"]}} |
Use this skill when working in Peter's articles repository at /Users/peter/Desktop/code/articles/ (Quriosity-agent/articles).
/Users/peter/Desktop/code/articles/articles/ content subdirectory such as /Users/peter/Desktop/code/articles/articles/.2026-04-30/2026-04-30-some-article.md2026-04-30/2026-04-30-some-article-en.mdMOC.md must be updated when adding or moving articles.README.md is the chronological index; MOC.md is the topic map.README.md, MOC.md, and recent date folders for the source URL, project name, or topic keywords. If prior coverage exists, do not silently duplicate the same article. Write a distinct follow-up angle (for example: feature reference vs patterns guide, implementation deep dive vs operating playbook) and link/position it accordingly.YYYY-MM-DD/YYYY-MM-DD-slug.mdYYYY-MM-DD/YYYY-MM-DD-slug-en.mdYYYY-MM-DD/imgs/<slug>/) and embed them in both Chinese and English articles using relative Markdown image links. Do not omit source images unless Peter explicitly asks for text-only.
/_next/image?url=<encoded-source>&w=... or https://www.anthropic.com/_next/image?url=..., decode the url query parameter and download the original CDN asset, not the resized proxy URL. Verify every relative image link exists before committing.filecdn... URLs and extensionless CDN paths. Download all meaningful body media, run file <asset> after download, and rename extensionless assets to the detected type (.jpg, .png, .gif, etc.) before embedding so GitHub/Markdown renderers handle them reliably.urllib times out or stalls while downloading CDN-hosted assets, retry with curl -L --retry 3 --connect-timeout 20 --max-time 180 -A 'Mozilla/5.0' -o <file> <url> rather than dropping the asset. Verify the downloaded file type with file and confirm Markdown references point to existing local files.baoyu-url-to-markdown captures content but misses metadata (for example Anthropic research pages may show the publish date in rendered HTML while not exposing article:published_time), inspect the raw HTML or rendered page snippets for the date and use that date folder.MOC.md.articles/ directory.git diff -- README.md MOC.md and the first relevant README section. README table rows must be normal Markdown rows (| ... | ... |), not accidentally doubled (|| ... |) or inserted into the repo description/header. If editing indexes programmatically, scope insertion to the target date section and verify the exact separator line by scanning for a line containing ------ inside that date section, rather than assuming one exact marker string. After insertion, run a quick grep/diff check for the new rows and fix any leading || before commit. When using read_file, remember its line-number gutter ends with |; a displayed || ... can simply mean the content line starts with a valid Markdown |, so confirm suspicious doubled pipes with git diff, sed, or repr() before rewriting.git status contains unrelated untracked/modified files from other concurrent article work, do not sweep them into this article's commit. Stage only the files for the current article plus the intended README.md/MOC.md index changes and assets. After push, mention any unrelated remaining dirty state briefly so Peter understands it was intentionally excluded.git pull --rebase origin main before pushing but the current article has unstaged changes, use a scoped stash for only this article's files (for example git stash push -u -m '<article-slug>' -- README.md MOC.md YYYY-MM-DD/), then git pull --rebase origin main, git stash pop, resolve if needed, and continue with selective staging. Do not use a broad stash that might hide unrelated user work.urllib.request.urlopen or curl -I) before sending links to Peter.When the source is an official documentation page rather than a GitHub repo or social post, keep the article analytical and operational instead of mirroring the docs. If there is already an article on a related doc page, explicitly choose a non-overlapping angle, such as:
delegate_task parameters, lifecycle, constraints);parallel research, code review, compare alternatives, gather-then-analyze);Use the official doc URL in the metadata block and verify the article does not merely restate the prior article's outline.
If files are misplaced under a nested articles/ directory or sitting in the repo root instead of a date folder:
YYYY-MM-DD from each filename.MOC.md links from old forms such as:
[[articles/YYYY-MM-DD/YYYY-MM-DD-slug|...]][[articles/YYYY-MM-DD-slug|...]]
to[[YYYY-MM-DD/YYYY-MM-DD-slug|...]]articles/ directory.When the user asks whether tmp, _tmp, Python scripts, or other non-article files are needed in the articles repo, inspect before deleting:
git status --short
git ls-files -s | grep -E '(^160000 .*tmp|[[:space:]]tmp/|/_tmp/|\.py$)' || true
git config --file .gitmodules --get-regexp '.*' || true
tmp/ or _tmp/ entries, treat empty 160000 gitlinks with no .gitmodules mapping as stale unless a Markdown file or index directly references them. Remove with git rm -r <path>, remove the now-empty parent directory, add tmp/ and _tmp/ to .gitignore, then commit/push.os.path.dirname(os.path.abspath(__file__)) and run the script to verify outputs still regenerate.git status --short is clean after commit/push and re-scan for remaining tracked tmp/, _tmp/, or unintended root scripts.Use a quick scan to ensure every base article has both languages:
base.mdbase-en.mdA valid pair means both exist for the same base path.
When Peter asks to "cronjob" or otherwise schedule an article writeup from a URL, create a one-shot job rather than writing it inline. Use deliver="origin" so the completed job posts back to the same Discord thread. Include this skill in the job, enable at least web, browser, terminal, file, and skills; add vision for X/Twitter or visual/media-heavy sources. Schedule it for about one minute in the future using a tool-derived current time, and prompt the child agent to follow this repo's bilingual layout, image preservation, README/MOC updates, selective staging, commit/push, and GitHub link verification. Reply immediately with the cron job_id, source URL, and that the job will return links when complete.
When Peter wants multiple article jobs to run now and concurrently, prefer independent background Hermes processes over cron jobs or delegate_task. Use terminal(background=true, notify_on_complete=true) with one hermes chat -q <prompt> --source <article-job-tag> per article so each job survives Discord turn interrupts and can be polled by process session id. Do not wrap the command with shell backgrounding such as nohup, &, disown, or setsid; let the terminal tool manage lifecycle. For concurrent jobs in the same articles repo, instruct each child to use selective staging and git pull --rebase before push; for maximum safety, use a separate git worktree or temp clone per article and merge/index updates afterward. Avoid delegate_task for full article write/commit/push workflows because delegated children are synchronous to the parent turn and are not durable background workers.
After writing, verifying, committing, and pushing an article task, send a concise final reply that includes:
README.md/MOC.md and local assets were updated if applicable.MOC.md for old broken articles/... paths.README.md uses literal .md links while MOC.md uses Obsidian wikilinks without .md; verify MOC by searching for the slug/base path (e.g. YYYY-MM-DD/slug and YYYY-MM-DD/slug-en), not only slug.md.-en.md or missing Chinese counterpart.git status before commit.### headings in each language), and include a short caveat when some companies are stealth or only partially public.document.querySelectorAll('img') or the X-to-Markdown media workflow), save meaningful media locally, and verify every image referenced in Markdown exists and is pushed.CLAUDE.md/AGENTS.md, experiment folders, figures, and infra docs; these often reveal the operational workflow and agent affordances better than the landing page alone. Preserve meaningful project visuals by combining rendered page screenshots, app/demo screenshots, X media thumbnails, and repo experiment figures when they substantively support the article.t.co link, use the X title/snapshot text as social context, search the exact announcement/topic to find the canonical official page, then ground the article in that page plus linked docs/release notes. Record both the X URL and canonical official URL(s) in the article metadata./i/article/<id> behind a login wall, use references/x-article-canonical-blog-cards.md: preserve the original X status URL as source, record the discovered x_article id if visible after clicking, search exact card/title text to find the canonical public blog/article, and ground the writeup in that canonical page. Use DOM extraction such as document.querySelector('article').innerText on the canonical page when web extraction truncates. If browser_get_images only finds avatars/profile images and no meaningful body figures, proceed text-only rather than creating empty assets.references/x-article-substack-roadmap.md: extract the full article text and meta via browser DOM, decode Substack image/fetch/.../<encoded-original-url> URLs to original substack-post-media assets, download meaningful figures locally, optionally create a temporary contact sheet for triage, and remove that contact sheet before commit unless deliberately embedded. If the repo already has a broad article on the same concept, choose a distinct operational angle rather than duplicating the previous thesis.document.querySelectorAll('article').map(a => a.innerText) often exposes the complete post text even behind login/signup overlays. Use DOM article text as the quote source; use browser_vision mainly for screenshot evidence. If the post contains visible t.co outbound links, resolve them with browser_navigate one at a time and inspect the canonical pages before writing; browser navigation is more reliable than batch URL fetches for redirect-heavy t.co links.references/x-article-longform-media.md: extract full article.innerText, download pbs.twimg.com/media assets as name=orig, preserve original frames locally, create readable WebP contact sheets for embedding, and avoid copying ad-like personal contact snippets from the social post into the article.browser_vision to capture a screenshot of the visible post as an article asset, and describe the thumbnail/frame in the article only as context. Prefer pairing that with screenshots from the canonical page/scorecard/docs when those pages contain the authoritative data.yt-dlp can extract the media, use references/x-video-product-launches.md: download the video/thumbnail, extract representative frames or contact sheets, remove bulky .mp4 files before commit unless explicitly needed, and ground the article in the canonical product/project/dataset/docs pages rather than the video alone.browser_get_images to locate the pbs.twimg.com/media/... asset, download the name=orig variant with curl -L, inspect it with vision/OCR, and embed it locally in both language versions. Treat the image as source evidence, but ground broad technical claims in canonical sources (paper/project pages/docs). If web search is blocked by anti-bot pages, use authoritative APIs/pages directly where possible (for example arXiv API/abstract pages, official project pages, GitHub READMEs) rather than relying on search snippets.blog.google, especially Gemini/AI product announcements), use references/google-keyword-source-pages.md: use the canonical URL and source publish date, preserve meaningful Google CDN/video assets locally, inspect linked Google AI docs/model cards/help pages for operational constraints, and distinguish launch claims from current product limits.references/openai-news-pages.md: if the JS-rendered article is incomplete or Cloudflare-protected, verify existence and metadata through OpenAI RSS plus sitemap, record the RSS summary in article metadata, and keep claims cautious unless official full text or linked docs are available.references/benchmark-leaderboard-pages.md: collect the headline row plus linked detail page/scorecard; record rank, score, cost/spend, date, environment/level counts, episodes, actions/resets, code links, verification regime, and whether results are self-reported or independently verified. Treat social posts as framing, but ground numbers in the leaderboard, scorecard, paper, and official repository.references/voice-agent-benchmark-sources.md: preserve tweet leaderboard screenshots locally, resolve official product/docs/model pages, verify Artificial Analysis or similar benchmark methodology pages, distinguish streaming vs non-streaming STT and TTS quality vs latency, and explicitly note when a live dynamic leaderboard has changed from the screenshot rather than repeating “#1” as an evergreen fact.references/js-rich-source-pages.md: probe img, video, audio, figure, table, and outbound links via the browser DOM; download meaningful raster assets; summarize inline diagrams when no reliable export exists; verify local images plus GitHub blob/raw URLs after push.references/model-launch-source-pages.md: ground the writeup across the launch blog, official docs/API page, Hugging Face/ModelScope card, GitHub repo, linked papers, and benchmark pages; preserve official charts locally as WebP; state harness/leaderboard caveats; separate open weights from practical serving cost; and choose a non-overlapping angle if the repo already has coverage of the model family.browser_navigate + browser_console DOM extraction over repeated raw-HTML terminal scraping: collect document.querySelector('main').innerText, document.images (currentSrc, alt, dimensions), meta tags (article:published_time, author, og:image), and main links in one structured object. Decode /_next/image?url=<encoded-source>&w=... to the original asset URL before downloading, preserve meaningful body figures locally, and verify image types/sizes before commit.references/js-app-screenshot-cdp.md: drive Chrome through the DevTools Protocol, click product UI such as “Load Sample Project”, capture the useful app state, convert to WebP, and verify with vision before embedding.references/product-landing-api-docs.md: ground positioning in the landing page, operational claims in the docs/OpenAPI JSON, preserve verified landing-page screenshots, and include trust/safety analysis for sensitive categories like identity intelligence, face search, KYC, or OSINT.pdftotext is unavailable, install/use Python pypdf for extraction; do not base a technical article only on the marketing/blog page when PDFs are the primary evidence.\\mathbb{Z}), JSON/JSON5 examples ({ "id": "..." }), or config snippets. They can be parsed as f-string expressions and fail before writing. Prefer raw triple-quoted templates plus explicit placeholder replacement for titles, dates, source text, slug, and image paths.mp.weixin.qq.com), use the workflow notes in references/wechat-source-articles.md: capture text with Baoyu URL-to-Markdown, but use a rendered browser page plus full-page scrolling/DOM image extraction for complete media preservation.docs.qq.com/doc/...), use references/tencent-docs-source-articles.md: the visible page may expose only title/outline/word count, while full text is embedded in the /dop-api/opendoc JSONP payload under clientVars.collab_client_vars.initialAttributedText.text[0] as base64-encoded protobuf-like bytes containing UTF-8 text. Extract and clean that text, compare headings against the visible outline, then write an analytical article rather than mirroring the prompt dump.references/substack-source-articles.md: extract full text from article.innerText, pull datePublished and hero images from meta/JSON-LD/raw HTML, prefer original substack-post-media.s3.amazonaws.com images over resized proxies, and crop full-page screenshots into focused assets before committing.articles/articles/... or articles/YYYY-MM-DD/....repo-root/YYYY-MM-DD/file.md.MOC.md paths in the same task.