From plumai-skills
Generate articles from topics with optional translations. Handles async job tracking, polling, and translation job monitoring.
How this skill is triggered — by the user, by Claude, or both
Slash command
/plumai-skills:article-generationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate articles from discovered topics. Generation is asynchronous — you receive a job ID and poll for completion.
Generate articles from discovered topics. Generation is asynchronous — you receive a job ID and poll for completion.
Always check credits before generating:
GET /v1/account
If canGenerate is false, inform the user they need to upgrade or wait for their billing period to reset. Do not attempt generation.
POST /v1/articles/generate
Body:
{
"topicId": "uuid",
"language": "en",
"translationLanguages": ["es", "fr"],
"customFields": { "tone": "professional" }
}
| Field | Type | Required | Description |
|---|---|---|---|
| topicId | string | Yes | ID of the topic to generate from |
| language | string | Yes | Primary language code |
| translationLanguages | string[] | No | Additional languages to translate into |
| customFields | object | No | Custom metadata (key-value string pairs) |
Response (202 Accepted):
{
"jobId": "uuid",
"status": "queued",
"estimatedCompletionTime": "2026-03-07T12:30:00Z",
"statusUrl": "/api/v1/jobs/{jobId}",
"translationLanguages": ["es", "fr"]
}
GET /v1/jobs/:jobId
Response:
{
"job": {
"jobId": "uuid",
"type": "article_generation",
"state": "completed",
"progress": 100,
"currentStep": "done",
"output": {
"articleId": "uuid",
"translationJobIds": ["tid1", "tid2"]
}
}
}
Job states: queued, processing, completed, failed
GET /v1/jobs
Returns all jobs with state queued or processing.
Follow this sequence for article generation with translations:
GET /v1/account, verify canGenerate is truePOST /v1/articles/generate with topicId, language, and optional translationLanguagesGET /v1/jobs/:jobId every 10-15 seconds until state is completed or failedoutput.articleId is the generated article, output.translationJobIds contains translation jobsGET /v1/jobs/:translationJobId for each until all are completedGET /v1/articles/:articleId for the primary article and each translationPolling interval: 10-15 seconds. Do not poll more frequently.
On failure: Report the error to the user. Do not retry automatically.
| Status | Code | Meaning |
|---|---|---|
| 404 | TOPIC_NOT_FOUND | Topic doesn't exist or not owned by user |
| 409 | ARTICLE_EXISTS | Article already exists for this topic+language |
| 409 | JOB_IN_PROGRESS | Generation already queued for this topic+language |
| 403 | CREDIT_LIMIT_REACHED | No remaining credits this billing period |
| 503 | SERVICE_BUSY | System busy — try again in a moment |
GET /v1/account — verify creditsPOST /v1/articles/generate with { "topicId": "...", "language": "en", "translationLanguages": ["es", "fr"] }GET /v1/jobs/:jobId until completedtranslationJobIds from outputGET /v1/jobs/:jobIdnpx claudepluginhub andginja/plumai-skills --plugin plumai-skillsGenerates technical articles via phased workflow with web research, runnable companion code projects, author voice adaptation, reviews, condensing, and multi-language translations.
You are running the Blog Engine content generation pipeline. Your job is to produce one complete, publish-ready blog article from a keyword in the pipeline. Follow every step exactly and in order.
Generates SEO/GEO-optimized blog articles in 55 languages with AI illustrations, voice-overs, and social media adaptations for 9 platforms. Automates content sessions and product knowledge bases via Citedy API.