OpsDesk AcademyGet the project Code · prompts · workflows
YOUR HOME LAB · NO PRESENTER ACCOUNT REQUIRED

Take the app home. Keep building.

Use your own machine, model and telemetry project. Start locally; add the optional services when their course part needs them.

CHOOSE YOUR PATH FIRSTThe business/browser route starts with a builder account and the downloadable route prompt; no terminal is required. For the local IT routes, clone or download the reviewed repository and open its root in your terminal. The static guide does not include a running backend or model entitlement.

Local IT path · Parts 1–3

Python 3.12+, uv, Git, a browser and one builder/editor. Bring one working tool-capable model endpoint and exact alias.

Python · uv installation · Git · Ollama · LiteLLM

Parts 5–6 · control and host

Security tests run locally. Live OCI hosting additionally needs an approved scope, supported service/region, OCI identity, image builder and telemetry destinations. A design-only submission does not prove cloud deployment.

Guardrail map · OCI requirements · OCI CLI

Keep your chosen runtime

The rehearsed Lovable route uses its native TypeScript server and Lovable AI. The Python commands below belong to the separate local engineering route; do not paste them into Lovable Cloud. Ask your builder to instrument its actual server runtime. GitHub Pages serves the lessons only, never your model keys or an authenticated AI backend.

Local IT route: install the pinned dependencies

Use macOS, Linux or Windows with WSL for these shell commands. Install the tools from their official links; this page installs nothing. From the workshop repository root:

uv sync --frozen --extra studio
.venv/bin/python scripts/course_doctor.py --part 1

The doctor only checks local prerequisites. It reads no credential values, calls no endpoint and creates no resources. A green result does not prove your model supports tools.

2. Configure your own model

mkdir -p local/private/home
cp workshops/local-ai-studio/studio.example.toml local/private/home/studio.toml
chmod 600 local/private/home/studio.toml

Edit that private TOML with the exact working alias and endpoint. For Ollama use an already installed tool-capable model; run ollama list to discover your own names. For a gateway, obtain your own client key and reference its environment variable. A chat subscription does not automatically provide an API key. Never use the presenter’s endpoint or keys.

3. Start and verify the app

PYTHONPATH=src .venv/bin/python -m agent_workshop.studio --config local/private/home/studio.toml --output local/private/home/run-01 --port 8770

If your gateway uses a private key file, add --secrets local/private/home/keys.env only after creating your own bounded 0600 file with the configured environment names. No key is needed for an unauthenticated local Ollama endpoint.

Open http://127.0.0.1:8770/desk to inspect the authored reference, then follow the Part 1 brief to build and verify your own app. Test create → search → select → Analyze safely. A real model/tool answer is required. Ctrl-C stops the owned foreground server; keep its private receipts. Use a fresh output path, such as run-02, on restart.

4. Continue with one brief per part

Open all six course parts. Each offers complete Markdown agent instructions and acceptance checks. Keep the same working app; add one capability, then rerun earlier checks. Parts 1–3 need no OCI tenancy. Part 4 needs your telemetry destination; Part 6 needs cloud access for live acceptance.

# Only when reaching hosted SDK exercises:
uv sync --frozen --extra live
.venv/bin/python scripts/course_doctor.py --part 6

Common setup problems

Why am I asked to sign in twice in Lovable?

The builder workspace and the app you create are separate identities. Google sign-in opens the builder. Your app may then use Continue with Lovable for its own authenticated users. Review that app consent: it can request your name and email. Accept only for the app you intend to test. Do not bypass it, expose auth tokens or call a model endpoint without the required session.

The editor preview is blank after a build

Do not count the builder’s completion message as success. Check the actual preview, inspect errors and use the editor’s Open preview control when appropriate. Authenticated preview URLs can contain access tokens; do not copy them into public guides or screenshots. Use the app’s actual controls for acceptance.

The command cannot import a module

Run from the repository root, use its .venv interpreter and install the correct frozen extra. Local Studio uses studio; hosted SDK tests use live. Do not install random global packages to hide a missing environment.

The model chats but never calls a tool

Confirm native tool support with the exact model alias and gateway settings. Record that incompatibility. Choose another explicitly configured model; never silently return a scripted answer.

A hosted builder cannot reach my laptop

A SaaS server cannot call your laptop’s loopback address. Use its supported private server integration, or run your app/backend locally. Do not add wildcard CORS or expose secrets in the browser.

Port in use or output folder exists

Identify the owner of the listener and choose another port if needed. Do not kill an unknown process. Existing output is deliberately preserved; choose a new run directory instead of deleting evidence.

How do I stop and clean up?

Stop only foreground processes and containers you started. For self-hosted Langfuse, use its compose project stop command in its own directory. Do not delete volumes if you want traces preserved. Cloud teardown must use your own exact resource inventory and authorization. Never run a generic destroy command against a shared account.

Start Part 1 → Set up Langfuse →