Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 20 additions & 8 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,25 @@
{
"name": "superpowers",
"description": "Core skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques",
"version": "4.0.3",
"name": "superpowers-ng",
"description": "Enhanced fork of superpowers with Manus-style persistent planning for long-running tasks and context resets",
"version": "0.1.0",
"author": {
"name": "Jesse Vincent",
"email": "jesse@fsck.com"
"name": "OniReimu",
"url": "https://github.com/OniReimu"
},
"homepage": "https://github.com/obra/superpowers",
"repository": "https://github.com/obra/superpowers",
"homepage": "https://github.com/OniReimu/superpowers",
"repository": "https://github.com/OniReimu/superpowers",
"license": "MIT",
"keywords": ["skills", "tdd", "debugging", "collaboration", "best-practices", "workflows"]
"keywords": ["skills", "tdd", "debugging", "collaboration", "best-practices", "workflows", "manus", "planning", "persistent-memory"],
"credits": [
{
"name": "Jesse Vincent (obra)",
"role": "Original Superpowers author",
"url": "https://github.com/obra/superpowers"
},
{
"name": "Ahmad Othman Ammar Adi (OthmanAdi)",
"role": "Planning-with-files author",
"url": "https://github.com/OthmanAdi/planning-with-files"
}
]
}
2 changes: 1 addition & 1 deletion .codex/superpowers-bootstrap.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ When skills reference tools you don't have, substitute your equivalent tools:
- `Read`, `Write`, `Edit`, `Bash` → Use your native tools with similar functions

**Skills naming:**
- Superpowers skills: `superpowers:skill-name` (from ~/.codex/superpowers/skills/)
- Superpowers skills: `superpowers-ng:skill-name` (from ~/.codex/superpowers/skills/)
- Personal skills: `skill-name` (from ~/.codex/skills/)
- Personal skills override superpowers skills when names match

