Back to Skills
    🦞

    bearblog

    Create and manage blog posts on Bear Blog (bearblog.dev).

    By @azade-c
    View on GitHub
    SKILL.md
    ---
    name: bearblog
    description: Create and manage blog posts on Bear Blog (bearblog.dev). Supports extended Markdown, custom attributes, and browser-based publishing.
    metadata: {"clawdbot":{"emoji":"🐻","homepage":"https://bearblog.dev","requires":{"config":["browser.enabled"]}}}
    ---
    
    # Bear Blog Skill
    
    Create, edit, and manage posts on [Bear Blog](https://bearblog.dev) — a minimal, fast blogging platform.
    
    ## Authentication
    
    Bear Blog requires browser-based authentication. Log in once via the browser tool, and cookies will persist.
    
    ```
    browser action:navigate url:https://bearblog.dev/accounts/login/
    ```
    
    ## Creating a Post
    
    ### Step 1: Navigate to the post editor
    
    ```
    browser action:navigate url:https://bearblog.dev/<subdomain>/dashboard/posts/new/
    ```
    
    
    ### Step 2: Fill the editor
    
    Bear Blog uses a **plain text header format**.
    
    The editor fields are:
    - `div#header_content` (contenteditable): attributes (one per line)
    - `textarea#body_content`: Markdown body
    
    **Verified:** use `fill`/`type` on those two fields, then click **Publish** (or **Save as draft**). No `evaluate` needed.
    
    **Header format:**
    ```
    title: Your Post Title
    link: custom-slug
    published_date: 2026-01-05 14:00
    tags: tag1, tag2, tag3
    make_discoverable: true
    is_page: false
    class_name: custom-css-class
    meta_description: SEO description for the post
    meta_image: https://example.com/image.jpg
    lang: en
    canonical_url: https://original-source.com/post
    alias: alternative-url
    ```
    
    **Body format:** Standard Markdown with extensions (see below).
    
    The separator `___` (three underscores) is used in templates to separate header from body.
    
    ### Step 3: Publish
    
    Click the publish button or submit the form with `publish: true`.
    
    ## Post Attributes Reference
    
    | Attribute | Description | Example |
    |-----------|-------------|---------|
    | `title` | Post title (required) | `title: My Post` |
    | `link` | Custom URL slug | `link: my-custom-url` |
    | `published_date` | Publication date/time | `published_date: 2026-01-05 14:30` |
    | `tags` | Comma-separated tags | `tags: tech, ai, coding` |
    | `make_discoverable` | Show in discovery feed | `make_discoverable: true` |
    | `is_page` | Static page vs blog post | `is_page: false` |
    | `class_name` | Custom CSS class (slugified) | `class_name: featured` |
    | `meta_description` | SEO meta description | `meta_description: A post about...` |
    | `meta_image` | Open Graph image URL | `meta_image: https://...` |
    | `lang` | Language code | `lang: fr` |
    | `canonical_url` | Canonical URL for SEO | `canonical_url: https://...` |
    | `alias` | Alternative URL path | `alias: old-url` |
    
    ## Extended Markdown
    
    Bear Blog uses [Mistune](https://github.com/lepture/mistune) with plugins:
    
    ### Text Formatting
    - `~~strikethrough~~` → ~~strikethrough~~
    - `^superscript^` → superscript
    - `~subscript~` → subscript
    - `==highlighted==` → highlighted (mark)
    - `**bold**` and `*italic*` — standard
    
    ### Footnotes
    ```markdown
    Here's a sentence with a footnote.[^1]
    
    [^1]: This is the footnote content.
    ```
    
    ### Task Lists
    ```markdown
    - [x] Completed task
    - [ ] Incomplete task
    ```
    
    ### Tables
    ```markdown
    | Header 1 | Header 2 |
    |----------|----------|
    | Cell 1   | Cell 2   |
    ```
    
    ### Code Blocks
    ````markdown
    ```python
    def hello():
        print("Hello, world!")
    ```
    ````
    
    Syntax highlighting via Pygments (specify language after ```).
    
    ### Math (LaTeX)
    - Inline: `$E = mc^2
    
      
        
        
        
        OpenClaw Resources Directory – Skills, Tools, Plugins & Guides | The Claw Guy
        
        
        
        
        
        
        
        
    
        
        
        
        
    
        
        
        
        
        
      
      
    
    
      
        
    - Block: `$\int_0^\infty e^{-x^2} dx$`
    
    ### Abbreviations
    ```markdown
    *[HTML]: Hypertext Markup Language
    The HTML specification is maintained by the W3C.
    ```
    
    ### Admonitions
    ```markdown
    .. note::
       This is a note admonition.
    
    .. warning::
       This is a warning.
    ```
    
    ### Table of Contents
    ```markdown
    .. toc::
    ```
    
    ## Dynamic Variables
    
    Use `{{ variable }}` in your content:
    
    ### Blog Variables
    - `{{ blog_title }}` — Blog title
    - `{{ blog_description }}` — Blog meta description
    - `{{ blog_created_date }}` — Blog creation date
    - `{{ blog_last_modified }}` — Time since last modification
    - `{{ blog_last_posted }}` — Time since last post
    - `{{ blog_link }}` — Full blog URL
    - `{{ tags }}` — Rendered tag list with links
    
    ### Post Variables (in post templates)
    - `{{ post_title }}` — Current post title
    - `{{ post_description }}` — Post meta description
    - `{{ post_published_date }}` — Publication date
    - `{{ post_last_modified }}` — Time since modification
    - `{{ post_link }}` — Full post URL
    - `{{ next_post }}` — Link to next post
    - `{{ previous_post }}` — Link to previous post
    
    ### Post Listing
    ```markdown
    {{ posts }}
    {{ posts limit:5 }}
    {{ posts tag:"tech" }}
    {{ posts tag:"tech,ai" limit:10 order:asc }}
    {{ posts description:True image:True content:True }}
    ```
    
    Parameters:
    - `tag:` — filter by tag(s), comma-separated
    - `limit:` — max number of posts
    - `order:` — `asc` or `desc` (default: desc)
    - `description:True` — show meta descriptions
    - `image:True` — show meta images
    - `content:True` — show full content (only on pages)
    
    ### Email Signup (upgraded blogs only)
    ```markdown
    {{ email-signup }}
    {{ email_signup }}
    ```
    
    ## Links
    
    ### Standard Links
    ```markdown
    [Link text](https://example.com)
    [Link with title](https://example.com "Title text")
    ```
    
    ### Open in New Tab
    Prefix URL with `tab:`:
    ```markdown
    [External link](tab:https://example.com)
    ```
    
    ### Heading Anchors
    Headings automatically get slugified IDs:
    ```markdown
    ## My Section Title
    ```
    Links to: `#my-section-title`
    
    ## Typography
    
    Automatic replacements:
    - `(c)` → ©
    - `(C)` → ©
    - `(r)` → ®
    - `(R)` → ®
    - `(tm)` → ™
    - `(TM)` → ™
    - `(p)` → ℗
    - `(P)` → ℗
    - `+-` → ±
    
    ## Raw HTML
    
    HTML is supported directly in Markdown:
    
    ```html
    <div class="custom-class" style="text-align: center;">
      <p>Centered content with custom styling</p>
    </div>
    ```
    
    **Note:** `<script>`, `<object>`, `<embed>`, `<form>` are stripped for free accounts. Iframes are whitelisted (YouTube, Vimeo, Spotify, etc.).
    
    ## Whitelisted Iframe Sources
    
    - youtube.com, youtube-nocookie.com
    - vimeo.com
    - soundcloud.com
    - spotify.com
    - codepen.io
    - google.com (docs, drive, maps)
    - bandcamp.com
    - apple.com (music embeds)
    - archive.org
    - And more...
    
    ## Dashboard URLs
    
    Replace `<subdomain>` with your blog subdomain:
    
    - **Blog list:** `https://bearblog.dev/dashboard/`
    - **Dashboard:** `https://bearblog.dev/<subdomain>/dashboard/`
    - **Posts list:** `https://bearblog.dev/<subdomain>/dashboard/posts/`
    - **New post:** `https://bearblog.dev/<subdomain>/dashboard/posts/new/`
    - **Edit post:** `https://bearblog.dev/<subdomain>/dashboard/posts/<uid>/`
    - **Styles:** `https://bearblog.dev/<subdomain>/dashboard/styles/`
    - **Navigation:** `https://bearblog.dev/<subdomain>/dashboard/nav/`
    - **Analytics:** `https://bearblog.dev/<subdomain>/dashboard/analytics/`
    - **Settings:** `https://bearblog.dev/<subdomain>/dashboard/settings/`
    
    ## Example: Complete Post
    
    **Header content:**
    ```
    title: Getting Started with AI Assistants
    link: ai-assistants-intro
    published_date: 2026-01-05 15:00
    meta_description: A beginner's guide to working with AI assistants
    tags: ai, tutorial, tech
    is_page: false
    lang: en
    ```
    
    **Body content:**
    ```markdown
    AI assistants are changing how we work. Here's what you need to know.
    
    ## Why AI Assistants?
    
    They help with:
    - [x] Writing and editing
    - [x] Research and analysis
    - [ ] Making coffee (not yet!)
    
    > "The best tool is the one you actually use." — Someone wise
    
    ## Getting Started
    
    Check out [OpenAI](tab:https://openai.com) or [Anthropic](tab:https://anthropic.com) for popular options.
    
    ---
    
    *What's your experience with AI? Let me know!*
    
    {{ previous_post }} {{ next_post }}
    ```
    
    ## Tips
    
    1. **Preview before publishing** — Use the preview button to check formatting
    2. **Use templates** — Set up a post template in dashboard settings for consistent headers
    3. **Schedule posts** — Set `published_date` in the future
    4. **Draft mode** — Don't click publish to keep as draft
    5. **Custom CSS** — Add `class_name` and style in your blog's CSS
    6. **SEO** — Always set `meta_description` and `meta_image`
    
    ## Troubleshooting
    
    - **Post not showing?** Check `publish` status and `published_date`
    - **Tags not working?** Use comma separation, no quotes
    - **Styling issues?** Check `class_name` is slugified (lowercase, hyphens)
    - **Date format error?** Use `YYYY-MM-DD HH:MM`
    \n- Block: `$\\int_0^\\infty e^{-x^2} dx$`\n\n### Abbreviations\n```markdown\n*[HTML]: Hypertext Markup Language\nThe HTML specification is maintained by the W3C.\n```\n\n### Admonitions\n```markdown\n.. note::\n This is a note admonition.\n\n.. warning::\n This is a warning.\n```\n\n### Table of Contents\n```markdown\n.. toc::\n```\n\n## Dynamic Variables\n\nUse `{{ variable }}` in your content:\n\n### Blog Variables\n- `{{ blog_title }}` — Blog title\n- `{{ blog_description }}` — Blog meta description\n- `{{ blog_created_date }}` — Blog creation date\n- `{{ blog_last_modified }}` — Time since last modification\n- `{{ blog_last_posted }}` — Time since last post\n- `{{ blog_link }}` — Full blog URL\n- `{{ tags }}` — Rendered tag list with links\n\n### Post Variables (in post templates)\n- `{{ post_title }}` — Current post title\n- `{{ post_description }}` — Post meta description\n- `{{ post_published_date }}` — Publication date\n- `{{ post_last_modified }}` — Time since modification\n- `{{ post_link }}` — Full post URL\n- `{{ next_post }}` — Link to next post\n- `{{ previous_post }}` — Link to previous post\n\n### Post Listing\n```markdown\n{{ posts }}\n{{ posts limit:5 }}\n{{ posts tag:\"tech\" }}\n{{ posts tag:\"tech,ai\" limit:10 order:asc }}\n{{ posts description:True image:True content:True }}\n```\n\nParameters:\n- `tag:` — filter by tag(s), comma-separated\n- `limit:` — max number of posts\n- `order:` — `asc` or `desc` (default: desc)\n- `description:True` — show meta descriptions\n- `image:True` — show meta images\n- `content:True` — show full content (only on pages)\n\n### Email Signup (upgraded blogs only)\n```markdown\n{{ email-signup }}\n{{ email_signup }}\n```\n\n## Links\n\n### Standard Links\n```markdown\n[Link text](https://example.com)\n[Link with title](https://example.com \"Title text\")\n```\n\n### Open in New Tab\nPrefix URL with `tab:`:\n```markdown\n[External link](tab:https://example.com)\n```\n\n### Heading Anchors\nHeadings automatically get slugified IDs:\n```markdown\n## My Section Title\n```\nLinks to: `#my-section-title`\n\n## Typography\n\nAutomatic replacements:\n- `(c)` → ©\n- `(C)` → ©\n- `(r)` → ®\n- `(R)` → ®\n- `(tm)` → ™\n- `(TM)` → ™\n- `(p)` → ℗\n- `(P)` → ℗\n- `+-` → ±\n\n## Raw HTML\n\nHTML is supported directly in Markdown:\n\n```html\n\u003cdiv class=\"custom-class\" style=\"text-align: center;\">\n \u003cp>Centered content with custom styling\u003c/p>\n\u003c/div>\n```\n\n**Note:** `\u003cscript>`, `\u003cobject>`, `\u003cembed>`, `\u003cform>` are stripped for free accounts. Iframes are whitelisted (YouTube, Vimeo, Spotify, etc.).\n\n## Whitelisted Iframe Sources\n\n- youtube.com, youtube-nocookie.com\n- vimeo.com\n- soundcloud.com\n- spotify.com\n- codepen.io\n- google.com (docs, drive, maps)\n- bandcamp.com\n- apple.com (music embeds)\n- archive.org\n- And more...\n\n## Dashboard URLs\n\nReplace `\u003csubdomain>` with your blog subdomain:\n\n- **Blog list:** `https://bearblog.dev/dashboard/`\n- **Dashboard:** `https://bearblog.dev/\u003csubdomain>/dashboard/`\n- **Posts list:** `https://bearblog.dev/\u003csubdomain>/dashboard/posts/`\n- **New post:** `https://bearblog.dev/\u003csubdomain>/dashboard/posts/new/`\n- **Edit post:** `https://bearblog.dev/\u003csubdomain>/dashboard/posts/\u003cuid>/`\n- **Styles:** `https://bearblog.dev/\u003csubdomain>/dashboard/styles/`\n- **Navigation:** `https://bearblog.dev/\u003csubdomain>/dashboard/nav/`\n- **Analytics:** `https://bearblog.dev/\u003csubdomain>/dashboard/analytics/`\n- **Settings:** `https://bearblog.dev/\u003csubdomain>/dashboard/settings/`\n\n## Example: Complete Post\n\n**Header content:**\n```\ntitle: Getting Started with AI Assistants\nlink: ai-assistants-intro\npublished_date: 2026-01-05 15:00\nmeta_description: A beginner's guide to working with AI assistants\ntags: ai, tutorial, tech\nis_page: false\nlang: en\n```\n\n**Body content:**\n```markdown\nAI assistants are changing how we work. Here's what you need to know.\n\n## Why AI Assistants?\n\nThey help with:\n- [x] Writing and editing\n- [x] Research and analysis\n- [ ] Making coffee (not yet!)\n\n> \"The best tool is the one you actually use.\" — Someone wise\n\n## Getting Started\n\nCheck out [OpenAI](tab:https://openai.com) or [Anthropic](tab:https://anthropic.com) for popular options.\n\n---\n\n*What's your experience with AI? Let me know!*\n\n{{ previous_post }} {{ next_post }}\n```\n\n## Tips\n\n1. **Preview before publishing** — Use the preview button to check formatting\n2. **Use templates** — Set up a post template in dashboard settings for consistent headers\n3. **Schedule posts** — Set `published_date` in the future\n4. **Draft mode** — Don't click publish to keep as draft\n5. **Custom CSS** — Add `class_name` and style in your blog's CSS\n6. **SEO** — Always set `meta_description` and `meta_image`\n\n## Troubleshooting\n\n- **Post not showing?** Check `publish` status and `published_date`\n- **Tags not working?** Use comma separation, no quotes\n- **Styling issues?** Check `class_name` is slugified (lowercase, hyphens)\n- **Date format error?** Use `YYYY-MM-DD HH:MM`","Plugin_Install_Column":"","Plugin_Config_Column":"","Plugin_Readme_Column":""},"similar":[{"slug":"catholic-grounding-p26e7i","category":"General","URL":"https://openclawdir.com/skills/catholic-grounding-p26e7i","Type":"Skill","Title":"catholic-grounding","Description":"Help answer questions about Catholicism accurately","GitHub_Link":"https://github.com/trevortomesh"},{"slug":"budget-variance-analyzer-mhjee5","category":"General","URL":"https://openclawdir.com/skills/budget-variance-analyzer-mhjee5","Type":"Skill","Title":"budget-variance-analyzer","Description":"Analyze budget vs actual","GitHub_Link":"https://github.com/datadrivenconstruction"},{"slug":"arbiter-ccv7p2","category":"General","URL":"https://openclawdir.com/skills/arbiter-ccv7p2","Type":"Skill","Title":"arbiter","Description":"Push decisions to Arbiter Zebu for async human review.","GitHub_Link":"https://github.com/5hanth"},{"slug":"agentskills-io-rbgb0x","category":"General","URL":"https://openclawdir.com/skills/agentskills-io-rbgb0x","Type":"Skill","Title":"agentskills-io","Description":"Create, validate, and publish Agent Skills following","GitHub_Link":"https://github.com/killerapp"}]}