Skip to content
/ ai Public

Collection of skills to help AI agents build better with BCMS.

License

Notifications You must be signed in to change notification settings

bcms/ai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BCMS Skill

This skill gives the AI coding agent concise, BCMS‑specific guidance and defers longer explanations to the files in references/. The agent should keep this file under roughly 500 lines and load deeper guides only when needed.

Key topics:

  • Setup and client initialization (see references/bcms-api-basics.md)
  • Working with templates (see references/templates.md)
  • Entries (see references/entries.md)
  • Groups (see references/groups.md)
  • Widgets (see references/widgets.md)
  • Media (see references/media.md)
  • Properties and field types (see references/properties.md)
  • Functions and webhooks (see references/functions-webhooks.md)
  • Permissions (see references/permissions.md)
  • Framework integrations (see references/frameworks.md)

Integration principles and defaults

  • Default to the latest BCMS stack: use the latest BCMS features and the newest @thebcms/* and @bcms-types/* packages unless the user explicitly targets an older version.
  • Model content with BCMS primitives first: prefer templates + entries as your main content model, with groups for reusable structures, widgets for reusable content blocks, and the media library for files.
  • Use CLI starters when possible: for framework projects (Next, Nuxt, Astro, etc.) prefer the official @thebcms/cli starters before hand‑rolling integration; see references/frameworks.md.
  • Render via BCMS components: in UI frameworks, prefer BCMSContentManager and BCMSImage (or their framework equivalents) to render rich text, widgets and media instead of building your own renderers.
  • Always isolate secrets: read orgId, instanceId and API key credentials from environment variables, use separate keys per environment (dev/stage/prod) and prefer scoped keys, especially for media delivery; see references/bcms-api-basics.md and references/permissions.md.
  • Design for localisation: when sites are multi‑lingual, use BCMS locales and model meta/content per locale; see references/entries.md and references/properties.md.
  • Evolve schemas, don’t break them: when changing content models, add or migrate fields via templates and groups; avoid destructive changes on production data; see references/templates.md and references/groups.md.

Patterns to avoid (and what to do instead)

  • Never hard‑code API keys or use admin keys in the browser. Instead, store secrets in environment variables and use minimally scoped keys; see references/bcms-api-basics.md and references/permissions.md.
  • Never delete templates, groups, widgets or media in production without checking impact. Always inspect usage first (group.whereIsItUsed, widget.whereIsItUsed, template.whereIsItUsed) and plan a migration path; see references/templates.md, references/groups.md, references/widgets.md, and references/media.md.
  • Avoid stuffing unstructured JSON into meta or content when a property, group or widget fits. Prefer explicit properties (string, rich text, enum, pointers, media) and reusable groups/widgets for structure; see references/properties.md, references/groups.md, and references/widgets.md.
  • Avoid re‑implementing rich‑text and widget rendering when BCMSContentManager is available. Use the official components (@thebcms/components-*) with BCMSContentManager and BCMSImage, and only drop down to custom parsing when you have a clear requirement; see references/entries.md and references/frameworks.md.
  • Avoid exposing unnecessary write capabilities to public clients. Do not use keys with create/update/delete rights from the frontend; keep mutations behind server‑side code or functions, and use read‑only or media‑only keys in the browser; see references/permissions.md.
  • Do not bypass webhook security. Always verify webhook signatures, check timestamps, and design idempotent handlers; see references/functions-webhooks.md.

When to reach for which BCMS features

  • Marketing, blog, or documentation sites Use templates like page, blog, doc with structured properties, groups for SEO/author blocks, widgets for reusable sections, and the media library for images; render with BCMSContentManager and BCMSImage. See references/templates.md, references/entries.md, references/groups.md, references/widgets.md, and references/media.md.

  • Multi‑locale content Model meta and content per locale, use BCMS locales, and ensure frontends handle missing translations gracefully via types from @bcms-types/ts. See references/entries.md and references/properties.md.

  • Asset‑heavy or image‑driven experiences Rely on the media library, folder structure, and auto‑generated sizes; use a dedicated media API key for public delivery and BCMSImage (or equivalent) to serve optimised variants. See references/media.md and references/bcms-api-basics.md.

  • Framework‑based frontends (Next.js, Nuxt, Astro, Gatsby, Svelte, Vite) Prefer the official BCMS starters; otherwise, follow the framework‑specific guides, using the standard Client constructor, generated types, and the appropriate @thebcms/components-* package. See references/frameworks.md.

Setup and Client Initialization

  • Always use environment variables for secrets, never hard‑code BCMS credentials.
  • Use separate API keys per environment (development, staging, production).
  • Prefer scoped keys with the minimum necessary permissions.

Example client initialization (TypeScript):

import { Client } from '@thebcms/client';

export const bcms = new Client(
  process.env.BCMS_ORG_ID!,
  process.env.BCMS_INSTANCE_ID!,
  {
    id: process.env.BCMS_API_KEY_ID!,
    secret: process.env.BCMS_API_KEY_SECRET!,
  },
  {
    injectSvg: true, // inline SVG icons into HTML
    useMemCache: true, // enable in‑memory caching
    enableSocket: false, // disable websockets when not needed
  },
);

For more, including API key structure and environment setup, see references/bcms-api-basics.md.

Working with Templates

  • Treat templates as your content types (e.g., blog, page, author).
  • Use singular, descriptive names and rely on groups for reusable structures.
  • Only admins (or keys with advanced rights) should create or modify templates.

Common operations:

  • List all templates: await bcms.template.getAll()
  • Get a template by ID or name
  • Update or delete templates when refactoring content models

See references/templates.md for naming conventions, creation guidelines and code examples.

Entries

  • Entries are instances of templates (e.g., a single blog post).
  • Entries usually have:
    • meta fields (title, slug, SEO, etc.)
    • content fields, often localized by language code

Example: get all entries for a blog template:

const blogPosts = await bcms.entry.getAll('blog');

Agents should be able to:

  • Create, update and delete entries
  • Retrieve entries by ID, slug or status
  • Filter entries by template and status (e.g., draft vs. published)

See references/entries.md for full CRUD examples and multilingual details.

Groups, Widgets and Media

  • Groups are reusable structures that can be nested inside templates, widgets or other groups.
  • Widgets are reusable content blocks embedded in rich‑text fields.
  • Media refers to files in the BCMS media library (images, documents, etc.).

Typical operations:

  • Groups:
    • bcms.group.getAll()
    • bcms.group.whereIsItUsed(groupId)
  • Widgets:
    • bcms.widget.getAll()
    • bcms.widget.whereIsItUsed(widgetId)
  • Media:
    • bcms.media.getAll(), bcms.media.getById(id)
    • Create folders and upload files using media API helpers

Widgets cannot currently be deleted via the SDK and must be removed via the BCMS dashboard. See references/groups.md, references/widgets.md and references/media.md for concrete examples and media best‑practices.

Properties and Field Types

BCMS supports various property types used in templates, groups and widgets, including:

  • String, rich‑text, number, date, boolean
  • Enumeration
  • Entry pointer, group pointer
  • Media fields (single and multiple)

Agents should choose appropriate field types based on content modelling goals and reusability. See references/properties.md, references/groups.md, references/widgets.md and references/templates.md for details.

Permissions and API Key Scopes

  • BCMS enforces granular permissions for users and API keys.
  • Permissions can be:
    • Simple: broad access levels
    • Advanced: per‑resource get/create/update/delete scopes
  • Only admins can create templates, widgets, groups and API keys.

API keys:

  • Should be scoped per template, function and media access where possible.
  • Use least privilege: grant only the rights needed for the specific integration.

See references/permissions.md for a deeper explanation and configuration examples.

Functions and Webhooks

  • Functions are serverless handlers you deploy inside BCMS and call via REST.
  • Webhooks notify external systems about events such as entry or media changes.

Agents should:

  • Call functions using the correct URL and headers, including an API key with function permissions.
  • Configure and secure webhooks by:
    • Verifying the X-Bcms-Webhook-Signature header
    • Validating timestamps to avoid replay attacks
    • Making handlers idempotent and rate‑limited

See references/functions-webhooks.md for full examples and security notes.

Best Practices and Troubleshooting

  • Prefer TypeScript and generated BCMS types (e.g., @bcms-types/ts) where available.
  • Use caching (e.g., in‑memory or application‑level) for frequently read data.
  • Separate dev, staging and production environments and API keys.
  • On errors, check:
    • URL correctness (org, instance, function ID)
    • API key scopes and permissions
    • Network and TLS configuration

For in‑depth guidance, always cross‑reference the official BCMS documentation from the references/ files.

About

Collection of skills to help AI agents build better with BCMS.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published