JDM Lab
Notes from the build.
Not a blog. Short technical notes on how we design agents, workflows and the trail, written as we build them.
Architecture note
Why every AI Employee has a human branch
An agent that can do everything is an agent nobody can trust. So every role we design starts from the opposite question: where must a person decide?
We draw that moment as a branch off the main flow. On the trail it is Ochre; in the configuration it is a rule with a named owner. A transfer, a discount, a complaint: the work stops, the context travels with it, and the person picks up where the machine left off.
Designing the branch first keeps the rest honest. Everything the machine does is then defined by what it is allowed to hand over, rather than by what it might attempt.
Implementation note
Answering in Darija is not a translation problem
Guests in Dakhla write in French, Darija, Arabic and English, often in the same conversation and sometimes in Latin script with numbers for sounds.
Treating Darija as a language to translate into French loses the register and the meaning. We keep the answer in the customer's language and script, and keep the facts in one source of truth so that every language says the same thing.
Evaluation sets are written in all four languages, including mixed messages, because that is what real conversations look like.
Engine note
One engine, many roles
Radd Core holds eight components: identity, knowledge, memory, tools, channels, guardrails, logging and metering. A Support AI and a Sales AI differ in configuration, not in code.
That choice makes every improvement to the engine an improvement to every role, and lets a new AI Employee start from a tested base rather than a blank file.
Observability note
Log decisions, not just messages
A chat log tells you what was said. It does not tell you why. The trail records the source used, the rule applied, the tool called and who approved it.
That is what lets an owner audit a conversation in a minute, and what turns failures into test cases for the next evaluation run.