Our review
Automatically generates the standard boilerplate for a new BSage skill, including YAML, Python, and test files.
Strengths
- Reduces startup time for creating a new skill
- Provides category-appropriate default configurations (input, process, output, meta)
- Includes a unit test skeleton automatically
Limitations
- Generated code is generic and requires custom implementation
- Does not handle external dependency validation
When you need to quickly scaffold a new BSage skill with a consistent structure.
When modifying an existing skill or when your project does not use the BSage framework.
Security analysis
SafeThis skill is a meta-template generator that creates boilerplate files; it does not execute any system commands, network operations, or destructive actions. The provided examples are static and instructional, with no risk of code injection or exfiltration.
No concerns found
Examples
/skill input/calendar-input/skill process/garden-writer/skill output/git-outputname: skill description: Create a new BSage Skill with standard boilerplate
Skill Command
Generate a new Skill with standard structure and boilerplate.
Usage
/skill <category>/<skill-name>
Example
/skill input/calendar-input
/skill process/garden-writer
/skill output/git-output
/skill meta/skill-builder
What This Does
- Creates skill directory at
skills/<skill-name>/ - Generates skill.yaml with category-appropriate defaults
- Generates skill.py with
execute(context)boilerplate - Creates test file at
bsage/tests/test_skill_<name>.py
Generated Structure
For /skill input/calendar-input:
skills/
└── calendar-input/
├── skill.yaml # Metadata + trigger config
└── skill.py # execute(context) function
bsage/
└── tests/
└── test_skill_calendar_input.py
Generated Files
skills/calendar-input/skill.yaml
name: calendar-input
version: 1.0.0
author: bslab
category: input
is_dangerous: false
entrypoint: skill.py::execute
trigger:
type: cron
schedule: "*/15 * * * *"
rules:
- garden-writer
description: Google Calendar 일정을 2nd Brain으로 수집
skills/calendar-input/skill.py
from __future__ import annotations
async def execute(context):
"""Google Calendar 일정을 수집하여 seed로 저장."""
context.logger.info("calendar_input_start")
creds = await context.credentials.get("google-calendar")
# Skill 내부에서 직접 API 연결 처리
events = await fetch_calendar_events(creds)
await context.garden.write_seed("calendar", {"events": events})
context.logger.info("calendar_input_complete", event_count=len(events))
return {"collected": len(events)}
bsage/tests/test_skill_calendar_input.py
import pytest
from unittest.mock import AsyncMock, MagicMock
@pytest.fixture
def mock_context():
context = MagicMock()
context.logger = MagicMock()
context.credentials = MagicMock()
context.credentials.get = AsyncMock(return_value={"client_id": "test"})
context.garden = AsyncMock()
context.garden.write_seed = AsyncMock()
return context
@pytest.mark.asyncio
async def test_execute_collects_events(mock_context):
from importlib.util import spec_from_file_location, module_from_spec
spec = spec_from_file_location("skill", "skills/calendar-input/skill.py")
module = module_from_spec(spec)
spec.loader.exec_module(module)
result = await module.execute(mock_context)
assert result["collected"] >= 0
mock_context.garden.write_seed.assert_called_once()
Category Templates
InputSkill
category: input
trigger:
type: cron
schedule: "*/15 * * * *"
rules:
- garden-writer
ProcessSkill
category: process
is_dangerous: false # true if external side effects
OutputSkill
category: output
MetaSkill
category: meta
is_dangerous: false
Next Steps
After generation:
- Fill in skill.py implementation
- Update skill.yaml fields (rules, trigger)
- Add test cases for error paths
- Run tests with
/test - Verify Skill loads correctly with SkillLoader
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.