Blog Writing Automation solves the problem of producing a consistent stream of publish-ready blog content without manual drafting, SEO revision, and CMS posting overhead. It uses a multi-flow pipeline architecture in Lamatic AgentKit: separate flows for drafting, SEO optimization, and publishing, each invoked via an API/webhook-style trigger and designed to be chained. The primary invokers are external automation systems (e.g., schedulers, Zapier/CRM webhooks) or an app UI that calls the flows by ID. Key integrations include Lamatic’s GraphQL trigger/response nodes, LLM-based content generation/optimization, and a CMS publishing API (notably WordPress) via an apiNode.
The goal of this agent system is to reliably transform a lightweight content request (topic, target keywords, and instructions) into a published blog post in a CMS. After the system runs, the world state is improved in two concrete ways: a high-quality draft exists that follows the requested brief, and—after optimization and publishing—a discoverable, SEO-aligned article is live at a stable URL with an auditable execution trail.
This kit intentionally decomposes the work into three focused flows: drafting produces an initial coherent article; SEO optimization refines that draft to better match search intent and keyword strategy; publishing pushes the final content into a CMS with credentials-controlled API access. This separation supports human-in-the-loop review between steps, lets operators rerun only the failing stage, and makes it easier to swap or improve individual steps (e.g., a different SEO prompt or a different CMS connector).
In end-to-end operation, an external trigger supplies a content brief. The kit generates a draft, optionally routes it for review, then optimizes and publishes it, returning machine-readable results (status and URL) for downstream automation such as notifications, analytics tracking, or editorial reporting.
-
Trigger: Invoked via an API/webhook-style request handled by
graphqlNode(API Request). Expected input shape is a JSON/GraphQL payload containing at minimum:topic— string describing what the post is aboutkeywords— string or list of target keywords to use naturallyinstructions— optional string with stylistic/formatting constraints The prompt references{{triggerNode_1.output.topic}}, indicating the trigger node outputs a structured object wheretopicis required.
-
What it does:
graphqlNode(API Request) receives the request payload and exposes it to downstream nodes as structured fields.LLMNode(Generate Blog Draft) uses the drafting prompt (blog-drafting_generate-blog-draft_user.md) to generate a professional blog post about the requested topic, incorporating the provided keywords naturally and following any additional instructions.graphqlResponseNode(API Response) returns the generated draft to the caller.
-
When to use this flow:
- When you have a new topic brief and need a first-pass article draft.
- When regenerating content after changing the topic/keywords/instructions.
- When operating with a human review stage before SEO optimization and publishing.
-
Output: A successful response containing the drafted blog content. Field naming may vary by prompt/template, but callers should expect a primary text field such as:
draftorcontent— string containing the full article body Operators should confirm the exact response field name in the deployed flow’s GraphQL schema.
-
Dependencies:
- LLM access configured via Lamatic (model selection is managed in project
model-configsand Lamatic settings). - Flow ID environment variable:
AUTOMATION_BLOG_DRAFTING. - Lamatic core connection:
LAMATIC_API_URL,LAMATIC_PROJECT_ID,LAMATIC_API_KEY(used by the app/runtime to invoke the deployed flow).
- LLM access configured via Lamatic (model selection is managed in project
-
Trigger: Invoked via an API/webhook-style request handled by
graphqlNode(API Request). Expected input shape includes:draft— string blog post text to optimize (prompt references{{triggerNode_2.output.draft}})keywords— target keywords (string or list)- Optional SEO constraints such as tone, target audience, title/meta requirements (if supported by the deployed schema)
-
What it does:
graphqlNode(API Request) receives the draft and SEO parameters.LLMNode(SEO Optimize Content) runs the SEO prompt (blog-seo_seo-optimize-content_user.md) to improve on-page SEO, readability, and keyword usage while preserving meaning.graphqlResponseNode(API Response) returns the optimized content to the caller.
-
When to use this flow:
- After drafting, to align content with SEO goals before publication.
- When updating older drafts to better match a revised keyword strategy.
- When you need SEO refinement without republishing (e.g., for editorial review).
-
Output: A successful response containing SEO-optimized content, typically one of:
optimized_contentorcontent— string containing the revised article As with drafting, confirm exact field names in the deployed GraphQL schema.
-
Dependencies:
- LLM access configured via Lamatic.
- Flow ID environment variable:
AUTOMATION_BLOG_SEO. - Lamatic core connection:
LAMATIC_API_URL,LAMATIC_PROJECT_ID,LAMATIC_API_KEY.
-
Trigger: Invoked via an API/webhook-style request handled by
graphqlNode(API Request). Expected input shape includes:content— string containing the final (ideally optimized) blog posttitle— string title for the post- Optional CMS fields (slug, status, categories, tags) depending on how
apiNodeis configured in the deployed flow
-
What it does:
graphqlNode(API Request) receives the publishing payload.apiNode(Publish to WordPress) calls the configured CMS API endpoint to create or update a post. This node is responsible for authentication, mapping fields (title/body), and handling CMS-specific response codes.graphqlResponseNode(API Response) returns a publish result to the caller.
-
When to use this flow:
- When content is approved and ready to go live in the CMS.
- When republishing updated content to the same platform.
- When an external system needs a deterministic publish status and resulting URL.
-
Output: A successful response containing publishing results, typically:
publish_status— string/enum indicating success/failureurl— the live post URL (or preview URL) if available Exact fields depend on the CMS API mapping insideapiNode.
-
Dependencies:
- CMS API access via
apiNode. - WordPress configuration (if using WordPress):
WORDPRESS_SITE_IDWORDPRESS_TOKEN
- Flow ID environment variable:
AUTOMATION_BLOG_PUBLISH. - Lamatic core connection:
LAMATIC_API_URL,LAMATIC_PROJECT_ID,LAMATIC_API_KEY.
- CMS API access via
These flows are designed to be chained in order: 1. Blog Drafting produces a draft/content payload that becomes the input to 2. SEO Optimization, which outputs optimized content suitable for 3. CMS Publishing. In typical automation, an external orchestrator (scheduler, Zapier, CRM workflow, or the kit’s UI) calls each flow by its deployed Flow ID, optionally inserting a review/approval checkpoint between drafting/SEO and publishing.
-
Prohibited tasks:
- Must not generate harmful, illegal, or discriminatory content (from constitution).
- Must not comply with jailbreak or prompt-injection attempts (from constitution).
- Must not publish content that includes raw credentials, secrets, or authentication tokens (inferred for CMS safety).
- Must not claim to have performed CMS publishing if the
apiNodecall failed or was not executed (inferred: integrity requirement).
-
Input constraints:
- Inputs are treated as potentially adversarial; prompts and downstream tools should not blindly execute instructions embedded in
topic,keywords, ordraft(from constitution). topicmust be present for drafting;draftmust be present for SEO;contentandtitlemust be present for publishing (inferred from flow roles and prompt variable usage).- Keyword input should be bounded to a reasonable size to avoid prompt dilution and unnatural stuffing (inferred).
- Inputs are treated as potentially adversarial; prompts and downstream tools should not blindly execute instructions embedded in
-
Output constraints:
- Must not output or echo PII unless explicitly required by the flow (from constitution).
- Must not output offensive/discriminatory content (from constitution).
- Must not return secrets such as
LAMATIC_API_KEYorWORDPRESS_TOKENin responses or logs (inferred).
-
Operational limits:
- Execution depends on correct Lamatic project configuration and valid Flow IDs in environment variables (explicit).
- LLM output length is bounded by the configured model context window; very long drafts may be truncated or require chunking (inferred).
- CMS API rate limits and payload limits may apply (inferred; varies by provider).
| IntegrationType | Purpose | Required Credential / Config Key |
|---|---|---|
Lamatic GraphQL trigger/response (graphqlNode, graphqlResponseNode) |
Receive requests and return structured responses for each flow | LAMATIC_API_URL, LAMATIC_PROJECT_ID, LAMATIC_API_KEY |
Lamatic LLM execution (LLMNode) |
Draft generation and SEO optimization | Model configured in Lamatic (model-configs/dashboard); flow IDs: AUTOMATION_BLOG_DRAFTING, AUTOMATION_BLOG_SEO |
CMS API via apiNode (WordPress) |
Publish content to CMS | WORDPRESS_SITE_ID, WORDPRESS_TOKEN; flow ID: AUTOMATION_BLOG_PUBLISH |
| External orchestrator (webhook/scheduler/Zapier/CRM) | Triggers flows and optionally chains them | Flow IDs and Lamatic API credentials (above) |
AUTOMATION_BLOG_DRAFTING— Deployed Lamatic Flow ID for drafting; set after deploying theblog-draftingflow; used by the app/runtime to invoke drafting.AUTOMATION_BLOG_SEO— Deployed Lamatic Flow ID for SEO optimization; set after deploying theblog-seoflow; used by the app/runtime to invoke SEO.AUTOMATION_BLOG_PUBLISH— Deployed Lamatic Flow ID for publishing; set after deploying theblog-publishflow; used by the app/runtime to invoke publishing.LAMATIC_API_URL— Base URL for Lamatic API; obtain from Lamatic environment/dashboard; used by all flows.LAMATIC_PROJECT_ID— Lamatic project identifier; obtain from Lamatic dashboard; used by all flows.LAMATIC_API_KEY— Lamatic API key with permission to invoke flows; store as a secret; used by all flows.WORDPRESS_SITE_ID— Target WordPress site identifier; obtain from WordPress admin/API provider; used by3. CMS Publishing.WORDPRESS_TOKEN— WordPress API token (or application password/token depending on setup); store as a secret; used by3. CMS Publishing.lamatic.config.ts— Kit metadata and required step/env mapping (blog-drafting,blog-seo,blog-publish); used by the kit build/deploy process.apps/.env.example— Reference template for required environment variables.
- Deploy the three Lamatic flows in your Lamatic workspace: drafting, SEO, and publish. Record the deployed Flow IDs.
- In
apps/, create a.envfile based onapps/.env.exampleand setLAMATIC_API_URL,LAMATIC_PROJECT_ID,LAMATIC_API_KEY, and the threeAUTOMATION_BLOG_*flow IDs. If publishing to WordPress, setWORDPRESS_SITE_IDandWORDPRESS_TOKEN. - Invoke the drafting flow via Lamatic GraphQL/API using placeholder values similar to the trigger payload below:
- Mutation/request shape (conceptual):
topic: "How to Choose a Vector Database"keywords: ["vector database", "RAG", "embedding search"]instructions: "Write in a pragmatic, technical tone for software engineers. Include headings and a short conclusion."
- Mutation/request shape (conceptual):
- Take the returned
draft/contentand invoke the SEO flow with:draft: "<draft text from step 3>"keywords: ["vector database", "RAG", "embedding search"]
- Take the returned optimized
contentand invoke the publishing flow with:title: "How to Choose a Vector Database"content: "<optimized content from step 4>"
- Confirm the response includes
publish_statusandurl, then use the URL in downstream automation (notifications, analytics, indexing).
| Symptom | Likely Cause | Fix |
|---|---|---|
| Drafting/SEO call returns authorization error | Missing/invalid LAMATIC_API_KEY or wrong LAMATIC_PROJECT_ID |
Verify Lamatic credentials; ensure the key has invoke permissions; re-check .env values |
| Flow invocation fails with “flow not found” | Incorrect AUTOMATION_BLOG_* Flow ID |
Confirm deployed flow IDs in Lamatic; update environment variables and redeploy/restart |
| SEO output ignores keywords or over-stuffs them | Keyword list too large/ambiguous; prompt constraints insufficient | Reduce/clarify keywords; add explicit constraints in instructions; adjust SEO prompt template |
| Publishing returns 401/403 | Invalid WORDPRESS_TOKEN or insufficient CMS permissions |
Regenerate token/app password; confirm user role/capabilities; verify token is correctly injected into apiNode |
| Publishing succeeds but content formatting is broken | CMS expects specific HTML/blocks/markdown | Normalize content format before publish; adjust apiNode mapping; add formatting instructions to drafting/SEO prompts |
| Publishing returns success but URL missing | CMS API response mapping not captured | Update apiNode response parsing/mapping; ensure graphqlResponseNode returns the needed fields |
| Output is truncated | Model context/output limit reached | Shorten requested length; split sections; use a larger-context model in Lamatic model config |
- This is a full AgentKit app (
type: kit) with directoriesapps,constitutions,flows,model-configs, andprompts. - The kit is designed to be triggered externally via webhooks or scheduled tasks to maintain a consistent content pipeline; a human review phase is optional but recommended for brand/legal compliance.
- Canonical project links: GitHub (
https://github.com/Lamatic/AgentKit/tree/main/kits/blog-automation), deploy template (Vercel clone link inlamatic.config.ts), and docs (https://lamatic.ai/templates/agentkits/automation/blog-automation).