一键导入
self-improvement
PCP's autonomous capability acquisition system - detect, assess, and acquire missing capabilities
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
PCP's autonomous capability acquisition system - detect, assess, and acquire missing capabilities
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
brief, summary, daily, weekly, end of day, EOD, digest, morning, recap, meeting prep, what's due, status update, review
Interactive web tasks, browser login, click, scroll, form interaction, authenticated sessions, Playwright MCP (project)
Query and summarize Claude Code terminal session history
Email, inbox, Outlook, Microsoft 365, mail, messages, fetch emails, search emails, draft, reply, email processing (project)
fact, decision, architecture, knowledge, permanent, remember forever, always know, decisions, outcomes, lessons learned
GitHub CLI, docker commands, git operations, curl, native CLI tools, gh issue, gh pr, container, repository, API calls (project)
| name | self-improvement |
| description | PCP's autonomous capability acquisition system - detect, assess, and acquire missing capabilities |
| triggers | ["can't do","don't know how","missing capability","need a tool","install","capability gap","self-improve","acquire capability","missing module","command not found"] |
This skill enables PCP to autonomously detect and acquire missing capabilities. When you encounter something you can't do (missing package, tool, or integration), use this system to:
Use this system when:
ModuleNotFoundError, ImportError)command not found)from self_improvement import detect_capability_gap, CapabilityGapError
# From error message
gap = detect_capability_gap(
task_description="Transcribe audio file",
error_message="ModuleNotFoundError: No module named 'whisper'",
file_path="/path/to/audio.mp3"
)
if gap:
print(f"Gap detected: {gap.gap_description}")
print(f"Type: {gap.gap_type}")
print(f"Solutions: {gap.suggested_solutions}")
from self_improvement import assess_risk, RiskLevel
assessment = assess_risk(gap)
print(f"Risk Level: {assessment.level}") # LOW, MEDIUM, HIGH, CRITICAL
print(f"Score: {assessment.score}") # 0.0 to 1.0
print(f"Requires Approval: {assessment.requires_approval}")
print(f"Requires Credentials: {assessment.requires_credentials}")
| Level | Score | Action |
|---|---|---|
| LOW | 0.0-0.25 | Auto-acquire |
| MEDIUM | 0.25-0.50 | Acquire + notify |
| HIGH | 0.50-0.75 | Ask first |
| CRITICAL | 0.75-1.0 | Explicit approval |
from self_improvement import acquire_capability
# Automatic acquisition (for low/medium risk)
result = acquire_capability(gap)
if result.success:
print(f"Acquired via: {result.method}")
print(f"Skill created: {result.skill_created}")
else:
if result.user_action_required:
# Need to ask user
print(f"User input needed: {result.user_action_required}")
else:
print(f"Failed: {result.error}")
# For service integrations requiring API keys
result = acquire_capability(
gap,
credentials={
"SLACK_BOT_TOKEN": "xoxb-..."
}
)
Wrap any function to automatically handle capability gaps:
from self_improvement import execute_with_self_improvement
def transcribe_audio(path):
import whisper # May not be installed
model = whisper.load_model("base")
return model.transcribe(path)
# This will:
# 1. Try to run the function
# 2. Detect the missing whisper package
# 3. Install it automatically (low risk)
# 4. Retry the function
result = execute_with_self_improvement(
transcribe_audio,
"/path/to/audio.mp3",
task_description="Transcribe audio file"
)
from self_improvement import self_improving
@self_improving(task_description="Process video files")
def extract_audio(video_path):
import subprocess
subprocess.run(["ffmpeg", "-i", video_path, "output.mp3"], check=True)
# If ffmpeg is missing, it will be installed automatically
extract_audio("/path/to/video.mp4")
When you detect a missing capability proactively:
from self_improvement import raise_capability_gap
def send_to_slack(channel, message):
import os
if not os.environ.get("SLACK_BOT_TOKEN"):
raise_capability_gap(
gap_type="service_integration",
description="Slack API access",
task="Send Slack message",
pattern="slack_integration" # Uses predefined pattern
)
# ... proceed with Slack API
The system has built-in patterns for common capabilities:
audio_transcription - Whisper for audio filesvideo_processing - FFmpeg for video filesnotion_integration - Notion APIslack_integration - Slack APIjira_integration - Jira/Atlassianaws_access - AWS (boto3, credentials)gcp_access - Google Cloudoracle_cloud_access - Oracle Cloudopenai_api - OpenAI APImissing_cli_tool - Dynamic detectionAll capability gaps are logged to the database:
from self_improvement.capability_detector import (
get_gap_statistics,
get_gaps_by_status
)
# Get statistics
stats = get_gap_statistics()
print(f"Total gaps: {stats['total']}")
print(f"Resolution rate: {stats['resolution_rate']:.1%}")
# Get pending gaps
pending = get_gaps_by_status("user_pending")
for gap in pending:
print(f"- {gap['gap_description']}: {gap['status']}")
# Initialize the database table
python -m self_improvement.capability_detector init
# Detect a gap
python -m self_improvement.capability_detector detect \
--task "Transcribe audio" \
--error "No module named 'whisper'"
# List gaps by status
python -m self_improvement.capability_detector list --status detected
# Get statistics
python -m self_improvement.capability_detector stats
# Assess risk for a pattern
python -m self_improvement.risk_assessor --pattern audio_transcription
# Acquire a capability
python -m self_improvement.capability_acquirer acquire --pattern audio_transcription
The self-improvement system integrates with the weekly reflection:
from self_improvement import (
detect_capability_gap,
assess_risk,
acquire_capability,
RiskLevel
)
def process_request(task, error=None, file_path=None):
"""Complete self-improvement flow."""
# 1. Detect gap
gap = detect_capability_gap(
task_description=task,
error_message=error or "",
file_path=file_path or ""
)
if not gap:
return {"status": "no_gap_detected"}
# 2. Assess risk
assessment = assess_risk(gap)
# 3. Handle based on risk level
if assessment.level in (RiskLevel.LOW, RiskLevel.MEDIUM):
# Auto-acquire
result = acquire_capability(gap)
if result.success:
return {
"status": "acquired",
"method": result.method,
"skill": result.skill_created
}
else:
return {
"status": "failed",
"error": result.error
}
else:
# Need user approval
return {
"status": "approval_needed",
"risk": assessment.level.value,
"recommendation": assessment.recommendation,
"required_inputs": assessment.requires_credentials
}
Created: 2026-02-01 System: Self-Improvement v1.0