A marketing assistant built as a harness on Agno, one step at a time. A marketer asks for a poster. LaunchKit answers with the poster's words (the copy) and its picture, following that brand's rules. Brands are workspaces: a folder of plain files, no code.
Needs Python 3.12+ and uv.
git clone <this repo> && cd ai-upskill
uv sync
cp .env.example .env # add your OPENAI_API_KEY
uv run launchkit check 0 # prints PASS
uv run launchkit ui # opens the chat page on http://localhost:8000
Without a key everything still runs: live runs use a fake model and a fake picture, and say so in the trace.
| Command | What it does |
|---|---|
uv run launchkit run harbor "Poster for the Tidal launch" |
One request in the terminal: trace, spec, picture path |
uv run launchkit ui |
The chat page: chat, live trace, context view, poster |
uv run launchkit explain |
What the model saw on the last run, in what order, at what cost |
uv run launchkit check 1 |
Prove step 1 with fake models. check all is the CP1.1 gate |
uv run launchkit run harbor "..." --model fake:echo |
Force a fake model for one run |
uv run launchkit run harbor "..." --facts workspaces/harbor/brand-book.md |
Load a file into the facts section |
Each step fills one TODO slot in launchkit/harness/. Each step has a check. The answer to each step is on its own branch.
| Step | Slot | Check | Branch |
|---|---|---|---|
| 1 · The agent reads its rules from files | workspace.py load_workspace, agent.py rules section |
check 1 |
cp1.1-step1-agent-from-files |
| 2 · Check the form, fix it once, then stop | spec.py validate_spec, run.py repair |
check 2 |
cp1.1-step2-validate-and-repair |
| 3 · A tool and a leash | tools.py, limits.py, agent.py picture agent |
check 3 |
cp1.1-step3-tool-and-leash |
| 4 · The request says who you are | request.py resolve_workspace_id |
check 4 |
cp1.1-step4-trust-the-request |
Prompt cards for each step are in docs/.
launchkit/
cli.py run · ui · explain · check
settings.py env, paths, limits, section budgets
harness/ request → workspace → context → copy agent → validate → picture agent → result
adapters/ model resolver, fake models, image adapters, prices
ui/ FastAPI app and one HTML page
workspaces/ one folder per brand: SOUL.md, AGENTS.md, rules.yaml, facts.md
checks/ one pytest file per step; `launchkit check` wraps them
docs/ setup, glossary, one page per step