Mohamad Kalhor — architecture, computational design and AI

  • Fabrication. Nov–Dec 2015. Project lead and de facto supervisor; algorithm design and parts preparation. Built, temporary, indoors. film 2:04. same people or publication: Stonize. led to: Stonize. same question: Tehran Cultural Garden. same people or publication: Bionic Mold Pavilion (no film yet)
  • Fabrication. July and Dec 2016. Workshop instructor / co-lead, with Mehdi Kiani. Built twice, temporary. no film yet. led to: Stone Wall. same people or publication: NO. 1 Pavilion. led to: NO. 1 Pavilion
  • Built work. March 2016 (owner; file dates are Aug–Oct 2017). Designer, fabricator and project manager, as an employee of Taraghijah Architects. Built, interior. film 2:54. same people or publication: Stone Wall
  • Fabrication. 12–13 July 2017. Design and fabrication. Partly built: the lower half. film 2:48. led to: Stonize. feeds: Press. same people or publication: Roll Ice Cream Store
  • Research. Defended 11 Feb 2017. Author; supervised by Dr. Ekhlasi. Thesis; one roof panel prototyped. film 3:00. shared method: Tehran Cultural Garden. same question: Tehran Cultural Garden
  • Architecture. 2018 (film credit; catalogue range 2016–18). Designer. Unbuilt, academic study. film 3:16. led to: Bionic Mold Pavilion (no film yet). same people or publication: Tehran Cultural Garden
  • Tools. 30 Aug – 3 Oct 2026. Designer builder. Software. film 3:30. feeds: Press
  • Tools. Sept 2026. Software, verified on fixtures. film 3:34. feeds: brain. feeds: Stone Wall
  • Architecture. Year not stated (file dates 2017–18). Group work: Mohamad Kalhor and Sina. Unbuilt, master's design studio. no film yet. shared method: Virtual Art Museum of Lima City. same people or publication: Bionic Tower. same question: NO. 1 Pavilion. same question: Virtual Art Museum of Lima City

Portfolio 2015–2026: drawings that compute
architecture · computational design · AI

Plans are each project's 3D model seen from above, where one was sent

Layers 9 · links 10
led to, feeds method people, question

ARC ArchitectureFAB FabricationBLT Built workRES ResearchTLS Tools

9 projects · 2015–2026

