Architecture and setup, the CLAUDE.md configuration hierarchy, slash commands / skills / subagents, and hooks, the Agent SDK, and CI/CD.
Claude Code runs as an agentic loop against your local (or CI) filesystem and shell: it reads code, proposes and takes actions, and observes the result, the same action loop as Domain 1 but applied specifically to a development environment.
Installation and configuration happen through settings.json, which controls permissions — what commands, file paths, and tools Claude Code is allowed to touch without asking, and what requires explicit approval each time. Permission scope is a real security boundary, not just a convenience setting.
Full breakdown & examples → 3.1 Architecture and Setup
Claude Code reads configuration from three levels: user (~/.claude/CLAUDE.md, personal, never checked into git, applies only to you), project (.claude/CLAUDE.md or a root CLAUDE.md, version-controlled, applies to every teammate who clones the repo), and further path-scoped rules below that.
The exam's favorite trap in this domain: a developer stores team-wide conventions — naming, error handling, test structure — in their own user-level file instead of the project-level file. Claude Code behaves perfectly for them and inconsistently for every teammate who clones the repo, because the conventions never travel with the project.
For modular organization, @path imports are loaded eagerly — every imported file is inlined exactly as if pasted in, so splitting one large file into several imported files makes the source easier to maintain but does not shrink what's actually loaded into context. To reduce per-session context, use .claude/rules/ instead: path-scoped rules that load only when Claude is working in the matching directory.
Full breakdown & examples → 3.2 CLAUDE.md Configuration
Custom slash commands package a specific, repeatable instruction (a code review checklist, a release process) behind a short invocation, so a team doesn't have to retype the same detailed prompt every time.
Skills package reusable procedural knowledge — not just a prompt, but instructions, examples, and sometimes scripts — that Claude Code can draw on across many different tasks.
Subagents in Claude Code follow the same context-isolation logic as Domain 1's orchestration model: delegate to a subagent when a piece of work is self-contained and would otherwise pollute the main session's context; handle it inline when it's short or depends heavily on context already in the main conversation.
Full breakdown & examples → 3.3 Slash Commands, Skills, and Subagents
Hooks let you enforce behavior programmatically rather than by instruction — running before or after a tool use, or gating permissions — so a rule like "never run this command" is guaranteed rather than merely requested.
The Claude Agent SDK exposes the same agentic loop Claude Code uses, but embeddable in your own application rather than the terminal — the building block for custom agent products.
In CI/CD, Claude Code defaults to an interactive mode that expects keyboard input, which will simply hang forever in a pipeline with no keyboard attached. The fix is the -p (or --print) flag, which switches Claude Code to non-interactive print mode: it processes the prompt, writes the result to stdout, and exits. Pair it with --output-format json to get machine-parseable output a downstream CI step can consume.
Full breakdown & examples → 3.4 Hooks, SDK & CI/CD