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
NO. 1 PavilionNo.01
NO. 1 Pavilion
A cardboard mock-up of a larger shell: 315 cells, form-found, cut flat and tied by hand.
- Date
- Nov–Dec 2015
- Role
- Project lead and de facto supervisor; algorithm design and parts preparation
- Status
- Built, temporary, indoors
Scroll ↓
01 · FORM
Five arches, form-found
Each arch is a chain between two of ten ground points, let out to its 2015 length. Hung under its load and turned over, it stands in compression only.
SIMULATED · 2026 RE-RUN · GOALS FROM THE 2015 DEFINITION · KANGAROO2 MOMENTUM SOLVER · SOLVED HANGING, SHOWN FLIPPED
02 · PATTERN
Fewer cells where the shell narrows
308 seeds in eight rows on a flat strip: 49 at the base, 28 at the crown. Each Voronoi cell grows from its seed.
DESIGN DATA · 2015 DEFINITION · STRIP SHOWN TO WRAP SCALE
02 · PATTERN
A graded Voronoi, relaxed with fixed edges
The 93 boundary points stay fixed while 1,757 edges pull the cells even.
SIMULATED · 2026 RE-RUN · GOALS FROM THE 2015 DEFINITION · KANGAROO2 MOMENTUM SOLVER
02 · PATTERN
Wrapped around the form
The relaxed strip is rolled closed and mapped onto the shell surface, base row to crown row.
2015 DEFINITION · MAP TO SURFACE · ROLL SHOWN FOR CLARITY
03 · EQUILIBRIUM
The net relaxes on the form
The seam is welded and the whole net released. Edges shorten and the nodes slide until the forces balance.
SIMULATED · 2026 RE-RUN · GOALS FROM THE 2015 DEFINITION · KANGAROO2 MOMENTUM SOLVER
03 · EQUILIBRIUM
What holds the net
44 nodes are fixed, 18 base nodes slide on the ground, 21 nodes ride on the two skylight rings, drawn in Rhino over the crown.
2015 DEFINITION · BOUNDARY CONDITIONS · RINGS FROM LAYER “f”
03 · EQUILIBRIUM
315 cells
235 hexagons, 57 pentagons, 21 quads and 2 triangles. The re-run net lands within 10 cm (median) of the built cells.
NET MORPHS INTO THE BUILT GEOMETRY · 2015 MODEL
04 · CELLS
Checked in Karamba
Shell mesh, the two rings as Ø 5 cm tubes, supports below 0.27 m, self-weight. The largest stresses and deflections were at the arch legs.
2015 KARAMBA SETUP IN THE DEFINITION
04 · CELLS
Wraps sized to the load
Deepest at the supports, about 0.25 m; shallowest at the crown, about 0.08 m. In the definition the depth follows height.
WRAP DEPTH MEASURED ON THE 2015 MODEL · DEFINITION: HEIGHT REMAP 0.25 → 0.08 M
04 · CELLS
A cap, a wrap, and ties
Each cell is an outer cap and a side wrap; no inner cap, no jig. Neighbouring wraps are tied back to back, two ties per edge, and each cap once per edge. About 3,600 ties in the model.
TIE COUNT FROM ARCHIVE PHOTOS IMG_0264, 0294, 0304 · POSITIONS MODELLED
05 · ASSEMBLY
Built from the ground up
The cells along the five arches first, as ribs. Then the walls between them, from the ground. The crown last, closed from inside on stools and tables. No scaffolding.
SEQUENCE READ FROM THE 2015 PHOTOS · CELLS FROM THE 2015 MODEL
ARCHIVE PHOTO IMG_0576
ARCHIVE PHOTO IMG_0576 · NOVEMBER 2015 · SAME VIEW AS THE MODEL
A mock-up for a larger shell
Form-found, patterned, tensioned, sized, cut flat and tied by hand.
2015 PROJECT · 2026 RE-RUNS LABELLED
The record
- Date
- Nov–Dec 2015
- Role
- Project lead and de facto supervisor; algorithm design and parts preparation
- Status
- Built, temporary, indoors
- Made of
- 5 mm corrugated cardboard · 315 cells · 945 parts
- Size
- 4.32 × 4.91 m, plan
Facts from portfolio-catalog @3e57a77, Projects/z-NO. 1 Pavilion/PROJECT.md (role, dates, status, blurb_15, scale_value, units_produced); film ffprobe
Team
DESIGN AND INSTRUCTION
Mohamad Kalhor · initiator and lead, algorithm and parts
Mehdi Mofidi · Ashkan Foroughi
STUDENT BUILDERS
Nima Ferdowsi
Saina Shayanjoo
Saba Mahdiyar
Soha Rangi
Ehsan Kazerooni
Kiarash Kafi
Mina Fatemi
Behrooz Dehghan
Mohsen Rahmani
Ali Shirazi
Zahra Khoshnevis
Zahra Vaziri
Zahra Esnaashari
Mahtab Gharloghi
Mahya Fani
Ghazaleh Sharif
Mahdyar Amini
IUST FACULTY OF ARCHITECTURE, TEHRAN · NOV–DEC 2015
Virtual Art Museum of Lima CityNo.05
Virtual Art Museum of Lima City · Bachelor thesis · IUST · 2017 · part 3 of 5
A roof made of insect-eye cells
Can a deep cell, shaped like the eye of a fly, be both the structure of a roof and a valve that lets daylight in only when it is wanted?
- Date
- Defended 11 Feb 2017
- Role
- Author; supervised by Dr. Ekhlasi
- Status
- Thesis; one roof panel prototyped
Scroll ↓
Model: model maket detail.3dm (2017) · centre: the 12 modelled cells · around them: the same cell tiled, illustrative
Reference · the compound eye
One cell, one direction
An insect’s compound eye is an array of small cells, each looking along its own axis. The panel borrows the cell, not the optics: a deep hexagonal tube that takes light mainly along its axis.
Land 1997, Annual Review of Entomology 42 · eye drawn here as a schematic
The cell · design model
A deep hexagon in five layers
Each cell is 0.30 m across its corners and 0.40 m deep: a frame of tubes and ball nodes, diagonal cables, three servo units, a funnel of 24 flat faces and a top plate.
Model: layers 01–05, part counts read from the file · roles of the layers read from the model and the owner’s description, to be confirmed with the author
Light · computed in section
Depth narrows the direct light
A sun ray gets through only if it enters the top and leaves through the aperture at the bottom. Past a limit angle the funnel wall stops it. Close the aperture and no direct ray passes.
Computed from the model: θ = atan((w + a) / 2d), w 231 mm, d 0.40 m · opaque walls assumed · not measured · no daylight study is known
Motion · schematic, 2026
Three servos close the aperture
The bottom of the funnel is a three-pointed opening. Each servo arm reaches one inner point. Pull the three points to the axis and the opening shuts; push them out and it opens to a triangle.
Schematic motion, 2026 · mechanism read from the model, to be confirmed with the author: arms and pins meet the inner points · not a solved linkage · area computed from the moving points
Control · design intent
Each cell could answer its own light
The museum shows virtual work, so daylight should arrive only where and when it is wanted. As design intent, each cell could open and close on its own. The built cell reacted to light through sensors, coded in Arduino (owner).
Illustrative · one possible rule: close in direct sun, open in shade · the real sensor logic is not recorded · not a daylight simulation
Depth · design intent · computed index
Deeper cells could act as a space grid
The owner’s idea: make the cells deep and the layer of panels becomes a space grid that can carry the roof. In an idealised two-chord section the bending stiffness grows with the square of the depth.
Computed · I ≈ 2A(d/2)², chord area A fixed · chords assumed = top and bottom frame rings · 0.80 m is illustrative, twice the model · not a structural analysis
Fabrication · from the model
Laid out flat for cutting
In the model the parts are laid out flat on sheets: 1,103 cut curves and 12 engraved curves, placed by a Grasshopper definition.
Model: layers boresh::cut 1, cut 2, hack, border (Persian: boresh = cut, hack = engrave) · definition: 11-11-95 model maket sheets.gh · sheet material and machine to be confirmed with the author
Prototype · owner’s account
A cell was built and reacted to light
A physical cell was built with servos and light sensors, programmed in Arduino. The owner recalls it opening and closing in response to light. It is simpler than the model: a hexagonal frame with hinged funnel panels.
Photos: the built cell · owner: built during the thesis; the photo files carry camera dates of 5 Mar and 2 Jun 2018, still to be reconciled · scale not recorded · behaviour: owner’s account
Roof · design intent
Structure, shade and sensor in one
Adaptive facades are an established field (Loonen et al. 2013); Attia 2017 evaluates one built example, the Al Bahr Towers. The Fly’s Eye panel asks one deep cell to be structure, shade and light valve at once. The combination is the idea.
Loonen et al. 2013, Renewable and Sustainable Energy Reviews 25 · Attia 2017, QScience Connect · tiling and cloud are illustrative
Limits
An idea and a built cell
No daylight, structural or thermal evaluation is known. Mohamad Kalhori · B.Arch thesis, Virtual Art Museum of Lima City · supervisor Dr. Ekhlasi · IUST 2017.
Model, sheets and photos: the author’s archive · all diagrams drawn for this film · simulations labelled
The record
- Date
- Defended 11 Feb 2017
- Role
- Author; supervised by Dr. Ekhlasi
- Status
- Thesis; one roof panel prototyped
- Made of
- Fly's Eye roof panel · part 3 of 5 · IUST
Facts from project/bachelor-thesis @62c6dbf, RESEARCH.md:14, §9 row 2; animation/film_s3.html:442
brainNo.07
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
Scroll ↓
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
- Anthropic. n.d. “Prompt caching.” Claude API documentation. platform.claude.com/docs/en/docs/build-with-claude/prompt-caching
- Fowler, Martin. 2011. “CQRS.” martinfowler.com/bliki/CQRS.html
- Kalhor, Mohamad. 2026. brain (software, MIT licence). github.com/mohamadkalhor/brain, commit c1accf7
- Nous Research. n.d.-a. Hermes Agent. github.com/NousResearch/hermes-agent
- Nous Research. n.d.-b. “Kanban — Multi-Agent Profile Collaboration.” hermes-agent.nousresearch.com/docs/user-guide/features/kanban
- SQLite. n.d. “Uniform Resource Identifiers”; “Write-Ahead Logging.” sqlite.org/uri.html · sqlite.org/wal.html
- Thompson, Martin. 2011. “Single Writer Principle.” mechanical-sympathy.blogspot.com/2011/09/single-writer-principle.html
- Thoughtworks. n.d. “Rethinking software governance” (podcast page; fitness functions). thoughtworks.com




