Oma Backend
Backend agent: router/service/repository layering, explicit transactions, ORM N+1 rules
Test report
- Verdict
- Works with setup
- Score
- Tested
- Jul 21, 2026
- Environment
- Claude Code 2.x (agent harness)
- Upstream re-checked
- Aug 10, 2026 · d2e42f2
Fetched SKILL.md plus all five resources/*.md (checklist, execution-protocol, orm-reference, examples, error-playbook) — every one returned HTTP 200 and ../_shared/core/* exists in the tree; no curl|sh, base64 blobs, or injection text inside the skill files (the repo README's own installer is curl|bash, which is the harness, not the skill). The body's references to stack/stack.yaml, stack/snippets.md and stack/api-template.* are dangling after a plain copy — those ship as variants/{node,python,rust}/ — and execution-protocol.md Step 3 says "Use stack/api-template.*" with no optional hedge. Trigger phrasings judged: SHOULD fire — "Add a POST /api/orders endpoint to our FastAPI service that creates an order and decrements stock", "Implement JWT login with refresh token rotation and rate limiting on the auth routes", "Our /api/posts list endpoint takes 2s, find the N+1 and fix the repository query" (all 3 correct); SHOULD NOT fire — "Fix the flexbox layout on the pricing page, cards overflow on mobile" (correctly ignored), "Write API reference documentation for our existing REST endpoints in the README" (I would load it, since the description literally says "Use for API, endpoint, REST ... work" — false positive, so 4/5). For output I ran one task both ways: the baseline looped session.get(Product) per line (N queries, no row lock, lost-update race on stock), had no eager loading on the list endpoint (a real MissingGreenlet failure under async SQLAlchemy), no pagination, no quantity>0 validation, and business logic in the route handler; the skill version produced one batched SELECT ... FOR UPDATE, selectinload on Order.items, cursor pagination with a limit cap, an explicit "async with session.begin()" unit of work, domain exceptions behind a central handler, an FK index migration, and a named residual risk (with_for_update is a no-op on SQLite). Honesty caveat: I had already read the skill body before writing the baseline, so the baseline is my genuine default pattern but was not written blind; artifacts are at /private/tmp/claude-501/-Users-afin-Desktop-Skill-Agregator/94648f54-e301-46fc-afd8-b98858a51ecf/scratchpad/omabk-baseline.md and omabk-skill.md.
Scored on four weighted criteria — install, triggering, output vs. baseline, docs. How scoring works
- Installs cleanly 4/5
- Triggers reliably 4/5
- Output vs. baseline 7/10
- Docs & honesty 4/5
What Oma Backend does
A backend-implementation skill that enforces a router to service to repository to models split and runs a fixed analyze/plan/implement/verify protocol for API, auth, and persistence work. It carries an ORM reference (relation-loading strategy, transaction boundaries, session/client lifecycle, field projection) and a pre-submit checklist covering FK indexes, pagination, input validation, parameterized queries, and env-based config. Triggers on requests to build REST or GraphQL endpoints, write migrations, add JWT auth, or fix slow queries in a server codebase.
How to install Oma Backend
# clone the harness (the skill references ../_shared, so copy that too)
git clone --depth 1 https://github.com/first-fluke/oh-my-agent /tmp/oma
mkdir -p ~/.claude/skills
cp -R /tmp/oma/.agents/skills/oma-backend ~/.claude/skills/
cp -R /tmp/oma/.agents/skills/_shared ~/.claude/skills/
# optional: materialize the stack/ folder the body references, from a variant
cp -R ~/.claude/skills/oma-backend/variants/python ~/.claude/skills/oma-backend/stack
# alternatives (whole suite): bunx oh-my-agent@latest
# or: apm install first-fluke/oh-my-agent/.agents/skills/oma-backend
Skills live in ~/.claude/skills/ (global) or .claude/skills/
(per-project). Restart Claude Code after installing.
Commands — how to trigger Oma Backend
-
/oma-backendBackend agent: router/service/repository layering, explicit transactions, ORM N+1 rules
It also activates on plain-language prompts like these:
-
Add a new REST endpoint following our clean architecture -
Set up database migrations for this feature -
Implement authentication in the service layer
Frequently asked questions
- Is the Oma Backend skill free?
- Yes. The skill itself is free from first-fluke/oh-my-agent. SkillProof publishes the install command and an independent test verdict at no cost.
- Does Oma Backend work with Claude Code?
- We tested it with Claude Code 2.x (agent harness) on Jul 21, 2026. Verdict: Works with setup. Fetched SKILL.md plus all five resources/*.md (checklist, execution-protocol, orm-reference, examples, error-playbook) — every one returned HTTP 200 and ../_shared/core/* exists in the tree; no curl|sh, base64 blobs, or injection text inside the skill files (the repo README's own installer is curl|bash, which is the harness, not the skill). The body's references to stack/stack.yaml, stack/snippets.md and stack/api-template.* are dangling after a plain copy — those ship as variants/{node,python,rust}/ — and execution-protocol.md Step 3 says "Use stack/api-template.*" with no optional hedge. Trigger phrasings judged: SHOULD fire — "Add a POST /api/orders endpoint to our FastAPI service that creates an order and decrements stock", "Implement JWT login with refresh token rotation and rate limiting on the auth routes", "Our /api/posts list endpoint takes 2s, find the N+1 and fix the repository query" (all 3 correct); SHOULD NOT fire — "Fix the flexbox layout on the pricing page, cards overflow on mobile" (correctly ignored), "Write API reference documentation for our existing REST endpoints in the README" (I would load it, since the description literally says "Use for API, endpoint, REST ... work" — false positive, so 4/5). For output I ran one task both ways: the baseline looped session.get(Product) per line (N queries, no row lock, lost-update race on stock), had no eager loading on the list endpoint (a real MissingGreenlet failure under async SQLAlchemy), no pagination, no quantity>0 validation, and business logic in the route handler; the skill version produced one batched SELECT ... FOR UPDATE, selectinload on Order.items, cursor pagination with a limit cap, an explicit "async with session.begin()" unit of work, domain exceptions behind a central handler, an FK index migration, and a named residual risk (with_for_update is a no-op on SQLite). Honesty caveat: I had already read the skill body before writing the baseline, so the baseline is my genuine default pattern but was not written blind; artifacts are at /private/tmp/claude-501/-Users-afin-Desktop-Skill-Agregator/94648f54-e301-46fc-afd8-b98858a51ecf/scratchpad/omabk-baseline.md and omabk-skill.md.
- What is the Oma Backend SkillProof Score?
- 7.6/10 — installs cleanly 4/5, triggers reliably 4/5, output vs. baseline 7/10, docs & honesty 4/5.
- How do I install Oma Backend?
- Copy the install command from this page, run it in your terminal, and restart Claude Code. Skills live in ~/.claude/skills/ (global) or .claude/skills/ inside a project.
- Can I use Oma Backend with Cursor, Copilot, Gemini CLI, Codex or other AI tools?
- The SKILL.md format is native to Claude (Claude Code, Desktop, claude.ai). The instructions inside adapt to other assistants: Cursor rules, GitHub Copilot instructions, Windsurf rules, Custom GPTs, AGENTS.md for OpenAI Codex, and GEMINI.md for Google Gemini CLI — our conversion guides cover each, and the free converter on the tools page does the wrapping for you.