
Confluence
- 167 installs
- 12 repo stars
- Updated August 4, 2026
- odyssey4me/agent-skills
Read, search, and update Confluence pages from agents so specs, runbooks, and meeting notes stay synchronized with code changes and ticket workflows.
About
confluence from odyssey4me/agent-skills enables agents to interact with Atlassian Confluence: querying spaces, fetching page content, and publishing updates so engineering and PM artifacts remain current. It supports SaaS teams and agent workflows that treat Confluence as the system of record for requirements and runbooks.
- Confluence page search
- Create and update pages
- Space and permission awareness
- Agent-readable knowledge base
- PM spec synchronization
Confluence by the numbers
- 167 all-time installs (skills.sh)
- +1 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #551 of 1,879 Documentation skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/odyssey4me/agent-skills --skill confluenceAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 167 |
|---|---|
| repo stars | ★ 12 |
| Last updated | August 4, 2026 |
| Repository | odyssey4me/agent-skills ↗ |
What it does
Read, search, and update Confluence pages from agents so specs, runbooks, and meeting notes stay synchronized with code changes and ticket workflows.
Files
Confluence
Interact with Confluence for content search, viewing pages, and space management.
Creating/Updating Content? See references/creating-content.md for page creation and updates with Markdown.
Installation
Dependencies: pip install --user requests keyring pyyaml
Setup Verification
After installation, verify the skill is properly configured:
$SKILL_DIR/scripts/confluence.py checkThis will check:
- Python dependencies (requests, keyring, pyyaml)
- Authentication configuration
- Connectivity to Confluence
- Deployment type detection (Cloud vs Data Center/Server)
If anything is missing, the check command will provide setup instructions.
Authentication
Configure Confluence authentication using one of these methods:
Option 1: Environment Variables (Recommended)
export CONFLUENCE_URL="https://yourcompany.atlassian.net/wiki"
export CONFLUENCE_EMAIL="you@example.com"
export CONFLUENCE_API_TOKEN="your-token"Add these to your ~/.bashrc or ~/.zshrc for persistence.
Option 2: Config File
Create ~/.config/agent-skills/confluence.yaml:
url: https://yourcompany.atlassian.net/wiki
email: you@example.com
token: your-tokenRequired Credentials
- URL: Your Confluence instance URL
- Cloud:
https://yourcompany.atlassian.net/wiki - DC/Server:
https://confluence.yourcompany.com - Email: Your account email (required for Cloud)
- API Token: Create at https://id.atlassian.com/manage-profile/security/api-tokens (Cloud) or from your Confluence profile (DC/Server)
Configuration Defaults
Optionally configure defaults in ~/.config/agent-skills/confluence.yaml to reduce repetitive typing:
# Authentication (optional if using environment variables)
url: https://yourcompany.atlassian.net/wiki
email: you@example.com
token: your-token
# Optional defaults
defaults:
cql_scope: "space = DEMO"
max_results: 25
default_space: "DEMO"How Defaults Work
- CLI arguments always override config defaults
- CQL scope is prepended to all searches:
(scope) AND (your_query) - Default space is used when space parameter is omitted
View Configuration
# Show all configuration
$SKILL_DIR/scripts/confluence.py config show
# Show space-specific defaults
$SKILL_DIR/scripts/confluence.py config show --space DEMOCommands
See permissions.md for read/write classification of each command.
check
Verify configuration and connectivity.
$SKILL_DIR/scripts/confluence.py checkThis validates:
- Python dependencies are installed
- Authentication is configured
- Can connect to Confluence
- Deployment type (Cloud vs DC/Server) is detected correctly
search
Search for content using CQL (Confluence Query Language).
# Basic search
$SKILL_DIR/scripts/confluence.py search "type=page AND space = DEMO"
$SKILL_DIR/scripts/confluence.py search "title~login" --space DEMO
# Filter by type
$SKILL_DIR/scripts/confluence.py search "space = DEMO" --type page
# Limit results
$SKILL_DIR/scripts/confluence.py search "type=page" --max-results 10Arguments:
cql: CQL query string (required)--max-results: Maximum number of results (default: 50)--type: Content type filter (page, blogpost, comment)--space: Limit to specific space
See also: CQL Reference for query syntax
page get
Get page content by ID or title.
# Get by title (returns Markdown by default)
$SKILL_DIR/scripts/confluence.py page get "My Page Title"
# Get by ID
$SKILL_DIR/scripts/confluence.py page get 123456
# Get without body content
$SKILL_DIR/scripts/confluence.py page get "My Page" --no-body
# Get in original format (not Markdown)
$SKILL_DIR/scripts/confluence.py page get "My Page" --raw
# Export with YAML frontmatter (for round-tripping)
$SKILL_DIR/scripts/confluence.py page get 123456 --frontmatter > page.mdOutput: By default, displays page metadata and body content converted to Markdown for readability.
Arguments:
page_identifier: Page ID or title (required)--markdown: Output body as Markdown (default)--raw: Output in original format--no-body: Don't include body content--frontmatter: Output as markdown with YAML frontmatter (title, space, labels, parent) for round-tripping withpage create/page update
Example Output
$ $SKILL_DIR/scripts/confluence.py page get "API Documentation"
Page ID: 123456
Title: API Documentation
Type: page
Space: DEMO
Status: current
Version: 1
---
# API Documentation
## Overview
This document describes our **REST API**.
## Endpoints
- `GET /api/users` - List users
- `POST /api/users` - Create userpage create / update
For creating and updating pages with Markdown support, see references/creating-content.md.
Quick examples:
# Create page from Markdown file
$SKILL_DIR/scripts/confluence.py page create --space DEMO --title "Documentation" \
--body-file README.md
# Create page with table of contents
$SKILL_DIR/scripts/confluence.py page create --space DEMO --title "Guide" \
--body-file guide.md --toc
# Update page from file
$SKILL_DIR/scripts/confluence.py page update 123456 --body-file updated.mdFrontmatter support: Markdown files can include YAML frontmatter with page metadata. CLI flags take precedence over frontmatter values. Supported fields: title, space, labels, parent, toc.
---
title: API Documentation
space: DEMO
labels: docs, api
parent: 123456
toc: true
---
# Introduction
...Table of contents: Use --toc (or toc: true in frontmatter) to prepend a TOC macro.
Internal link conversion: Links pointing to pages on the same Confluence instance are automatically converted to native Confluence links during markdown conversion. The linked page is validated before conversion — invalid links are left as-is.
page move
Move a page under a new parent, or to the space root.
# Move under a new parent
$SKILL_DIR/scripts/confluence.py page move 123456 --parent 789012
# Move to space root (no parent)
$SKILL_DIR/scripts/confluence.py page move 123456page delete
Delete a page by ID (moves to trash on Cloud).
$SKILL_DIR/scripts/confluence.py page delete 123456space
Manage spaces.
# List all spaces
$SKILL_DIR/scripts/confluence.py space list
# List with limit
$SKILL_DIR/scripts/confluence.py space list --max-results 10
# Filter by type
$SKILL_DIR/scripts/confluence.py space list --type global
# Get space details
$SKILL_DIR/scripts/confluence.py space get DEMOArguments:
list: List spaces--type: Filter by type (global, personal)--max-results: Maximum resultsget <space-key>: Get space details
For creating spaces, see references/creating-content.md.
space permissions
View, add, and remove space permissions.
# List all permissions for a space
$SKILL_DIR/scripts/confluence.py space permissions list DEMO
# Filter by subject type
$SKILL_DIR/scripts/confluence.py space permissions list DEMO --subject-type group
# Add a permission
$SKILL_DIR/scripts/confluence.py space permissions add DEMO \
--subject-type user --subject "5a1234abc" --operation read --target space
# Remove a permission by ID
$SKILL_DIR/scripts/confluence.py space permissions remove DEMO --id 2154Arguments:
list <space-key>: List permissions--subject-type: Filter by user or groupadd <space-key>: Add a permission--subject-type: user or group (required)--subject: User account ID or group name/ID (required)--operation: read, create, delete, export, administer, archive, restrict_content (required)--target: space, page, blogpost, comment, attachment (required)remove <space-key>: Remove a permission--id: Permission ID (required)
config
Show configuration and defaults.
# Show all configuration
$SKILL_DIR/scripts/confluence.py config show
# Show space-specific defaults
$SKILL_DIR/scripts/confluence.py config show --space DEMOThis displays:
- Authentication settings (with masked token)
- Default CQL scope, max results, and default space
- Space-specific defaults for parent pages and labels
Examples
Search for Pages
# Find pages in a space
$SKILL_DIR/scripts/confluence.py search "type=page AND space = DEMO"
# Search by title
$SKILL_DIR/scripts/confluence.py search "title~login"
# Find recent pages
$SKILL_DIR/scripts/confluence.py search "type=page AND created >= now('-7d')"View Page Content
# View page as Markdown
$SKILL_DIR/scripts/confluence.py page get "My Page Title"
# View page metadata only
$SKILL_DIR/scripts/confluence.py page get 123456 --no-body
# Export to file
$SKILL_DIR/scripts/confluence.py page get "My Page" > exported-page.mdList and Explore Spaces
# List all spaces
$SKILL_DIR/scripts/confluence.py space list
# Get details about a space
$SKILL_DIR/scripts/confluence.py space get DEMOUsing Configuration Defaults
With defaults configured as shown in the Configuration Defaults section:
# Search uses CQL scope automatically
$SKILL_DIR/scripts/confluence.py search "type=page"
# Becomes: (space = DEMO) AND (type=page)
# Search with automatic max_results from config
$SKILL_DIR/scripts/confluence.py search "status=current"
# Uses configured max_results (25) automatically
# Override defaults when needed
$SKILL_DIR/scripts/confluence.py search "type=page" --max-results 100
# CLI argument overrides the configured default of 25CQL Reference
Common CQL (Confluence Query Language) queries:
| Query | Description |
|---|---|
type = page | All pages |
type = blogpost | All blog posts |
space = DEMO | Content in DEMO space |
title ~ "login" | Title contains "login" |
text ~ "API" | Body text contains "API" |
created >= now("-7d") | Created in last 7 days |
lastmodified >= startOfDay() | Modified today |
creator = currentUser() | Created by you |
contributor = "username" | User contributed |
label = "important" | Has "important" label |
Combine with AND, OR, and use ORDER BY for sorting:
$SKILL_DIR/scripts/confluence.py search "type=page AND space=DEMO AND created >= now('-30d') ORDER BY created DESC"Model Guidance
This skill makes API calls requiring structured input/output. A standard-capability model is recommended.
Troubleshooting
Check command fails
Run $SKILL_DIR/scripts/confluence.py check to diagnose issues. It will provide specific error messages and setup instructions.
Authentication failed
1. Verify your API token is correct 2. Ensure you're using your email (not username) for Cloud instances 3. For Cloud, use your Atlassian account email 4. For Data Center/Server, you may need username/password or Bearer token
Permission denied
You may not have access to the requested space or page. Contact your Confluence administrator.
CQL syntax error
Test your CQL query in the Confluence web interface search before using it in the CLI.
Page not found
When searching by title, ensure the title is exact (case-sensitive). You can use:
- Exact title:
$SKILL_DIR/scripts/confluence.py page get "Exact Page Title" - Page ID:
$SKILL_DIR/scripts/confluence.py page get 123456
Import errors
Ensure dependencies are installed:
pip install --user requests keyring pyyamlCloud vs Data Center/Server
The skill automatically detects your Confluence deployment type and adapts:
- Cloud (atlassian.net): Uses
/wiki/rest/apiand editor format (ADF) - Data Center/Server: Uses
/rest/apiand storage format (XHTML)
When reading pages, content is automatically converted to Markdown for display regardless of deployment type.
Creating and Updating Confluence Content
This guide covers creating and updating Confluence pages using Markdown.
Note: Most users primarily read from Confluence. For basic usage (search, viewing pages, listing spaces), see the main SKILL.md.
Markdown Support
The Confluence skill uses Markdown as the default format for page content, making it easy to create and read pages.
Supported Markdown Features
- Headers:
#through###### - Bold:
**text**or__text__ - Italic:
*text*or_text_ - Code: \
inline code\ - Code blocks: \
\\language ... \\\ - Lists: Unordered (
-or*) and ordered (1.) - Links:
[text](url)
Format Conversion
The skill automatically converts between formats:
- Cloud instances: Markdown → ADF (Atlassian Document Format)
- DC/Server instances: Markdown → Storage format (XHTML)
- Reading: Storage/ADF → Markdown (for display)
You can override the automatic format with --format:
# Use storage format directly
python confluence.py page create --space DEMO --title "Page" \
--body "<p>HTML content</p>" --format storage
# Use editor format (ADF) directly
python confluence.py page create --space DEMO --title "Page" \
--body '{"type":"doc","content":[...]}' --format editorCreating Pages
Basic Page Creation
# Create page with inline Markdown
python confluence.py page create --space DEMO --title "New Page" \
--body "# Heading\n\nThis is **bold** text."
# Create from Markdown file
python confluence.py page create --space DEMO --title "Documentation" \
--body-file README.md
# Create with parent page
python confluence.py page create --space DEMO --title "Child Page" \
--body "Content here" --parent 123456
# Create with labels
python confluence.py page create --space DEMO --title "Tagged Page" \
--body "Content" --labels "important,draft"Arguments:
--space: Space key (required)--title: Page title (required)--body: Page content (Markdown by default)--body-file: Read content from file (Markdown)--format: Input format -markdown(default),storage,editor--parent: Parent page ID for hierarchy--labels: Comma-separated labels--json: Output as JSON
Example: Creating Rich Content
python confluence.py page create --space DEMO --title "API Documentation" --body "
# API Documentation
## Overview
This document describes our **REST API**.
## Endpoints
- \`GET /api/users\` - List users
- \`POST /api/users\` - Create user
## Example
\`\`\`python
import requests
response = requests.get('https://api.example.com/users')
\`\`\`
See [official docs](https://docs.example.com) for more.
"Creating from Markdown Files
# Use existing README as Confluence page
python confluence.py page create --space DEMO --title "Project README" \
--body-file README.mdUpdating Pages
Basic Updates
# Update page content
python confluence.py page update 123456 --body "# Updated\n\nNew content"
# Update from file
python confluence.py page update 123456 --body-file updated.md
# Update title only
python confluence.py page update 123456 --title "New Title"
# Update with specific version (prevents conflicts)
python confluence.py page update 123456 --body "Content" --version 5
# Update using storage format
python confluence.py page update 123456 --body "<p>HTML</p>" --format storageArguments:
page_id: Page ID to update (required)--title: New title--body: New content (Markdown by default)--body-file: Read content from file (Markdown)--format: Input format -markdown(default),storage,editor--version: Current version number (auto-detected if not provided)--json: Output as JSON
Note: Version is auto-detected, but you can specify it to ensure you're updating the correct version.
Handling Version Conflicts
If you get a version conflict when updating, the page was modified since you last viewed it. Get the latest version:
# Get current version
python confluence.py page get 123456 --no-body
# Update with correct version
python confluence.py page update 123456 --body "Content" --version 5Or let the tool auto-detect the version:
python confluence.py page update 123456 --body "Content"Creating Spaces
# Create new space
python confluence.py space create --key PROJ --name "Project Space"
# Create with description
python confluence.py space create --key PROJ --name "Project Space" \
--description "Documentation for the project"
# JSON output
python confluence.py space create --key PROJ --name "Project" --jsonArguments:
--key: Space key (required)--name: Space name (required)--description: Space description--type: Space type (global, personal)--json: Output as JSON
Advanced Examples
Batch Page Creation
#!/bin/bash
# Create multiple pages from a directory
SPACE="DOCS"
PARENT="123456"
for file in docs/*.md; do
title=$(basename "$file" .md)
python confluence.py page create \
--space "$SPACE" \
--title "$title" \
--body-file "$file" \
--parent "$PARENT"
doneCreate Documentation from Files
# Create main page
python confluence.py page create --space DOCS --title "Main Documentation" \
--body-file README.md
# Create sub-pages
python confluence.py page create --space DOCS --title "API Reference" \
--body-file docs/api.md --parent 123456
python confluence.py page create --space DOCS --title "Installation Guide" \
--body-file docs/install.md --parent 123456Update Existing Page
# Update from file
python confluence.py page update 123456 --body-file updated-docs.md
# Update title
python confluence.py page update 123456 --title "Updated Title"
# Update both
python confluence.py page update 123456 --title "New Title" --body-file content.mdConfiguration Defaults for Page Creation
Optionally configure space-specific defaults in ~/.config/agent-skills/confluence.yaml:
# Optional space-specific defaults
spaces:
DEMO:
default_parent: "123456" # Parent page ID
default_labels: ["auto-created"]
PROD:
default_parent: "789012"When creating pages in configured spaces, these defaults are automatically applied:
# Create page uses space defaults
python confluence.py page create --space DEMO --title "New Page" --body "Content"
# Automatically uses default_parent and default_labels from DEMO space defaultsCloud vs Data Center/Server
The skill automatically detects your Confluence deployment type and adapts:
- Cloud (atlassian.net): Uses
/wiki/rest/apiand editor format (ADF) - Data Center/Server: Uses
/rest/apiand storage format (XHTML)
Markdown conversion works seamlessly on both:
- Your Markdown input → Appropriate format for your deployment
- API responses → Converted to Markdown for display
You don't need to worry about the internal formats unless you want to use --format storage or --format editor explicitly.
Command Permissions
This reference classifies commands by access level to help agents enforce appropriate permission controls.
- read: Safe to execute without user confirmation. These commands
only retrieve or display information.
- write: Requires user confirmation before execution. These
commands create, modify, or delete data.
| Command | Access | Description |
|---|---|---|
| check | read | Verify setup and connectivity |
| search | read | Search pages with CQL |
| page get | read | Get page content |
| page create | write | Create a new page |
| page update | write | Update page content |
| space list | read | List spaces |
| space get | read | Get space details |
| config show | read | Show configuration |
{
"name": "odyssey4me/confluence",
"version": "1.0.0",
"private": false,
"summary": "Search and manage Confluence pages and spaces using CQL, read/create/update pages with Markdown support. Use when working with Confluence documentation.",
"skills": {
"confluence": {
"path": "SKILL.md"
}
}
}