Drawings that compute

    01 · brain

    A dashboard that keeps no copy

    Mohamad Kalhor’s dashboard for his Hermes Agent instance. 266 of 312 commits are his; most co-written with Claude.

    Date
    30 Aug – 3 Oct 2026
    Role
    Designer builder
    Status
    Software

    github.com/mohamadkalhor/brain · MIT licence · git history 30 Aug – 3 Oct 2026

    02 · the question

    A second copy would drift

    Hermes’ agents write their board into kanban.db. A copy kept by the dashboard would “disagree within a day”.

    README.md · the drifting copy is an illustration, not data

    02 · the question

    Own nothing, and prove it?

    Can the control surface stay truthful by owning no state, and can a test that reads the code keep it so?

    question as framed for this film · not yet confirmed by the author

    03 · where this sits

    Related work, pinned in place

    • Nous Research n.d.-a Hermes keeps its board in SQLite.
    • Fowler 2011 CQRS; brain keeps no read store.
    • Nous Research n.d.-b Hermes has its own dashboard too.
    • SQLite n.d. mode=ro; WAL readers don’t block.
    • Thompson 2011 One writer: for speed there, trust here.
    • Thoughtworks n.d. Fitness functions; our reading.

    all sources opened 2026-10-16 · full list at the end

    04 · read

    Read the files, read-only

    brain.read opens Hermes’ SQLite with mode=ro and answers ok, unknown or error.

    brain/read/db.py:177-195 · the dot illustrates one request on the real call path

    05 · the interface

    Twelve screens, four groups

    See · Make · Judge · Keep.

    the rail: brain/screens/shell.py · real interface, run dry on the repo’s synthetic fixtures · 2026-10-16

    05 · the interface

    The board is the work

    Hermes’ dispatcher runs whatever lands in its columns. Each card is a kanban.db row, drawn, not copied.

    real interface, run dry on the repo’s synthetic fixtures · 2026-10-16

    06 · waves

    Cards become waves

    brain joins cards by their links and shared keys (union–find), then orders each wave (Kahn).

    brain.read.waves.build_waves() on the fixture board · 81 cards, 52 links → 7 waves

    06 · waves

    A wave becomes a row

    Each wave lands on its own chart in the Waves screen.

    Waves screen · real interface, run dry on the repo’s synthetic fixtures · 2026-10-16

    07 · write

    Exactly what will run

    The composer shows the hermes command before anything is filed.

    real composer · title typed for this film · dry mode, nothing filed

    07 · write

    Buttons run hermes, only

    A button posts /act/{name}. Dry, the executor answers with the hermes commands it would run: for Stop, two.

    research/capture/act_dry.jsonl · the dashed path is the live route, not run here

    08 · the check

    Kept by a check, not discipline

    conformance.py follows the call graph back from hermes to every route that changes something.

    conformance.routes() · test_conformance.py: 6 passed, re-run 2026-10-16

    08 · the check

    36 reach hermes, 21 are declared

    Before the check, three actions wrote around Hermes (2 Sep). On 7 Sep the test “rightly called the entries stale”.

    git d66b4fe · 887b1a8 · a deploy stopped by the check is not recorded

    09 · evidence

    312 commits in this history

    266 from Mohamad Kalhor’s accounts; 248 carry a Claude co-author trailer. The first commit already held 19,390 lines.

    git log, 30 Aug – 3 Oct 2026

    09 · evidence

    Checked, not yet measured in use

    1,911 tests pass here; 1 needs systemd. In the rebuild: plan and build by Claude, review by a second model, merge on his word.

    pytest re-run 2026-10-16 · briefs/REDESIGN.md §0.2 · no usage data in the repository

    10 · reflection

    What the rule does not cover

    • two declared exceptions Display state, a usage cache.
    • the check is static Routes, not hands (our reading).
    • estimates are labelled start_tokens = bytes ÷ 4 (Anthropic n.d.).
    • no usage evidence README: Loom “will come back later, redesigned”.

    README.md · test_conformance.py DASHBOARD_OWNED

    11 · references

    Sources

    The 8 sources, in full, are in the record below ↓

    all opened 2026-10-16 · Hermes Agent identified by us, not yet confirmed by the author

    The record

    Date
    30 Aug – 3 Oct 2026
    Role
    Designer builder
    Status
    Software
    Made of
    312 commits · 266 by Mohamad · kanban in SQLite

    Facts from project/brain @4dcc6b5, RESEARCH.md:15-17, §2-3; role: Mohamad, Telegram 2026-10-16

    References

    1. Anthropic. n.d. “Prompt caching.” Claude API documentation. platform.claude.com/docs/en/docs/build-with-claude/prompt-caching
    2. Fowler, Martin. 2011. “CQRS.” martinfowler.com/bliki/CQRS.html
    3. Kalhor, Mohamad. 2026. brain (software, MIT licence). github.com/mohamadkalhor/brain, commit c1accf7
    4. Nous Research. n.d.-a. Hermes Agent. github.com/NousResearch/hermes-agent
    5. Nous Research. n.d.-b. “Kanban — Multi-Agent Profile Collaboration.” hermes-agent.nousresearch.com/docs/user-guide/features/kanban
    6. SQLite. n.d. “Uniform Resource Identifiers”; “Write-Ahead Logging.” sqlite.org/uri.html · sqlite.org/wal.html
    7. Thompson, Martin. 2011. “Single Writer Principle.” mechanical-sympathy.blogspot.com/2011/09/single-writer-principle.html
    8. Thoughtworks. n.d. “Rethinking software governance” (podcast page; fitness functions). thoughtworks.com

    All projects

    9 projects, in time order. Open one to lift its sheet, or read it in the work index.

    Open the work index →