2026 · Made by me: product, agent architecture, prompts and code

Multi-agent syllabus council

Majlis

A professor's reading list is their expertise, sitting in a spreadsheet doing nothing. Six agents turn one into a six-week syllabus — and one of them exists only to strike things off.

Read the code

Screenshot of Majlis

TL;DR

  • Picture a professor whose real expertise is what she has read: 837 books, 82 reviews, a long column of ratings. Somewhere in there are four or five courses nobody has written down.
  • Writing one of them means sequencing the books, choosing the chapters, and admitting the holes — a week of evenings per subject. It never happens.
  • Majlis does the assembly instead. A council of six agents reads the library, works out which subjects it can actually carry, and drafts the course for one of them.
  • The professor stays the professor. Her ratings steer it: a two-star book is struck with the reason shown, a book she abandoned is assigned in part, a five-star book with a note anchors a week.
  • Isnad, the verifier, exists to remove things. A reading is a hypothesis until it confirms what the book actually covers.
  • Built on the Claude API: Opus 5 for the lead and the verifier, Sonnet 5 for the workers, with web search as a tool.
  • A run takes a few minutes and costs between $0.80 and $3, depending on how much the agents search. The UI shows the cost climbing while they work, because that's the part people forget to ask about.
  • The library in the demo is mine. It runs: two councils have sat so far, and the syllabi they produced are in the repo. A video of a full run is coming.
  • I designed the interface in Lovable, then took the code out of it and wired it to the agents myself.

How it works

How Majlis works, in five stepsYou export a Goodreads shelf. The Cartographer agent reads the whole library and names the subjects it could teach. You pick one. A council — a Lead, four Researchers, Isnad the verifier, a Counter-reader, a Realist and a code audit — proposes readings, verifies them, objects and cuts. The Lead writes the six-week syllabus, along with the list of what was thrown out.01Export the shelf837 books from Goodreads,ratings and reviews includedWHO DOES ITyou02Find the courses in itOne agent reads the whole libraryand names the subjects in itWHO DOES ITCartographer03Pick oneEach subject says whether the shelfcan teach it, or admits it can’tWHO DOES ITyou04Convene the councilPropose readings, verify them,object, and cut them downWHO DOES ITLead (orchestrator)Researchers ×4IsnadCounter-readerRealistAudit — code05Get the syllabusSix weeks of reading, and thelist of what was thrown outWHO DOES ITLead, againa few minutes · $0.80 to $3 a runSteps 01 and 02 happen once. Steps 03 to 05 happen every time someone picks a subject. ◇ marks an agent.

The first two steps are the setup: my library becomes a map of subjects, with an honest verdict on each. The rest is the product — pick a subject, watch six agents argue about it, read what they agreed on.

The architecture, agent by agent

The Majlis agent architectureAgents are colour-coded by what they are for: gold agents decide and assemble, blue agents generate, pink agents remove or limit. A dashed square marks code rather than a model, and plain rectangles are the data handed between tiers. A setup pass maps the library into territories; an orchestrator splits a subject into threads; four worker agents research them in parallel; three reviewer agents with conflicting mandates cut the draft down; a code audit checks the record; the orchestrator writes the syllabus.an agent — one call to a model, with its own prompt and toolscode, not a modeldata handed from one tier to the nextCOLOUR = WHAT THE AGENT IS FORdecides and assemblesgenerates — proposes new materialremoves or limits — cuts, strikes, objectsSETUP · RUNS ONCE OVER THE WHOLE LIBRARYGoodreads export837 books · 82 reviewsCartographerreads all 756 catalogued books at onceOpus 5 · no tools16 territoriescourse / unit / not yetyou pick one ↓ORCHESTRATOR · DECIDES WHAT THE WORK ISLead — the orchestratoropens the council: splits the subject into 4–6 threadsOpus 5 · sees the whole shelf for this subject4–6 threadsone per strand a course needs · the lead decides how manyWORKERS · FOUR COPIES OF ONE AGENT, RUNNING AT THE SAME TIMEResearcher · thread 1proposes readings, names gapsSonnet 5 · shelf + web searchResearcher · thread 2proposes readings, names gapsSonnet 5 · shelf + web searchResearcher · thread 3proposes readings, names gapsSonnet 5 · shelf + web searchResearcher · thread 4proposes readings, names gapsSonnet 5 · shelf + web search3–4 readings per threadeach carries a claim about what that chapter covers — 28 of them in the first runREVIEWERS · THREE DIFFERENT AGENTS, ALSO AT THE SAME TIME — THEIR MANDATES CONTRADICT EACH OTHERIsnad · the verifierconfirm the claim, or strike itOpus 5 · web search · never confirms to be helpfulCounter-readerwhose account is missing from this shelf?Sonnet 5 · web search · may add one readingRealistcould a person finish this in six weeks?Sonnet 5 · no tools · cuts rather than compresseswhat survives, and what doesn’ta reason against every one · first run: 15 confirmed, 1 struck, 5 cut, 1 objectionORCHESTRATOR AGAIN · THEN A CODE CHECK THAT USES NO MODEL AT ALLLead — the orchestrator, againhonours every strike and cut, orders the unitsOpus 5 · writes objectives and the disagreementsAuditevery reading ships or has a reasonA six-week syllabus+ everything that was struck, and who struck it

