Vibe coding with OpenCode — a practical course
A course on how to get predictable results from AI agents in software development. Not about "secret prompts", but about context, verification, and engineering discipline.
Author: course team · Version 1.0 · OpenCode V2
What you will learn
By the end of the course you will be able to:
- Explain how an LLM works and why it makes mistakes — without the mystique.
- State a task so that the agent produces working code on the first or second attempt.
- Set up a project for the agent:
AGENTS.md, permissions, build and test commands. - Work in the loop "spec → plan → small diff → verification → commit".
- Read the agent's diffs and find dangerous changes.
- Calculate the cost of a session and pick a model for the task, not "the smartest one".
- Build your own tooling: skills, commands, subagents.
Who it is for
- Students, entrepreneurs, marketers, experts, founders.
- Anyone who tried "asking ChatGPT to write a project" and got a mess.
Required beforehand: git (branches, diff, revert), a terminal, one programming language with tests (Python/JS/Go/Java — any), OpenCode installed.
Readiness check:
git --version
opencode --version
node --version # или python3 --version
How the course is structured
theory ~40% — concepts and mental models, no fluff
practice ~60% — exercises with acceptance criteria
Each module is a folder with two mandatory files:
| File | What is inside |
|---|---|
README.md |
theory: concepts, mini-lecture, comprehension questions |
practice.md |
exercises, acceptance criteria, time |
Course rule: a module is not passed until the artifact is submitted to labs/.
Syllabus
| # | Module | Theory | Practice | Hours |
|---|---|---|---|---|
| 00 | Orientation | what vibe coding is, roles, boundaries | set up the environment, first session | 2 |
| 01 | How LLMs work | tokens, context, sampling, hallucinations | experiments that break your intuition | 4 |
| 02 | Context engineering | window, AGENTS.md, session hygiene |
write AGENTS.md, measure degradation |
4 |
| 03 | Spec and prompt | spec-first, criteria, plan | turn 3 tasks into specs | 5 |
| 04 | Oracles and verification | tests, types, linters, CI | TDD loop with an agent | 5 |
| 05 | Agent loop and permissions | tool calling, permissions, isolation | deny list, worktree, --auto |
4 |
| 06 | Economics and model choice | price, cache, window, latency | calculate cost, compare models | 3 |
| 07 | Refactoring at scale | multi-file changes, green repo | migrate a module with an agent | 5 |
| 08 | Review and quality gates | reading diffs, red flags, security | catch 3 bad diffs | 4 |
| 09 | Customization | skills, commands, subagents, MCP | build your own tooling | 4 |
| 10 | Capstone | — | a feature from spec to CI + retro | 10 |
Total ≈ 50 hours. The order is mandatory: 01–04 are the foundation; without them, 05–09 turn into a set of buttons.
Schedule
Semester (16 weeks, 3 h/week):
| Weeks | Modules |
|---|---|
| 1–2 | 00, 01 |
| 3–4 | 02, 03 |
| 5–6 | 04 |
| 7–8 | 05 |
| 9 | 06 |
| 10–11 | 07 |
| 12–13 | 08 |
| 14 | 09 |
| 15–16 | 10 |
Intensive (2 weeks, 25 h/week): one module per day, capstone in the last 2 days.
Grading
| Part | Weight | What is graded |
|---|---|---|
| Understanding | 25% | answers to module questions, oral defence |
| Practice | 45% | artifacts in labs/, meeting the acceptance criteria |
| Capstone | 30% | a feature up to green CI + retro based on metrics |
Passing score — 70%, the capstone is mandatory. Details: rubric.md.
Repository structure
Vibecode/opencode/
├── README.md ← you are here
├── rubric.md ← grading criteria
├── glossary.md ← concepts (grows as the course goes)
├── resources.md ← what to read beyond the course
├── progress.md ← progress tracker
├── templates/ ← artifact templates
│ ├── AGENTS.md
│ ├── spec.md
│ ├── review-checklist.md
│ └── retro.md
├── modules/ ← 00..10, each with README.md + practice.md
└── labs/ ← artifacts go here
└── README.md
Three rules that matter more than everything else
- Never accept a diff you have not read. Vibe coding without reading the diff is a loan at 300%.
- No oracle — no task. If the result cannot be checked with a command, the task is not ready for the agent.
- One task — one session. Mixing goals in one context is the main reason "the model got dumb".
Where to start right now
- Read modules/00-orientation/README.md.
- Fill in progress.md — set the start date.
- Open a terminal in your learning project and run
opencode.