External System Safety Guardrails
This skill provides automatic safety enforcement for all operations involving external project management systems.
⚠️ CRITICAL: Linear Exclusion
DO NOT activate this skill for Linear operations. Linear is CCPM's internal tracking system.
NEVER ask for confirmation when:
- Creating Linear issues
- Updating Linear issue descriptions, status, labels, or assignments
- Adding comments to Linear issues
- Any other Linear MCP operations
This skill ONLY applies to EXTERNAL systems: Jira, Confluence, BitBucket, Slack, etc.
Instructions
⛔ ABSOLUTE RULES - NEVER VIOLATED
Before ANY write operation to EXTERNAL systems (NOT Linear), you MUST follow this confirmation workflow.
1. Detect External System Write Operations
Jira:
- Creating new issues or epics
- Updating issue status or fields
- Posting comments
- Changing assignees or labels
- Transitioning workflow states
Confluence:
- Creating new pages
- Editing existing pages
- Adding comments
- Updating page properties
- Deleting content
BitBucket:
- Creating pull requests
- Posting PR comments
- Approving or declining PRs
- Updating PR metadata
- Merging PRs
Slack:
- Sending messages to channels
- Posting notifications
- Updating channel topics
- Creating new channels
- Direct messages
2. STOP and Display Intent
When you detect a potential write operation:
⚠️ EXTERNAL SYSTEM WRITE DETECTED
System: [Jira/Confluence/BitBucket/Slack]
Operation: [Create/Update/Delete/Post]
Target: [Specific item/location]
Details:
---
[Exact content that will be written/posted]
---
This will modify external systems. Proceed? (yes/no)
3. Wait for Explicit Confirmation
Acceptable confirmations:
- "yes"
- "confirm"
- "proceed"
- "go ahead"
- "do it"
NOT acceptable (require re-confirmation):
- Silence
- "ok" (too ambiguous)
- "sure" (too casual)
- Any other response
4. Only Then Execute
After receiving explicit "yes" or equivalent:
- Execute the operation
- Log what was done
- Provide confirmation of success
- Show link to updated item if available
Examples
Example 1: Jira Status Update
User: "Update Jira ticket ABC-123 to Done"
Claude: ⚠️ EXTERNAL SYSTEM WRITE DETECTED
System: Jira
Operation: Update Status
Target: ABC-123
Details:
---
Status: In Progress → Done
---
This will modify external systems. Proceed? (yes/no)
User: yes
Claude: ✅ Updated Jira ABC-123 status to Done
Link: https://jira.company.com/browse/ABC-123
Example 2: Confluence Page Creation
User: "Create a Confluence page documenting the new API"
Claude: ⚠️ EXTERNAL SYSTEM WRITE DETECTED
System: Confluence
Operation: Create Page
Target: Engineering Space
Details:
---
Title: "New Payment API Documentation"
Parent: API Documentation
Content: [First 200 characters of content...]
---
This will modify external systems. Proceed? (yes/no)
User: no, not yet
Claude: Understood. I won't create the Confluence page. Let me know when you're ready.
Example 3: Slack Notification
User: "Let the team know the feature is deployed"
Claude: ⚠️ EXTERNAL SYSTEM WRITE DETECTED
System: Slack
Operation: Post Message
Target: #engineering channel
Details:
---
Message: "✅ Payment gateway integration deployed to production. All tests passing."
---
This will modify external systems. Proceed? (yes/no)
User: yes
Claude: ✅ Posted message to #engineering
Example 4: Multiple Operations
User: "Update Jira to Done and notify the team on Slack"
Claude: ⚠️ EXTERNAL SYSTEM WRITE DETECTED
I need to perform 2 write operations:
1. Jira - Update Status
Target: ABC-123
Change: In Progress → Done
2. Slack - Post Message
Target: #engineering
Message: "Task ABC-123 completed"
Proceed with both? (yes/no)
User: only the jira update
Claude: Got it. I'll update Jira ABC-123 but skip the Slack notification.
⚠️ Confirming: Update Jira ABC-123 to Done? (yes/no)
User: yes
Claude: ✅ Updated Jira ABC-123 to Done
❌ Skipped Slack notification as requested
Always Allowed (No Confirmation Needed)
The following operations NEVER require confirmation:
✅ Read operations:
- Fetching Jira issues
- Searching Confluence pages
- Viewing BitBucket PRs
- Reading Slack message history
- Querying any external system
✅ Linear operations:
- All Linear operations (internal tracking)
- Creating/updating Linear issues
- Adding comments to Linear
- Changing Linear status
✅ Local file operations:
- Reading/writing files in
.claude/directory - Editing codebase files
- Creating local documentation
- Git operations (commit, branch, etc.)
✅ Code operations:
- Writing production code
- Writing tests
- Running builds
- Executing tests
Special Cases
Case 1: User Explicitly Says "Without Confirmation"
If user explicitly requests bypassing confirmation:
User: "Update Jira ABC-123 to Done without asking me"
Still require ONE confirmation for safety:
Claude: I understand you want to skip confirmations, but for safety I need ONE confirmation:
Update Jira ABC-123 to Done? (yes/no)
[After yes, you can skip future confirmations in this session if user requests]
Case 2: Batch Operations
For multiple similar operations:
User: "Update all 5 tickets to Done"
Claude: ⚠️ EXTERNAL SYSTEM WRITE DETECTED
Batch operation: Update 5 Jira tickets to Done
- ABC-123
- ABC-124
- ABC-125
- ABC-126
- ABC-127
Proceed with all? (yes/no/show details)
User: yes
Claude: ✅ Updated all 5 tickets to Done
Case 3: User Seems Confused
If user response is unclear:
User: "maybe"
User: "I guess"
User: "if you think so"
Claude: I need explicit confirmation. Please respond with "yes" to proceed or "no" to cancel.
Integration with CCPM Commands
This skill works alongside CCPM commands that write to external systems:
Commands that trigger this skill:
/ccpm:done(creates BitBucket PR, sends Slack notification)/ccpm:sync(updates Jira status)- Any command with external system integration
How it works:
- User invokes command
- Command prepares to write to external system
- This skill auto-activates
- Confirmation workflow runs
- Only after "yes" does command proceed
Error Handling
If external system write fails after confirmation:
Claude: ⚠️ Write operation failed
System: Jira
Error: "Insufficient permissions to update ABC-123"
Possible solutions:
1. Check your Jira permissions
2. Ensure you're on the correct project
3. Verify the ticket exists
Would you like me to retry? (yes/no)
Audit Trail
After any confirmed external write:
Claude: ✅ Operation completed
Audit trail:
- Timestamp: 2025-11-19 14:32:15 UTC
- System: Jira
- Operation: Update Status
- Target: ABC-123
- User confirmed: Yes
- Result: Success
Logged to: .claude/audit-log.json
Why This Skill Exists
Problem: Easy to accidentally write to external systems when:
- Using agents that bypass command safety checks
- Misunderstanding what a command does
- Quickly testing a workflow
- Copy-pasting commands without reading
Solution: This skill provides an automatic safety layer:
- ✅ Works even when using agents directly
- ✅ Catches writes regardless of how they're initiated
- ✅ Provides clear "what will happen" preview
- ✅ Gives user final control before execution
Complements existing safety:
- Commands have built-in safety rules (
SAFETY_RULES.md) - This skill adds automatic detection layer
- Works together for defense-in-depth
Reference
For complete safety rules, see: ~/.claude/plugins/ccpm/commands/SAFETY_RULES.md