Orchestrator and subagents

The shape is the standard one for this kind of work: a single orchestrator that owns the goal, and subagents that own a slice of it.

The orchestrator never does research. Its job is decomposition — turn “Platform Capitalism” into four to six threads, each with a title and a sentence saying what that thread must establish — and then, at the end, synthesis. Everything in between is delegated.

Each subagent gets its own context window: the thread it was given, the shelf, and nothing else. It can’t see the other researchers’ work, the orchestrator’s reasoning, or the transcript so far. That isolation is what makes the parallelism safe. Four agents searching at once don’t contaminate each other’s judgment, and a researcher can’t quietly inherit a claim another one invented.

The cost of that isolation is that delegation quality is everything. An orchestrator that hands out vague briefs gets four agents doing the same search — duplicated tokens, duplicated readings, no coverage. Most of the prompt work in this project went into the split: threads have to be distinct, each has to be answerable from a library, and one of them is usually allowed to come back empty and say so.

Two places where I went past the basic pattern:

  • A review tier, not just a synthesis step. In the usual shape, the orchestrator collects subagent results and writes the answer. Here, three more subagents attack the collected draft first, with mandates that contradict each other. The orchestrator is then bound by what they decide: it must honour every strike and every cut.
  • A step that isn’t a model at all. The audit is plain code. It checks that every confirmed reading either appears in the syllabus or has a recorded reason, and that any quote attributed to me matches my actual review text. Anything a deterministic check can catch shouldn’t be left to a model’s goodwill.

The tradeoff is tokens. A multi-agent run costs several times what one good prompt would — Anthropic’s own write-up on their multi-agent research system puts it at roughly fifteen times the tokens of a chat exchange, and mine runs between $0.80 and $3 against a few cents for a single call — the spread is how much searching the agents do. That’s only worth paying when the work genuinely parallelises and when being wrong is expensive. Here it is: the failure I care about is a syllabus that confidently assigns a chapter that doesn’t exist. The planted-flaw eval below is how I’ll find out whether the council earns its bill, or whether one careful reviewer would have caught the same things.

Why this shape, and not one agent with tools

The default advice is to reach for a workflow first and only use an agent when you can’t predict the steps — workflows are more reliable, easier to evaluate, and cheaper. Majlis is mostly a workflow. I know the steps: split the subject, research the threads, check what comes back, cut it to size, write it up. Nothing about that order changes between subjects, so nothing about it needs to be decided at runtime.

What I borrowed, and where:

  • Parallelization, twice, for two different reasons. The researchers are the same prompt run four times on different threads — the standard “split a task into sub-tasks, run them at once, aggregate” move. The reviewers are the other kind: three different specialised prompts over the same draft. Sub-tasks in a parallel step don’t have to be identical, and here they’re deliberately in tension.
  • Chaining, with code between the links. The audit isn’t a model call. Running plain code between steps is one of the quiet advantages of a workflow: some checks — did every confirmed reading either ship or get a reason? does this quote actually appear in my review? — should never be a model’s judgment call.
  • Evaluator–optimizer, bounded. Isnad is a grader over the researchers’ output, and the realist can send a unit back once for being too long. I stopped there rather than looping until everything passes, because each iteration is real money and an unbounded loop on a $2 run is how you get a $20 one.
  • Routing, at the front door. The cartographer’s verdict is a classifier: subjects it marks as thin don’t get a council at all. The cheapest multi-agent run is the one that doesn’t happen.

