◆ Vibe EngineeringSMIT · AI Agentic Engineering Urdu
Class 10 · 10.2

Project CLAUDE.md & a custom Cerebras skill

Put your fingerprints on the build. Write a project CLAUDE.md with process and design sections, then author your own skill so Claude calls an LLM the Cerebras way — fast, structured, and shareable.

🎯 Goal: author config + a skill⏱ Read: 16 min🧭 Type: hands-on

Now the human element. A one-line prompt would build something, but if we want a strong, differentiated product, this is where we put our fingerprints on it — through a carefully written project CLAUDE.md and our very own skill. Let's write both.

01The project CLAUDE.md: set the scene

Open a new CLAUDE.md in the repo root and describe the product at a high level — not the detailed requirements (those belong in Jira), just enough for Claude to stay coherent because it knows the game:

“Pre-Legal is a SaaS product that lets users draft legal agreements based on templates in the templates directory. The user has a chat to establish which document they want and how to fill in the fields. The available documents are described in catalog.json…”

The @ import trick

Type @catalog.json (or a full path) inside CLAUDE.md and Claude Code inserts that file's contents right there. Great for pulling in a catalog, or referencing an agents.md. One character, whole file included.

Add a line of context — “the initial implementation is a front-end-only prototype” — so Claude understands the starting state.

02A development-process section

Spell out how work should flow, so every ticket is built the same disciplined way:

CLAUDE.md · Development process
Use your Atlassian tools to read the feature instructions from Jira.
Develop the feature — do not skip any steps.
Thoroughly test with unit tests and integration tests; fix any issues.
Submit a PR using your GitHub tools.

03An AI-design section (enter Cerebras)

Because this product calls an LLM to understand the user and fill fields, we say how:

CLAUDE.md · AI design
When writing code to call an LLM, use your cerebras skill:
LiteLLM via OpenRouter to the `openai/gpt-oss-120b` model,
with Cerebras as the inference provider.
Use structured output so results can populate the document fields.

“Use your cerebras skill” — a skill we are about to build. This is the payoff of skills: the CLAUDE.md stays short and just points at the expertise.

04A technical-design section

Give the architecture guardrails so Claude builds something coherent and containerised:

CLAUDE.md · Technical design
Package the whole project into a Docker container.
Backend in `backend/` — a UV project using FastAPI.
Frontend in `frontend/`.
Provide scripts to start and stop the app.
Use SQLite, created fresh each time the container starts,
with a users table supporting sign-up and sign-in.
A tiny Markdown gotcha

Single line breaks in Markdown collapse into one paragraph. To force separate lines (as in a list of scripts), end each line with two spaces. Open the preview and you will see it lay out properly — a small thing that keeps your CLAUDE.md readable.

05Build the Cerebras skill

Why Cerebras? We want the AI to respond blisteringly fast. We use an open model, gpt-oss-120b, over OpenRouter, but pin the provider to Cerebras — you pay a little more than the cheapest option, but responses come back almost instantly. (Prefer free models? Just skip this or point the skill elsewhere.)

Create the folder .claude/skills/cerebras/ and a SKILL.md inside. The metadata block at the very top must use this exact format — like an API key, get it wrong and it will not work:

.claude/skills/cerebras/SKILL.md
---
name: cerebras
description: Cerebras inference. Use this to write code to call an
  LLM using LiteLLM and OpenRouter with the Cerebras inference provider.
---

# Calling an LLM via Cerebras
These instructions let you write code to call an LLM with Cerebras
specified as the inference provider. Read the model + key from `.env`.

# structured output, pinned to the Cerebras provider
resp = litellm.completion(
    model="openrouter/openai/gpt-oss-120b",
    messages=messages,
    api_key=os.environ["OPENROUTER_API_KEY"],
    response_format=NDAFields,          # a Pydantic schema
    extra_body={"provider": {"order": ["Cerebras"],
                          "allow_fallbacks": False}},
)
This is the whole idea of a skill

Clear metadata (so Claude knows when to reach for it) plus a few good code snippets (so it knows how). Anyone on your team who clones the repo gets the same skill. Tomorrow you will literally see the extra_body from this file appear in the code Claude writes — proof the skill was used.

06Wire in the key and go

The skill needs an OpenRouter API key. Copy your existing .env across — and thanks to the .gitignore we set up, it will never be committed:

terminal (in pre-legal)
cp ../pm/.env .   # brings your OPENROUTER_API_KEY into this project

Finally, make it crystal clear in CLAUDE.md: “There is an OpenRouter API key in the .env file in the project root.” Now we have a project CLAUDE.md, a home CLAUDE.md, a .env, and a brand-new Cerebras skill — the product is fully primed to build.

✓ Key takeaways

  • The project CLAUDE.md sets high-level context (leave detailed requirements to Jira) and can pull in files with the @file import trick.
  • Give it sections for process (read Jira, don't skip steps, test, PR), AI design (use the cerebras skill), and technical design (Docker, FastAPI, SQLite).
  • A skill is a folder under .claude/skills/ with a SKILL.md; the metadata block format must be exact.
  • Cerebras gives super-fast inference for gpt-oss-120b via OpenRouter, pinned with extra_body provider routing, plus structured output.
  • Copy in .env (never committed, thanks to .gitignore) and name it in CLAUDE.md.