Skip to content
Draft
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
26 changes: 25 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# coding-tutor-skill

A learning toolkit for AI coding agents. Turns Claude Code, Cursor, OpenCode, or any supported agent into a programming mentor that guides without doing the work for you.
A learning toolkit for AI coding agents. Turns Claude Code, Cursor, OpenCode, Codex, or any supported agent into a programming mentor that guides without doing the work for you.

## Skills

Expand Down Expand Up @@ -32,6 +32,29 @@ Auto-detects your agent. Or specify one explicitly:
npx coding-tutor-skill --skill tutor --agent claude-code
npx coding-tutor-skill --skill tutor --agent cursor
npx coding-tutor-skill --skill tutor --agent opencode
npx coding-tutor-skill --skill tutor --agent codex
```

Install from a cloned repository:

```bash
git clone https://github.com/zeufack/coding-tutor.git
cd coding-tutor
node ./bin/install.js --skill tutor --agent codex
```

Use this local install path when testing repository changes or when you want to install without `npx`.

For Codex, the installer writes the skill to:

```text
$CODEX_HOME/skills/<skill-name>/SKILL.md
```

If `CODEX_HOME` is not set, it falls back to:

```text
~/.codex/skills/<skill-name>/SKILL.md
```

List available skills:
Expand Down Expand Up @@ -100,4 +123,5 @@ coding-tutor/
| Claude Code | Supported |
| Cursor | Supported |
| OpenCode | Supported |
| Codex | Supported |
| Other | Use `--print` for manual install |
17 changes: 15 additions & 2 deletions bin/install.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,36 @@ import { fileURLToPath } from 'url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const projectRoot = path.join(__dirname, '..')
const home = process.env.HOME || process.env.USERPROFILE
const codexHome = process.env.CODEX_HOME || path.join(home, '.codex')

const agents = {
'claude-code': {
detect: path.join(home, '.claude'),
target: (skillName) => path.join(home, '.claude', 'commands'),
filename: (skillName) => `${skillName}.md`,
label: 'Claude Code',
usage: (skillName) => `Use /${skillName} to start a session.`,
},
cursor: {
detect: path.join(home, '.cursor'),
target: (skillName) => path.join(home, '.cursor', 'skills'),
filename: (skillName) => `${skillName}.md`,
label: 'Cursor',
usage: (skillName) => `Use /${skillName} to start a session.`,
},
opencode: {
detect: path.join(home, '.config', 'opencode'),
target: (skillName) => path.join(home, '.config', 'opencode', 'skills', skillName),
filename: () => 'SKILL.md',
label: 'OpenCode',
usage: (skillName) => `Use /${skillName} to start a session.`,
},
codex: {
detect: codexHome,
target: (skillName) => path.join(codexHome, 'skills', skillName),
filename: () => 'SKILL.md',
label: 'Codex',
usage: (skillName) => `Mention ${skillName} in your next Codex prompt to use this skill.`,
},
}

Expand Down Expand Up @@ -54,6 +65,7 @@ function showHelp() {
console.log('\nExamples:')
console.log(' npx coding-tutor-skill --skill tutor')
console.log(' npx coding-tutor-skill --skill tutor --agent claude-code')
console.log(' npx coding-tutor-skill --skill tutor --agent codex')
console.log(' npx coding-tutor-skill --skill tutor --print\n')
process.exit(1)
}
Expand Down Expand Up @@ -92,7 +104,7 @@ function install(agentKey) {
fs.copyFileSync(skillSrc, path.join(targetDir, targetFile))

console.log(`\n✓ ${skillName} skill installed for ${agent.label}`)
console.log(` Use /${skillName} to start a session.\n`)
console.log(` ${agent.usage(skillName)}\n`)
}

if (forcedAgent) {
Expand All @@ -112,7 +124,8 @@ if (forcedAgent) {
console.log('\nSpecify an agent:')
console.log(` npx coding-tutor-skill --skill ${skillName} --agent claude-code`)
console.log(` npx coding-tutor-skill --skill ${skillName} --agent cursor`)
console.log(` npx coding-tutor-skill --skill ${skillName} --agent opencode\n`)
console.log(` npx coding-tutor-skill --skill ${skillName} --agent opencode`)
console.log(` npx coding-tutor-skill --skill ${skillName} --agent codex\n`)
process.exit(1)
}
}
13 changes: 9 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@
},
"files": [
"bin",
"skills",
"prompts",
"adapters"
"challenger",
"course-builder",
"debugger",
"explainer",
"interviewer",
"lecture",
"reviewer",
"tutor"
],
"keywords": ["claude", "cursor", "ai", "tutor", "skill", "coding"],
"license": "MIT"
}
}