The agency is local. Researchers decide what to search for and when to stop; Isnad decides whether it needs to look something up before ruling. Those are genuinely unpredictable, so they get tools and discretion. The shape around them stays fixed, which is what makes a run reproducible enough to evaluate at all.

Why the researcher and the verifier are different agents. Each agent is one call to a model, with its own prompt and its own tools, and it only knows what it’s handed. A researcher is rewarded for finding things: told to fill a thread, it will fill it, and it will happily say “chapter four covers the Mahdist revolt” because that sounds right. Isnad is rewarded for removing things: it gets the bare claim, without the researcher’s reasoning, and is told to strike anything it can’t confirm and never to confirm something to be helpful. One agent doing both would be grading its own homework. It’s a writer and a fact-checker at a magazine — same skills, deliberately different desks. That’s also why Isnad runs on the more expensive model: the judgment goes where a mistake ships a lie.

The counts are examples, not a fixed shape. A subject with more books gets more threads; a thinner one gets fewer. Where a number appears, it’s what happened the first time the council sat on Platform Capitalism.

The fan-out is the cheap part. Four researchers at once is just parallelism. One tier generates; the whole tier beneath it exists to take things away, and the tier beneath that is code rather than a model, so nothing disappears without a recorded reason.

What it is

Majlis means a study assembly: people sitting together to work something out.

Mine has six members, and they don’t agree. Give them a subject and they come back with a six-week syllabus: weekly units, learning objectives, specific chapters rather than whole books, and a note on where the sources disagree. The readings are drawn from books I own and the open web, and everything ships with its source labelled.

It runs on demand: pick a subject and the council convenes while you watch, taking a few minutes and a dollar or two of tokens. A video of a full run is coming. The code, the syllabi the councils have already produced, and the PRD I wrote for it are all public now.

The problem I actually have

I own 837 books. I’ve read 346 of them and reviewed 82. Somewhere in there is real knowledge about three or four odd subjects — West African Sufi scholarship, private equity eating American towns, who gets to tell a war’s story. Nobody handed me a curriculum for any of it.

I could write a short course on a few of these. I’d be good at it. I will never do it, because turning a pile of books into a course means sequencing them, choosing what to skip, and admitting what’s missing — a week of evenings per subject, and I have several subjects and no weeks.

Ask a chatbot instead and you get a plausible reading list in ten seconds containing books that don’t exist, chapters that don’t say what it claims, and no idea that I gave one of them two stars.

So the job isn’t replacing me. It’s doing the slow assembly work while my ratings, my abandoned books and my notes steer it.

First, what can this library even teach?

A Cartographer pass reads the whole shelf and answers that.

Every book already carries a catalog entry — genres, themes, mood, a description — written by Claude for the Sultan. All 756 catalogued books go into a single request, so the model proposes subjects having seen the entire library rather than a sample. It came back with sixteen, including several I wouldn’t have thought to name:

  • Technique and Attention: The Critique of Technological Society — Ellul, Mumford, Postman, Turkle, Odell. Twenty-one books, four of them read.
  • Ink and Sand: Islam and Scholarship in West Africa
  • Rereading Scripture: Islamic Feminism and Religious Authority
  • Knowledge Under Empire: Whose Science, Whose Reason?
  • Scheherazade’s Inheritance: Arabic Storytelling and Its Modern Retellings

Books are then matched to subjects in code, not by another model guess, so the counts are real and reproducible. My first attempt let one shared tag pull a book in, which put Sophie’s World in a course on the critique of technology and The Hunger Games in one on capitalism. Now each tag is weighted by how rare it is across my shelf: “elite overproduction” or “technique” carries a book in, “technology” or “resistance” barely moves it. Technique and Attention went from 128 books to 21.

Each subject then goes back to the model with its actual books for a verdict: can this library carry a full course, one strong unit, or not yet? Eleven courses, four units, one refusal.

What it says about the gaps is more useful than what it says about the strengths. On the technology course, where I own twenty-one books and have read four:

No feminist or labor critique of technology — no Ruth Schwartz Cowan, no Shoshana Zuboff on surveillance capitalism, no Astra Taylor or accounts of platform work. The political economy of attention is represented mainly by Wenger, a VC, rather than by anyone analyzing ownership, advertising markets…

That’s a shopping list.

The council

Pick a subject and six agents go to work.

