Language mentor skills for AI coding agents.
Each skill turns the agent into a senior engineer in one language, talking to somebody who is an experienced engineer but new to that language. It explains what the syntax does and why the language has it, instead of explaining what a class is.
One SKILL.md per language, symlinked into every agent harness on the machine, so the same skill works in Claude Code, Cursor, GitHub Copilot and Codex.
| Skill | Language | What it does |
|---|---|---|
php-mentor |
PHP 8.x | Explains PHP files and folders, modern syntax, style and PSRs, and how to orient in a Laravel/Symfony/WordPress codebase |
go-mentor |
Go | Explains Go files and packages, modern syntax through 1.27, concurrency and its leaks, idiom and package layout, and how to orient in an unknown module |
javascript-mentor |
JavaScript | The language: this, closures, prototypes, coercion, modern syntax through ES2025, promises and ordering |
node-mentor |
Node.js | The runtime: CommonJS vs ESM, package.json and npm, the event loop, streams, and Node's stdlib |
javascript-mentor and node-mentor are deliberately separate. One is the language and works anywhere; the other is the server runtime. Each says where it stops and points at the other, so a frontend question never gets a node_modules answer. Install either alone or both.
git clone https://github.com/kadirosmanust/how-to-syntax.git
cd how-to-syntax
node scripts/link-skills.mjsThat symlinks every skill into the personal skills directory of each harness it finds:
| Harness | Directory |
|---|---|
| Claude Code | ~/.claude/skills/ |
| Cursor | ~/.cursor/skills/ |
| GitHub Copilot | ~/.copilot/skills/ |
| Codex and other Agent Skills harnesses | ~/.agents/skills/ |
Harnesses you do not have installed are skipped, so running this does not create a ~/.cursor for someone who does not use Cursor.
Because they are symlinks, git pull updates every harness at once. No reinstall.
You do not have to take all of them:
node scripts/link-skills.mjs --list # see what is available
node scripts/link-skills.mjs --skill php-mentor # just PHP
node scripts/link-skills.mjs --skill go-mentor,node-mentor
node scripts/link-skills.mjs --skill php-mentor --only claude # one skill, one harness--skill picks which skills, --only picks which harnesses. Both work with --unlink and --dry-run, so removing one later is --unlink --skill php-mentor.
Ask normally. The agent loads the skill when the question fits:
- "What is happening in this file?"
- "Why is
selfused here instead ofstatic?" - "How would I write this idiomatically in PHP 8.3?"
- "Bu klasörde ne oluyor?"
Answers come back in the language you asked in. Technical terms stay in English.
node scripts/link-skills.mjs # link into every detected harness
node scripts/link-skills.mjs --list # list skills, validate frontmatter
node scripts/link-skills.mjs --dry-run # show what would change
node scripts/link-skills.mjs --only claude # target specific harnesses
node scripts/link-skills.mjs --skill go-mentor # target specific skills
node scripts/link-skills.mjs --unlink # remove links pointing into this repo--only accepts a comma-separated list of claude, cursor, copilot, agents. --skill accepts a comma-separated list of skill names; --list prints them.
An existing real directory in a destination is never overwritten; it is reported and skipped unless you pass --force.
See .agents/adding-a-language.md for the layout, the portable frontmatter, and the rules that keep a skill working across all four harnesses.
MIT