aws-content-relay-hub
AWS関連の技術記事をここに掲載します。Qiita、Zenn、X-Engineerにも同時投稿する予定です。
Install / Use
npx skills add riadraz/aws-content-relay-hubInstalls into whichever agent you are using.
Amazon Q Rules
Amazon Q Developer rules
Quality Score
Category
Development & EngineeringSupported Platforms
Our assessment of aws-content-relay-hub
aws-content-relay-hub scores 59/100 on our quality scale, 4165th of 4,604 Development & Engineering skills we index.
Its Amazon Q Rules is 5.2 KB long, well organised into 21 sections with 7 code examples: a solid amount of guidance for an agent.
It has no GitHub stars yet, so there is no community track record; judge it on its content.
Maintenance, license and trust
- We could not determine when the repository was last updated.
- Our last check on 2026-09-02 found the source still online.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 68/100, with 3 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
aws-content-relay-hub compared with similar skills
All 4 of these similar skills score higher than aws-content-relay-hub; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| aws-content-relay-hub (this skill)by riadraz | 59 | 0 | — | Amazon Q Rules |
| taste-skillby Leonxlnx | 100 | 102.7k | today | CLAUDE.md |
| ai-job-searchby ai-job-search-dev | 100 | 66.0k | 5d ago | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 45.2k | 6d ago | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 33d ago | SKILL.md |
Frequently asked questions
- How do I install aws-content-relay-hub?
- Run
npx skills add riadraz/aws-content-relay-hub. The install tabs above show the steps for each supported agent. - Which AI agents does aws-content-relay-hub work with?
- It is written for Amazon Q, as a Amazon Q Rules file. Other agents that read the same format can often use it too.
- Is aws-content-relay-hub safe to use?
- It declares no license and scores 68/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is aws-content-relay-hub still maintained?
- We could not determine when the repository was last updated.
Skill content
View source on GitHubDevelopment Guidelines
Code Quality Standards
Error Handling
- Fail fast on missing required env vars at module load time:
if (!TOKEN) throw new Error("TOKEN is not set") - Use
throw(notconsole.error+ return) inside async functions for fatal errors - Wrap top-level async calls with
.catch(e => { console.error(e); process.exit(1) }) - Use try/catch only for recoverable errors (e.g. 404 on file-existence check); let unrecoverable errors propagate
- Non-fatal missing inputs exit with code 0 +
console.logmessage (e.g. no files passed to sync script)
TypeScript Conventions
- Strict mode enabled — no implicit
any, always type function parameters and return values - Define local
typealiases for frontmatter shapes (notinterface):type Frontmatter = { title: string; tags?: string[]; private?: boolean }; - Use
meta: anyonly during dynamic YAML parsing, then cast to the typed alias immediately - Prefer
??(nullish coalescing) over||for boolean defaults:meta.private ?? false - Use
as Frontmattercast at the return boundary, not inline during construction
Module Style
- All files use ESM (
import/export), no CommonJSrequire() "type": "module"inpackage.json— applies to.jsfiles too- Import Node built-ins without
node:prefix:import fs from "fs"
Structural Conventions
Script Architecture
Each script is a self-contained CLI entry point:
- Import dependencies
- Validate env vars / argv at top level (fail fast)
- Define pure helper functions (e.g.
parseFrontmatter) - Define one primary
async functionnamed after the operation (e.g.postToQiita,updateQiita,syncFileToRepo) - Parse
process.argv[2]for the article path - Call the primary function and attach
.catchhandler
Frontmatter Parser Pattern
Both Qiita scripts share an identical inline frontmatter parser — no shared utility module. Pattern:
function parseFrontmatter(raw: string): { meta: Frontmatter; body: string } {
const match = raw.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
// parse key:value lines, handle arrays [], booleans, strip quotes
return { meta: meta as Frontmatter, body: match[2].trim() };
}
qiita-post.tsreturnsnullon missing frontmatter (soft skip)qiita-update.tsthrows on missing frontmatter (hard fail)
Qiita API Calls
Always append an attribution footer to the article body before posting:
const qiitaBody = body + `\n\n---\n> この投稿は GitHub リポジトリ "aws-content-relay-hub" から自動投稿されています。\n`;
Use node-fetch with explicit Authorization: Bearer header and Content-Type: application/json.
Mirror Sync Pattern (Octokit)
// 1. Try GET to retrieve existing file SHA
// 2. PUT with sha if exists (update), without sha if new (create)
await octokit.request("PUT /repos/{owner}/{repo}/contents/{path}", {
owner, repo, path: targetPath,
message: `Sync JP article: ${filename}`,
content: base64Content,
sha // undefined = create, string = update
});
Mapping Format
Mirror repo targets use owner/repo:/destination-path format, newline-separated:
riadraz/x-engineer:/docs/
Parsed by splitting on \n, then splitting each line on : and /.
- Dest path must have leading
/stripped before passing to Octokit — GitHub API rejects paths starting with/ - Strip with:
dest.replace(/^\//, "").replace(/\/$/, "")
Naming Conventions
- Script files:
kebab-casewith operation prefix (qiita-post,qiita-update,sync-mirror-repos) - Article files:
kebab-casewith-enor-jalanguage suffix - Functions:
camelCase, verb-first (postToQiita,updateQiita,syncFileToRepo,parseFrontmatter) - Constants:
SCREAMING_SNAKE_CASEfor env var references (QIITA_TOKEN,GH_TOKEN)
CI/CD Patterns
File Detection (Two-Stage)
# Stage 1: event payload (reliable for incremental pushes)
CHANGED=$(jq -r '.commits[].modified[], .commits[].added[]' "$GITHUB_EVENT_PATH" | grep '\-ja.md$' | tr '\n' ' ' || true)
# Stage 2: fallback for first-time publish
CHANGED=$(git ls-files "articles/*-ja.md" | tr '\n' ' ' || true)
- Always pipe through
tr '\n' ' 'to produce space-separated list — required forfor file in $FILESloop andnodecall - Both stages append
|| trueto prevent non-zero exit killing the step
Qiita Rate Limits
- Qiita API allows ~50 calls/day on free plan
- Add
sleep 2between posts in the workflow loop to avoid 429 errors qiita-post.tsskips articles whereqiita_idis already set in frontmatter- After first successful post, update
qiita_idin the article frontmatter with the ID from the Qiita URL
Secret Usage
QIITA_TOKEN— scoped to Qiita post/update steps onlyGH_TOKEN— GitHub PAT withreposcope, required for cross-repo writes; auto-injectedGITHUB_TOKENonly works on the current repo- Never log token values; scripts only reference via
process.env
Config File Conventions
mapping.yml
articles:
filename.md:
qiita_id: null # null = not yet posted; string = Qiita article ID
zenn_slug: some-slug
platforms.yml
qiita:
enabled: true
mirror_repos:
- name: repo-name
owner: github-username
target_path: content/posts
Related Skills
taste-skill
102.7kAgent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages
ai-job-search
66.0kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
45.2kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