Agent What it’s for Model
Lead (orchestrator) Opens the council by splitting the subject into four to six threads. Closes it by reconciling what comes back into units and objectives Opus 5
Researchers One per thread, running in parallel: propose readings, name gaps Sonnet 5
Isnad Verifies every claim about what a book covers. Strikes what it can’t confirm Opus 5
Counter-reader Asks whose account is missing from this shelf, and may add one outside reading Sonnet 5
Realist Length, order, entry point: could a person with a job finish this in six weeks? Sonnet 5
Audit Code, not a model. Every reading either ships or has a recorded reason —

Isnad is named for the chain of transmission classical scholars used to decide whether a report could be trusted: who heard this from whom, and can that chain be checked. It’s the agent I care most about, because it’s the one that removes things. “Chapter four covers the Mahdist revolt” is a hypothesis until it’s confirmed against the actual book, and an unconfirmed claim gets struck rather than softened.

The reason there are six is that their jobs genuinely conflict: rigour against breadth against feasibility. One agent told to weigh all three blends them into mush. That’s a claim I intend to measure rather than assert — see the bottom of this page.

What came out

The first real run, on Platform Capitalism, took 242 seconds and cost $0.80. It produced six units. Three things in it are worth showing.

Later runs cost more. Once I let researchers search the web as well as the shelf — which they need, because the shelf is a set of anchors, not a corpus, and some subjects hold only eight books — a run on Why Civilizations Come Apart took 17 minutes and $2.95: four agents searching in parallel across seven threads. Capping the split at four threads and one search each brings it back down. That dial is the economics of a multi-agent system in one setting.

The units know what they’re arguing with. From week three:

The live three-way fight of the course. Varoufakis: this is no longer capitalism; markets have been replaced by fiefdoms and profit by rent. Srnicek: it is capitalism, intensified. Evans and Schmalensee: ‘rent’ is the wrong frame entirely.

The counter-reader changed the syllabus. It objected that every confirmed reading treated platform economics as extractive by construction, then proposed Matchmakers: The New Economics of Multisided Platforms — checked as real and obtainable — and the lead built a whole week around it as the course’s only defence of platforms.

It admits what it couldn’t do. The lead’s own closing note says there’s no legal-doctrine unit because my library contains no legal scholarship at all, that labour is covered by a single ethnography, and that nothing outside the US and Britain made it in. A syllabus that names its own holes is more useful than one that pretends.

Elsewhere, the realist cut five readings as duplicative and wrote: “As submitted the workload is not honest — several units assign 400-700+ pages against a 150pp/week budget.”

The bugs worth admitting

It quoted me saying things I never wrote. Every “professor’s note” in the first run was the catalogue description of the book, presented as my voice. The model had two fields and picked the wrong one. That’s exactly the failure the whole design exists to prevent, so the fix isn’t a better prompt: my notes now arrive as their own labelled block, and any quote that isn’t literally in my review text gets stripped and logged.

Books vanished without a reason. The final syllabus mentioned readings that “did not survive verification,” but the verifier had only recorded one strike. Something else was dropping them silently. There’s now an audit step that checks every confirmed reading either appears in a unit or has a recorded reason, and flags any that disappear.

The verifier might be too soft. It struck one claim out of sixteen. That could mean the researchers were accurate, or it could mean Isnad is agreeable. I don’t know yet, which is the point of what’s next.

The interface

The council works in the open. Six seats around a ring, each showing its mandate, its model and its tools; threads light up as work passes between them; the transcript fills in with strikes in red and objections in pink; and the elapsed time and dollars climb in the middle the whole time.

I wanted two things from one screen: a professor’s tool that produces something worth reading, and an honest picture of what a multi-agent system is and what it costs to run.

The geometry is Islamic — a girih tessellation, an eight-pointed rosette, oversized Arabic calligraphy behind the hero — because the project is named for a majlis and its verifier is named for an isnad, and it would be strange to dress that in the usual dark-mode gradients.

I built my own version of the interface first and it came out looking like a scholarly library: parchment, gold rules, tasteful. Correct, and a bit dull. So I designed the real one in Lovable — dark, brutalist, oversized type — then pulled the code out and wired it to the agents myself. The first thing I did was delete its numbers: the mock had confidence scores like “93% signal” that no part of the pipeline produces. Everything on screen now comes from the shelf or from a run.

Next

  • A planted-flaw eval. Seed draft syllabi with known defects — a fabricated book, a chapter that doesn’t exist, a reading list carried by one perspective, 4,000 pages sold as six weeks — then measure what a single reviewer agent catches versus the full council. That’s the number that says whether six agents were worth it.
  • A video of a live run, start to finish, unedited.