Test plugin
This plugin is not yet in any themed marketplace. To install it, you'll need to add it from GitHub directly.
Choose your preferred installation method below
A marketplace is a collection of plugins. Every plugin gets an auto-generated marketplace JSON for individual installation, plus inclusion in category and themed collections. Add a marketplace once (step 1), then install any plugin from it (step 2).
One-time setup for access to all plugins
When to use: If you plan to install multiple plugins now or later
Step 1: Add the marketplace (one-time)
/plugin marketplace add https://claudepluginhub.com/marketplaces/all.json
Run this once to access all plugins
Step 2: Install this plugin
/plugin install test-plugin@all
Use this plugin's auto-generated marketplace JSON for individual installation
When to use: If you only want to try this specific plugin
Step 1: Add this plugin's marketplace
/plugin marketplace add https://claudepluginhub.com/marketplaces/plugins/test-plugin.json
Step 2: Install the plugin
/plugin install test-plugin@test-plugin
Aircana is a CLI for generating Claude Code plugins with specialized knowledge bases. Each knowledge base provides curated documentation synced from Confluence (label-based) or web URLs, yielding more relevant, predictable, and project-specific results than general-purpose AI assistance.
Knowledge bases automatically refresh once daily on session start, keeping content up-to-date without manual intervention. Knowledge sources are tracked in version-controlled manifests, so team members can independently refresh content while keeping actual documentation out of git.
Install the gem:
gem install aircana
Verify installation and dependency setup:
aircana doctor
Create a new Claude Code plugin:
# Create a new plugin directory
mkdir my-plugin
cd my-plugin
# Initialize the plugin
aircana init
# Or initialize with a custom name
aircana init --plugin-name my-custom-plugin
This creates a plugin structure with:
.claude-plugin/plugin.json
- Plugin manifestagents/
- Knowledge base definitionscommands/
- Slash commandshooks/
- Hook configurations (hooks.json)scripts/
1. Create a specialized knowledge base:
aircana kb create
2. Add knowledge sources:
# From Confluence (requires configuration)
aircana kb refresh my-kb
# From web URLs
aircana kb add-url my-kb https://docs.example.com
3. Manage your plugin:
# View plugin information
aircana plugin info
# Update plugin metadata
aircana plugin update
# Bump version
aircana plugin version bump patch
# Validate plugin structure
aircana plugin validate
4. Install plugin in Claude Code:
Follow the Getting Started tutorial to create knowledge bases—Aircana's key differentiator
Configure the Confluence integration and create domain-specific knowledge bases
Use the /ask-expert
command to consult multiple specialized experts
Set up the development workflow with plan, execute, review, and apply-feedback commands
Explore other tools by running aircana --help
This tutorial walks through creating a complete Claude Code plugin with knowledge bases backed by Confluence, then publishing it to a marketplace for team distribution.
gem install aircana
aircana doctor # Verify dependencies
Add to your shell profile (.bashrc
, .zshrc
, etc.):
export CONFLUENCE_BASE_URL="https://your-company.atlassian.net"
export CONFLUENCE_USERNAME="your.email@company.com"
export CONFLUENCE_API_TOKEN="your-generated-token"
To generate a Confluence API token:
Reload your shell: source ~/.zshrc
(or your shell config file)
# Create a new directory for your plugin
mkdir my-team-plugin
cd my-team-plugin
# Initialize the plugin
aircana init --plugin-name my-team
# Verify the structure was created
ls -la
This creates:
.claude-plugin/plugin.json
- Plugin manifest with metadataagents/
- Directory for knowledge base definitionscommands/
- Custom slash commandshooks/hooks.json
- Hook configurationsscripts/
- Hook scripts and utilitiesaircana kb create
You'll be prompted for:
The knowledge base file is created at agents/backend-api.md
with:
In Confluence, label pages you want the knowledge base to access:
backend-api
(must match your knowledge base name)Repeat for all documentation pages relevant to this knowledge base. Aircana will discover pages by label during the refresh process.
Tip: Use a consistent labeling strategy. For example, label all backend documentation with backend-api
, all frontend docs with frontend-expert
, etc.
aircana kb refresh backend-api
This will:
backend-api
agents/backend-api/manifest.json
with source metadataOutput: Knowledge files are created in ~/.claude/skills/backend-api/
Note: The actual knowledge content is stored globally (not in your plugin directory) to avoid version control bloat and potential sensitive information leaks. Only the manifest (source tracking) is version controlled.
You can also add public web documentation to your knowledge base:
aircana kb add-url backend-api https://docs.example.com/api-guide
aircana kb add-url backend-api https://restfulapi.net/rest-architectural-constraints/
This downloads the web page, extracts main content (removes nav/ads/scripts), converts to Markdown, and adds it to the knowledge base.
Refresh to sync web URLs:
aircana kb refresh backend-api
Your knowledge base is now ready! Claude Code will automatically use it when appropriate based on the description. You can also explicitly invoke it:
Ask backend-api to review this API endpoint design
Ask backend-api how to implement authentication
Claude has access to all Confluence pages and web URLs you've synced to the knowledge base.
For detailed instructions on distributing your plugin via Git repositories or Claude Code plugin marketplaces, see the official Claude Code Plugin Marketplaces documentation.
Quick summary:
aircana kb refresh-all
As your Confluence documentation evolves:
# Refresh a specific knowledge base
aircana kb refresh backend-api
# Or refresh all knowledge bases at once
aircana kb refresh-all
Knowledge sources are tracked in agents/<kb-name>/manifest.json
, so team members can independently refresh without manual coordination.
Aircana creates Claude Code plugins - portable, distributable packages that extend Claude Code with custom functionality. Each plugin includes:
Plugins can be shared with teams or published to plugin marketplaces for broader distribution.
The .claude-plugin/plugin.json
file defines plugin metadata:
{
"name": "my-plugin",
"version": "1.0.0",
"description": "Brief plugin description",
"author": {
"name": "Author Name",
"email": "[email protected]",
"url": "https://github.com/author"
},
"homepage": "https://docs.example.com/plugin",
"repository": "https://github.com/author/plugin",
"license": "MIT",
"keywords": ["keyword1", "keyword2"]
}
Optional path overrides (for non-standard layouts):
{
"commands": "./custom/commands/",
"agents": "./custom/skills/",
"hooks": "./config/hooks.json",
"mcpServers": "./mcp-config.json"
}
Aircana creates human-curated knowledge bases that provide Claude Code with domain-specific expertise. Each knowledge base:
Knowledge bases support multiple source types and can be refreshed to pull the latest content. Aircana-generated plugins automatically refresh all knowledge bases once daily on session start via the SessionStart hook, keeping content up-to-date without manual intervention.
To add a Confluence page to a knowledge base, label the desired page in Confluence, then run aircana kb refresh <KB-NAME>
.
Aircana will also pull any Confluence pages labeled with a matching knowledge base name during initial creation (aircana kb create
).
See the Confluence setup guide or run aircana doctor
for instructions on setting up Confluence integration.
In addition to Confluence sources, Aircana allows adding arbitrary public websites to a knowledge base.
Websites are also refreshed when aircana kb refresh <KB-NAME>
is used.
Knowledge bases are stored within the plugin's agents directory. For example:
my-plugin/
├── .claude-plugin/
│ └── plugin.json
├── agents/
│ ├── backend-expert.md
│ └── backend-expert/
│ ├── knowledge/ # (optional, for local KBs)
│ │ ├── API-Design.md
│ │ └── Authentication.md
│ └── manifest.json
├── commands/
│ └── ask-expert.md
├── hooks/
│ └── hooks.json
└── scripts/
├── pre_tool_use.sh
└── session_start.sh
Knowledge base files and manifests are co-located in the plugin's agents/
directory.
Version Control Considerations:
In many cases, adding the actual knowledge base to version control is undesirable because:
Aircana manages a per-knowledge-base manifest.json
file to track knowledge sources without committing the actual content. Team members can refresh knowledge bases using aircana kb refresh
.
For remote knowledge bases, actual content is stored in ~/.claude/skills/<kb-name>/
. For local knowledge bases, content is version-controlled in agents/<kb-name>/knowledge/
and synced to the runtime location.
Aircana uses ERB templates to generate plugin components consistently:
These templates promote best practices and help create effective plugin components without extensive trial and error.
Aircana uses the "Notification" Claude Code hook to send messages to SQS.
At Instructure this means you can easily configure Claude Code to send you slack messages when it needs your attention via Aircana
(Instructions coming soon, send a message if you want help with this)
Design knowledge bases as narrow domain experts, not generalists. More granular knowledge bases with focused content generally perform better than broad, general-purpose ones.
Examples:
✅ Good - Narrow domains:
database-schema-expert
- Database design, migrations, indexing strategiesapi-authentication-expert
- OAuth, JWT, session managementfrontend-styling-expert
- CSS, design systems, responsive layouts❌ Avoid - Too broad:
backend-engineer
- Too many domains, knowledge becomes unfocusedfull-stack-developer
- Overlapping responsibilities with unclear boundariesWhy narrow domains work better:
Tips:
Aircana provides a complete development lifecycle through five integrated slash commands:
stateDiagram-v2
[*] --> Plan: /plan
Plan --> Record: /record
Record --> Execute: /execute
Execute --> Review: /review
Review --> ApplyFeedback: /apply-feedback
ApplyFeedback --> Review: More issues found
ApplyFeedback --> [*]: Satisfied
/plan
- Create strategic implementation plan/record
- Save plan to Jira ticket/execute
- Implement plan and create commit/review
- Adversarial code review with expert feedback/apply-feedback
- Apply review changes and amend commit/plan
- Strategic PlanningCreates a high-level implementation plan by:
The planner focuses on architecture decisions and approach, avoiding exhaustive code implementations.
/record
- Save to JiraRecords your approved plan to a Jira ticket by:
jira
sub-agent for MCP operationsThis creates a traceable link between planning and execution.
/execute
- ImplementationExecutes the strategic plan by:
After commit creation, suggests running /review
.
/review
- Adversarial ReviewConducts comprehensive code review of HEAD commit by:
Explicitly states "Reviewing: " and ends with "Run /apply-feedback".
/apply-feedback
- Apply ChangesApplies code review feedback by:
git commit --amend --no-edit
This preserves the original commit message while incorporating review improvements in a single commit.
# 1. Start planning
/plan
> Specify relevant files: src/api/, spec/api/
# 2. Save plan to ticket
/record PROJ-123
# 3. Execute implementation
/execute PROJ-123
# 4. Review the commit
/review
# 5. Apply feedback
/apply-feedback
To use agent knowledge sync features, you'll need to configure Confluence integration:
Add these to your shell profile (.bashrc
, .zshrc
, etc.):
export CONFLUENCE_BASE_URL="https://your-company.atlassian.net"
export CONFLUENCE_USERNAME="your.email@company.com"
export CONFLUENCE_API_TOKEN="your-generated-token"
To enable SQS notifications for Claude Code events (useful for Slack/Teams integration):
Make sure you have the AWS CLI installed:
# macOS
brew install awscli
# Ubuntu/Debian
apt install awscli
# Configure AWS credentials
aws configure
Add these to your shell profile (.bashrc
, .zshrc
, etc.):
export AIRCANA_SQS_QUEUE_URL="https://sqs.us-east-1.amazonaws.com/your-account/your-queue"
export AIRCANA_SQS_MESSAGE_TEMPLATE='{"channel":"changelog","username":"Aircana","text":"{{message}}"}'
export AWS_REGION="us-east-1"
The message template supports {{message}}
placeholder which gets replaced with the Claude Code notification text.
aircana generate
aircana init
aircana hooks enable notification_sqs
Reload your shell or run source ~/.zshrc
(or your shell config file).
aircana doctor
This will check if Confluence and other integrations are properly configured.
aircana init [DIRECTORY] # Initialize a new plugin (defaults to current directory)
aircana init --plugin-name NAME # Initialize with custom plugin name
aircana plugin info # Display plugin information
aircana plugin update # Update plugin metadata
aircana plugin version # Show current version
aircana plugin version bump [TYPE] # Bump version (major, minor, or patch)
aircana plugin version set # Set specific version
aircana plugin validate # Validate plugin structure
aircana kb create # Create new knowledge base interactively
aircana kb refresh [KB-NAME] # Sync knowledge base from Confluence and web sources
aircana kb refresh-all # Refresh all knowledge bases
aircana kb add-url [KB-NAME] [URL] # Add a web URL to a knowledge base
aircana kb list # List all configured knowledge bases
aircana hooks list # List all available and installed hooks
aircana hooks enable [HOOK] # Enable a specific hook
aircana hooks disable [HOOK] # Disable a specific hook
aircana hooks create # Create custom hook
aircana hooks status # Show hook configuration status
aircana generate # Generate plugin components from templates
aircana doctor # Check system health and dependencies
aircana doctor --verbose # Show detailed dependency information
aircana dump-context [KB-NAME] # View current context for knowledge base
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
Run commands in development with bundle exec exe/aircana <command>
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and the created tag, and push the .gem
file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/westonkd/aircana.
The gem is available as open source under the terms of the MIT License.
0.1.0