Expand Down
24 changes: 12 additions & 12 deletions .codex/superpowers-codex
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ function printSkill(skillPath, sourceType) {
if (sourceType === 'personal') {
console.log(relPath.replace(/\\/g, '/')); // Personal skills are not namespaced
} else {
console.log(`superpowers:${relPath.replace(/\\/g, '/')}`); // Superpowers skills get superpowers namespace
console.log(`superpowers-ng:${relPath.replace(/\\/g, '/')}`); // Superpowers skills get superpowers-ng namespace
}

// Extract and print metadata
Expand Down Expand Up @@ -62,7 +62,7 @@ function runFindSkills() {
console.log(' superpowers-codex use-skill <skill-name> # Load a specific skill');
console.log('');
console.log('Skill naming:');
console.log(' Superpowers skills: superpowers:skill-name (from ~/.codex/superpowers/skills/)');
console.log(' Superpowers skills: superpowers-ng:skill-name (from ~/.codex/superpowers/skills/)');
console.log(' Personal skills: skill-name (from ~/.codex/skills/)');
console.log(' Personal skills override superpowers skills when names match.');
console.log('');
Expand Down Expand Up @@ -110,9 +110,9 @@ function runBootstrap() {
console.log('');

// Load the using-superpowers skill automatically
console.log('## Auto-loading superpowers:using-superpowers skill:');
console.log('## Auto-loading superpowers-ng:using-superpowers skill:');
console.log('');
runUseSkill('superpowers:using-superpowers');
runUseSkill('superpowers-ng:using-superpowers');

console.log('');
console.log('---');
Expand All @@ -127,7 +127,7 @@ function runUseSkill(skillName) {
if (!skillName) {
console.log('Usage: superpowers-codex use-skill <skill-name>');
console.log('Examples:');
console.log(' superpowers-codex use-skill superpowers:brainstorming # Load superpowers skill');
console.log(' superpowers-codex use-skill superpowers-ng:brainstorming # Load superpowers skill');
console.log(' superpowers-codex use-skill brainstorming # Load personal skill (or superpowers if not found)');
console.log(' superpowers-codex use-skill my-custom-skill # Load personal skill');
return;
Expand All @@ -137,9 +137,9 @@ function runUseSkill(skillName) {
let actualSkillPath;
let forceSuperpowers = false;

if (skillName.startsWith('superpowers:')) {
// Remove the superpowers: namespace prefix
actualSkillPath = skillName.substring('superpowers:'.length);
if (skillName.startsWith('superpowers-ng:')) {
// Remove the superpowers-ng: namespace prefix
actualSkillPath = skillName.substring('superpowers-ng:'.length);
forceSuperpowers = true;
} else {
actualSkillPath = skillName;
Expand Down Expand Up @@ -191,7 +191,7 @@ function runUseSkill(skillName) {
const superpowersPath = path.join(superpowersSkillsDir, actualSkillPath);
skillFile = findSkillFile(superpowersPath);
if (skillFile) {
console.log(`# Loading superpowers skill: superpowers:${actualSkillPath}`);
console.log(`# Loading superpowers skill: superpowers-ng:${actualSkillPath}`);
console.log(`# Source: ${skillFile}`);
console.log('');
}
Expand Down Expand Up @@ -220,8 +220,8 @@ function runUseSkill(skillName) {
}

// Display skill header with clean info
const displayName = forceSuperpowers ? `superpowers:${actualSkillPath}` :
(skillFile.includes(personalSkillsDir) ? actualSkillPath : `superpowers:${actualSkillPath}`);
const displayName = forceSuperpowers ? `superpowers-ng:${actualSkillPath}` :
(skillFile.includes(personalSkillsDir) ? actualSkillPath : `superpowers-ng:${actualSkillPath}`);

const skillDirectory = path.dirname(skillFile);

Expand Down Expand Up @@ -261,7 +261,7 @@ switch (command) {
console.log('');
console.log('Examples:');
console.log(' superpowers-codex bootstrap');
console.log(' superpowers-codex use-skill superpowers:brainstorming');
console.log(' superpowers-codex use-skill superpowers-ng:brainstorming');
console.log(' superpowers-codex use-skill my-custom-skill');
break;
}
10 changes: 5 additions & 5 deletions .opencode/plugin/superpowers.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export const SuperpowersPlugin = async ({ client, directory }) => {
const toolMapping = compact
? `**Tool Mapping:** TodoWrite->update_plan, Task->@mention, Skill->use_skill

**Skills naming (priority order):** project: > personal > superpowers:`
**Skills naming (priority order):** project: > personal > superpowers-ng:`
: `**Tool Mapping for OpenCode:**
When skills reference tools you don't have, substitute OpenCode equivalents:
- \`TodoWrite\` → \`update_plan\`
Expand All @@ -43,7 +43,7 @@ When skills reference tools you don't have, substitute OpenCode equivalents:
**Skills naming (priority order):**
- Project skills: \`project:skill-name\` (in .opencode/skills/)
- Personal skills: \`skill-name\` (in ~/.config/opencode/skills/)
- Superpowers skills: \`superpowers:skill-name\`
- Superpowers skills: \`superpowers-ng:skill-name\`
- Project skills override personal, which override superpowers when names match`;

return `<EXTREMELY_IMPORTANT>
Expand Down Expand Up @@ -81,7 +81,7 @@ ${toolMapping}
use_skill: tool({
description: 'Load and read a specific skill to guide your work. Skills contain proven workflows, mandatory processes, and expert techniques.',
args: {
skill_name: tool.schema.string().describe('Name of the skill to load (e.g., "superpowers:brainstorming", "my-custom-skill", or "project:my-skill")')
skill_name: tool.schema.string().describe('Name of the skill to load (e.g., "superpowers-ng:brainstorming", "my-custom-skill", or "project:my-skill")')
},
execute: async (args, context) => {
const { skill_name } = args;
Expand All @@ -94,7 +94,7 @@ ${toolMapping}
let resolved = null;

// Try project skills first (if project: prefix or no prefix)
if (forceProject || !skill_name.startsWith('superpowers:')) {
if (forceProject || !skill_name.startsWith('superpowers-ng:')) {
const projectPath = path.join(projectSkillsDir, actualSkillName);
const projectSkillFile = path.join(projectPath, 'SKILL.md');
if (fs.existsSync(projectSkillFile)) {
Expand Down Expand Up @@ -172,7 +172,7 @@ ${toolMapping}
namespace = '';
break;
default:
namespace = 'superpowers:';
namespace = 'superpowers-ng:';
}
const skillName = skill.name || path.basename(skill.path);

Expand Down
Loading