Developer Onboarding
Welcome to Ilmiya engineering. Safina is our shared developer workflow layer — four Claude commands that connect your daily work to the right tickets, enforce our standards, surface hidden problems, and keep the team in sync.
This guide walks you through everything you need to get up and running.
Quick start
git clone git@github.com:ilmiya/safina.git
cd safina
./install.sh
The install script copies the four commands to ~/.claude/commands/ilmiya/ and creates ~/.claude/ilmiya-config.json. Commands appear as the ilmiya section in VS Code’s command picker, and work identically in the CLI, desktop app, and iOS.
Before using commands, ensure your Claude account has:
- Slack connected at claude.ai/settings — all developers
- GitHub connected at claude.ai/settings — Tier 2 developers (no Linear access)
Commands prompt you to connect anything missing.
The four commands
| Command | When to run | What it does |
|---|---|---|
/safina:backlog | Start of every session | Pull your assigned tickets, pick today’s focus |
/safina:test | Before merging | Standards + correctness check against Ilmiya’s skill docs |
/safina:hunt | Before any PR or merge | Offensive scan: security, CVEs, bugs, regressions, flaky tests |
/safina:update | After committing work | Link commits to the ticket, post a smart comment + Slack |
Commands have prerequisites — skipping the order breaks the loop. See the daily loop for the full flow.
Developer tiers
Not everyone has Linear access. Commands detect your tier from ~/.claude/ilmiya-config.json and route accordingly.
| Tier | Who | Ticket source | Linear MCP |
|---|---|---|---|
| Tier 1 | Taha, Adnan | Linear | Yes |
| Tier 2 | All other developers | GitHub issues in this repo (synced with Linear) | No |
install.sh asks which tier you’re on and sets linear_access in your config. Tier 2 developers never need Linear access — everything syncs automatically.
What you’re not taking over
These commands sit alongside Claude’s built-in commands — they don’t replace /plan, /review, or anything else Claude offers. The ilmiya: namespace keeps them in their own section so there’s no conflict. See Claude’s commands for how the built-ins complement the ilmiya workflow.