-
-
Journeyman: the AI that won't do your homework.
-
Hoolio, the mentor. Show him what you tried and he helps. Ask cold and he politely says no.
-
A real session, saved word for word: the cold ask gets a refusal, the real attempt earns a hint.
-
A real learner's dashboard. Every milestone has a deliverable and a review rubric, built from quotes in real job postings.
Inspiration
Every capable AI will do a learner's homework on request. That is exactly why none of them can teach. Job postings now ask for demonstrated evidence: commit history, explained tradeoffs, tests that prove behavior. So the tool learners actually need is one that holds the line their own discipline can't, and leaves a trail an employer can inspect.
What it does
Journeyman is an apprenticeship agent for adults changing careers, fronted by Hoolio, an owl mentor with a firm no. You paste real job postings for jobs you want. It builds a gap analysis where every claimed gap quotes the posting verbatim, then a plan of real deliverables sized to your week. Tasks arrive on Telegram. Ask for the answer cold and you get an instant, deterministic refusal with a price list: show code, an error, a link, or a commit, and you earn exactly one rung of a five-level hint ladder. The ladder never reaches "here is the solution" until you have explained the approach back. Every attempt and earned hint is saved, and the learner can publish the transcript as a public evidence trail.
How we built it
OpenAI Codex wrote every line of product code, directed through bounded passes: a written brief with scope, constraints, and pass/fail gates; isolated execution; a written result report; independent verification before the pass counts. Claude acted as tech lead and refused to accept unverified claims. All pass briefs and results are committed in the repo's build/ folder. Mentor reasoning runs on GPT-5.6 through the Codex CLI with strict output schemas, retries, and persisted run logs (worker/src/codex.ts is the single execution seam). The refusal gate is deliberately not a model: it is an auditable classifier in ordinary code, so it is instant, free, and immune to prompt injection.
Challenges we ran into
Structured-output schemas silently truncated long constant strings, which produced a bug that could never round-trip validation. The structured-output endpoint rejected two different schema shapes Zod emits for records, diagnosed from raw logs after the surfaced error pointed somewhere else. A scripted fake-user drive found a coupling bug that silently discarded a successful gap analysis when the following step failed. Live dogfooding exposed that identical canned refusals shamed honestly stuck users, so the classifier was rebuilt the same night to separate "give me the answer" from "I am struggling."
Accomplishments that we're proud of
Two full end-to-end drives on real model calls, all eight stages green. A real refusal and two real earned hints from a live session, published on the demo transcript. Adversarial multi-agent reviews before every merge, with findings proven by file and line; one caught a boot-path failure that could have taken the bot down mid-conversation, and one caught our own marketing overclaiming and forced a reword. The mentor that demands shown work was built by a process that shows its work.
What we learned
The management structure mattered more than the models. Separate the builder from the verifier. Write acceptance criteria before the work. Send fake users before real ones. Distrust every claim without a test, a log, or a database row.
What's next for Journeyman
Artifact review (the pipeline that reviews a learner's actual repository against each milestone's rubric), defense sessions before milestones close, and a hosted multi-tenant version. The local-first architecture stays: the learner's data and compute never leave their machine.
Built With
- gpt-5.6
- grammy
- next.js
- node.js
- openai-codex
- postgresql
- prisma
- tailwind
- telegram
- typescript
- zod

Log in or sign up for Devpost to join the conversation.