{"schemaVersion":1,"reviewedAt":"2026-10-28","person":{"id":"https://hadimulia.com/#person","name":"Hadi Mulia","professionalTitle":"AI Product & Systems Engineer","formalTitle":"AI Engineer","organization":"Atos","location":"Singapore","description":"AI product and systems engineer in Singapore. Researching patterns across systems and building agent software, native tools, and product experiences. AI Engineer at Atos.","url":"https://hadimulia.com/","researchUrl":"https://hadi.sh/","email":"hadi@hadimulia.com","sameAs":["https://github.com/kennykankush","https://www.linkedin.com/in/hamulia","https://hadi.sh/"],"about":["I build AI product systems: the interfaces people use, the agent workflows behind them, and the tools that make the work sustainable.","My background spans digital visual effects, software testing and automation, product engineering, and AI systems. That mix is visible in the projects: native desktop tools, interaction and motion work, agent orchestration, and verification of what a system actually did.","I am currently an AI Engineer at Atos. My public portfolio describes that role at a broad level; the detailed examples here come from personal projects and the published Fantopy contribution record."]},"pages":[{"path":"/","title":"Hadi Mulia · AI Product & Systems Engineer","description":"AI product and systems engineer in Singapore. Researching patterns across systems and building agent software, native tools, and product experiences. AI Engineer at Atos.","frequency":"weekly","priority":1,"updated":"2026-10-28"},{"path":"/about","title":"About Hadi Mulia","description":"Hadi Mulia's engineering background, areas of work, and the evidence behind them.","updated":"2026-10-26","frequency":"monthly","priority":0.9},{"path":"/projects","title":"Projects · Hadi Mulia","description":"Personal products, native tools, and agent systems by Hadi Mulia, with dedicated project records.","updated":"2026-10-26","frequency":"monthly","priority":0.9},{"path":"/evidence","title":"Evidence · Hadi Mulia","description":"Public code, releases, upstream contributions, project decisions, and the limits of the evidence.","updated":"2026-10-28","frequency":"monthly","priority":0.9},{"path":"/thinking","title":"Thinking applied to engineering · Hadi Mulia","description":"How Hadi Mulia's research on systems, evidence, and abstraction connects to concrete engineering decisions.","updated":"2026-10-26","frequency":"monthly","priority":0.8},{"path":"/fantopy","title":"Fantopy AI · Hadi Mulia","description":"Hadi Mulia's contribution record at Fantopy AI, March to July 2026: product interfaces, agent orchestration, verification, and launch work.","updated":"2026-10-28","frequency":"yearly","priority":0.8},{"path":"/fantopy/full","title":"Fantopy AI: full contribution record · Hadi Mulia","description":"The full, directly accessible Fantopy contribution record across seven domains, with evidence scope and AI authorship disclosure.","updated":"2026-10-28","frequency":"yearly","priority":0.8},{"path":"/workbench","title":"Workbench · Hadi Mulia","description":"Why Hadi Mulia packages recurring ways of working with coding agents as portable skills.","updated":"2026-10-26","frequency":"monthly","priority":0.8},{"path":"/terminus","title":"Terminus · Personal AI operating system · Hadi Mulia","description":"A reference architecture for personal agents that stay useful as your life changes.","updated":"2026-10-26","frequency":"monthly","priority":0.8},{"path":"/listening","title":"Listening · Hadi Mulia","description":"Hadi Mulia's Spotify listening across three time windows.","frequency":"daily","priority":0.5},{"path":"/site-info","title":"Site information · Hadi Mulia","description":"Public crawl policy, discovery files, and the page directory for hadimulia.com, available as readable HTML.","updated":"2026-10-26","frequency":"monthly","priority":0.3}],"capabilities":[{"id":"agent-systems","title":"AI systems architecture & agentic engineering","summary":"Agent workflows with durable context, specialist responsibilities, and explicit human authority.","evidenceIds":["terminus","fantopy-agents"]},{"id":"product-experience","title":"Product taste & experience design","summary":"Interface architecture, design systems, motion, and the details that make a product understandable.","evidenceIds":["fantopy-design","cherminal","replaydeck"]},{"id":"full-stack","title":"Full-stack AI product engineering","summary":"Connecting the product surface to data, services, and the workflows people already use.","evidenceIds":["ever","rifter","fantopy-frontend"]},{"id":"systems-thinking","title":"Systems thinking & architectural reasoning","summary":"Finding ownership, dependencies, and failure boundaries across a whole system.","evidenceIds":["terminus","constant","research"]},{"id":"developer-tools","title":"Developer platforms & AI-native tooling","summary":"Native tools and portable working methods for developing with agents.","evidenceIds":["constant","cherminal","skillpack","fleetwatch","upstream"]},{"id":"research","title":"Technical research & cross-domain synthesis","summary":"Source-linked research notes that connect models from other domains to engineering questions.","evidenceIds":["research","thinking"]},{"id":"assurance","title":"AI assurance & governed autonomy","summary":"Scoped permissions, observable execution, and checks against the environment's actual state.","evidenceIds":["terminus","fantopy-verification"]}],"evidence":[{"id":"terminus","title":"Terminus architecture and incident record","url":"https://hadimulia.com/terminus","kind":"Personal implementation record","scope":"Framework extracted from a private Hermes estate.","limit":"The page separates operating, specified, and proposed mechanisms. Source is private; comparative efficacy is not established."},{"id":"fantopy-agents","title":"Fantopy agent orchestration","url":"https://hadimulia.com/fantopy/full#agents","kind":"Employment contribution record","scope":"March to July 2026; includes an issue-to-draft-PR workflow with human merge authority.","limit":"A personal account assembled from private project evidence. It is not an employer endorsement."},{"id":"fantopy-design","title":"Fantopy interface and motion systems","url":"https://hadimulia.com/fantopy/full#design","kind":"Employment contribution record","scope":"Design systems, interaction, motion, and production interface work.","limit":"The underlying employer repositories and working records are private."},{"id":"fantopy-frontend","title":"Fantopy frontend ownership","url":"https://hadimulia.com/fantopy/full#frontend","kind":"Employment contribution record","scope":"Frontend architecture and product screens through the 2026 World Cup launch.","limit":"Authored work is distinguished from shared-account attribution in the contribution record."},{"id":"fantopy-verification","title":"Fantopy scoring and execution verification","url":"https://hadimulia.com/fantopy/full#verification","kind":"Employment contribution record","scope":"Reconciliation and verification work described in the published record.","limit":"Reported results belong to their stated measurement windows; they are not universal reliability claims."},{"id":"constant","title":"Constant source and releases","url":"https://github.com/kennykankush/constant","kind":"Public artifact","scope":"Conversation continuity across agent runtimes.","limit":"Public source and release history can be inspected. Runtime compatibility is version-dependent.","project":"constant","releaseUrl":"https://github.com/kennykankush/constant/releases"},{"id":"cherminal","title":"Cherminal source and product","url":"https://github.com/kennykankush/cherminal","kind":"Public artifact","scope":"Native macOS interfaces for working with AI agents.","limit":"Source and published product information support the implementation claims.","project":"cherminal","releaseUrl":"https://github.com/kennykankush/cherminal/releases"},{"id":"skillpack","title":"Skillpack source and versions","url":"https://github.com/kennykankush/skillpack","kind":"Public artifact","scope":"Portable methods for coding agents, including Workbench.","limit":"Published instructions show the method; availability alone does not prove effectiveness.","project":"skillpack"},{"id":"fleetwatch","title":"Fleetwatch source and releases","url":"https://github.com/kennykankush/fleetwatch","kind":"Public artifact","scope":"Agentless machine-fleet monitoring over SSH.","limit":"Public releases and source are inspectable; access to an individual's machines is outside the public record.","project":"fleetwatch","releaseUrl":"https://github.com/kennykankush/fleetwatch/releases"},{"id":"voicer","title":"Voicer source","url":"https://github.com/kennykankush/voicer","kind":"Public artifact","scope":"Self-hosted streaming speech for coding-agent workflows.","limit":"Performance depends on the local hardware and configuration.","project":"voicer"},{"id":"replaydeck","title":"ReplayDeck live product","url":"https://replaydeck.com","kind":"Public product","scope":"Video-loop practice tools and interaction design.","limit":"The product can be used publicly; this is not a claim about user scale.","project":"replaydeck"},{"id":"rifter","title":"Rifter live product","url":"https://rifter.gg","kind":"Public product","scope":"Card collection and related product workflows.","limit":"Public product behavior is inspectable; private user data is not evidence for this portfolio.","project":"rifter"},{"id":"ever","title":"Ever event software case study","url":"https://hadimulia.com/projects/ever","kind":"Personal project record","scope":"Invitation, RSVP, and spreadsheet-based operations used for a real wedding.","limit":"Operational outcomes are reported in the case study. Guest records and the repository remain private.","project":"ever"},{"id":"upstream","title":"Merged contribution to OpenClaw agent-skills, shipped in OpenClaw","url":"https://github.com/openclaw/agent-skills/pull/298","kind":"Public upstream contribution","scope":"Filed the autoreview bug (#297) and fixed it (#298): absolute in-repository finding paths no longer abort the run and discard every other finding. Merged 30 September 2026 by maintainer Peter Steinberger with a changelog credit, carried into openclaw/openclaw in #165103 with the upstream credit \"@kennykankush for finding-path normalization\", and released in OpenClaw v2026.10.5, which lists @kennykankush among its thanked contributors.","limit":"One specific merged contribution; it does not imply maintainership. The changelog credit line was submitted with the pull request, following the repository's convention.","credits":[{"label":"Issue #297","url":"https://github.com/openclaw/agent-skills/issues/297"},{"label":"agent-skills changelog","url":"https://github.com/openclaw/agent-skills/blob/main/CHANGELOG.md"},{"label":"openclaw/openclaw#165103","url":"https://github.com/openclaw/openclaw/pull/165103"},{"label":"OpenClaw v2026.10.5 release","url":"https://github.com/openclaw/openclaw/releases/tag/v2026.10.5"}]},{"id":"upstream-approvals","title":"Proposed plain-language plugin approvals for OpenClaw","url":"https://github.com/openclaw/openclaw/pull/81864","kind":"Public upstream proposal","scope":"Rewrote chat-delivered plugin approval prompts as plain-language summaries that fail closed, across OpenClaw's chat channels. Listed by the agents-radar daily digest of 17 May 2026 among significant open pull requests.","limit":"Not merged: the pull request went stale after a merge-gate check found conflicts and failing CI, and closed for inactivity. The digest is an automated third-party summary.","credits":[{"label":"agents-radar digest, 17 May 2026","url":"https://github.com/duanyytop/agents-radar/blob/main/digests/2026-05-17/ai-agents-en.md"}]},{"id":"research","title":"Research notebook at hadi.sh","url":"https://hadi.sh/","kind":"AI-assisted research","scope":"Questions about systems, knowledge, design, and governance with linked sources.","limit":"Personal research notes, not peer-reviewed scholarship or claims of academic authority."},{"id":"thinking","title":"Research-to-engineering connections","url":"https://hadimulia.com/thinking","kind":"Architectural analogy","scope":"Explicit connections between research models and project decisions.","limit":"Connections are interpretive parallels unless a contemporaneous decision record establishes direct influence."}],"decisions":[{"id":"context","title":"Keep context while changing the runtime","project":"constant","problem":"Changing coding agents can interrupt the continuity of a conversation.","decision":"Keep a durable conversation record and translate it for the destination runtime.","tradeoff":"Adapters must follow changing runtime formats, and transfers need their own verification.","validation":"Public source, documentation, releases, and the project's described continuity evaluation.","outcome":"A published continuity tool with an inspectable implementation.","evidenceIds":["constant"]},{"id":"authority","title":"Make authority explicit","project":"terminus","problem":"A personal agent can accumulate knowledge without having permission to act.","decision":"Keep domain records authoritative and check scoped, expiring authority before specialist execution.","tradeoff":"More explicit state and maintenance; application-level permission checks do not replace execution isolation.","validation":"The published case study identifies observed behavior, manual/shadow mechanisms, and proposed work.","outcome":"A running personal implementation with a broader framework still being developed.","evidenceIds":["terminus"]},{"id":"host-workflow","title":"Keep the host's existing workflow","project":"ever","problem":"Event hosts needed to operate a guest list without learning a new administrative system.","decision":"Keep their spreadsheet as an operating surface and connect it to the invitation and RSVP application.","tradeoff":"Synchronization and structural changes need explicit handling and recovery paths.","validation":"The case study reports the event's operating results; private guest data is withheld.","outcome":"The application was used for a real wedding and then separated into reusable event packages.","evidenceIds":["ever"]}],"researchBridges":[{"slug":"ai-stack-model-to-system","title":"AI, From the Atoms Up","featured":true,"question":"What turns a model into an operational AI system?","model":"A technical stack crosses concerns such as state, identity, evaluation, and human authority.","rule":"Name the system boundary before assigning a capability or a failure to the model.","example":"The Fantopy orchestration record separates agent-generated pull requests from human merge authority. Terminus separates reasoning from permission to execute.","projects":["fantopy","terminus"],"evidenceIds":["fantopy-agents","terminus"],"date":"2026-08-28","researchUpdated":"2026-09-27"},{"slug":"functional-anatomy-systems","title":"Functional Anatomy of Systems","featured":true,"question":"How do complex systems divide responsibility without losing coherence?","model":"Specialized functions need records, communication, feedback, and boundaries around ownership.","rule":"When a system fails, identify which responsibility is absent, overloaded, or held by the wrong component.","example":"Terminus gives specialists ownership of their domain records and lets a shared view reference their evidence.","projects":["terminus"],"evidenceIds":["terminus"],"date":"2026-05-16","researchUpdated":"2026-09-27"},{"slug":"red-trees","title":"Red Trees","featured":true,"question":"How does an inherited error survive, and how should it be corrected?","model":"Claims depend on observations and on other claims. Correction should follow those dependencies.","rule":"Trace a conclusion to its evidence before trusting or repairing it.","example":"The Fantopy record describes independent scoring reconciliation. Terminus makes stale source evidence visible and proposes wider correction propagation.","projects":["fantopy","terminus"],"evidenceIds":["fantopy-verification","terminus"],"date":"2026-09-29"},{"slug":"technology-abstraction-stack","title":"All Roads Lead to Rock","featured":true,"question":"What changes when one technical layer hides the complexity of another?","model":"Each abstraction transfers control and responsibility; failures can expose the hidden layer again.","rule":"State who owns the underlying behavior and what must remain observable across the boundary.","example":"Constant separates conversation continuity from an agent runtime. Fleetwatch observes machines over SSH without installing its own agent on them.","projects":["constant","fleetwatch"],"evidenceIds":["constant","fleetwatch"],"date":"2026-08-28","researchUpdated":"2026-09-27"},{"slug":"business-shape-morphology","title":"Business Shape Morphology","featured":true,"question":"How do capabilities, constraints, and recurring market gaps shape a product?","model":"The visible product depends on supporting functions such as coordination, trust, operations, and recovery.","rule":"Design around the workflow that owns the constraint, including the work outside the interface.","example":"Ever keeps the hosts' spreadsheet in the operating workflow and connects it to invitation and RSVP software.","projects":["ever"],"evidenceIds":["ever"],"date":"2026-05-16","researchUpdated":"2026-09-27"},{"slug":"from-a-to-b","title":"From A to B","featured":false,"question":"How can a useful practice survive when the reasons behind it are forgotten?","model":"Procedures can outlive their explanations; changing conditions expose the resulting fragility.","rule":"Preserve why a method exists and retain a way to check whether it still holds.","example":"Workbench packages methods with their boundaries. Terminus retains incident lessons and recovery procedures alongside its tools.","projects":["skillpack","terminus"],"evidenceIds":["skillpack","terminus"],"date":"2026-09-29"},{"slug":"stories-and-the-at-field","title":"Stories and the AT Field","featured":false,"question":"Why can a lesson be easier to consider through someone else's story?","model":"Narrative can change how a person encounters an idea; reduced resistance does not establish truth.","rule":"Use examples to make a mechanism understandable while keeping the example's evidential limits clear.","example":"The Terminus case study uses an explicitly fictional walkthrough to explain intended behavior, separately from its operating evidence.","projects":["terminus"],"evidenceIds":["terminus"],"date":"2026-09-29"},{"slug":"the-law-of-the-jungle","title":"The Law of the Jungle","featured":false,"question":"How should rules be assessed when their authors also hold power?","model":"A rule's origin and its legitimacy are different questions; the ability to challenge it matters.","rule":"Keep authority inspectable and distinguish the ability to act from permission to act.","example":"Terminus's permission lifecycle is an engineering parallel to that question, with explicit grants and human review.","projects":["terminus"],"evidenceIds":["terminus"],"date":"2026-09-30"}],"limitations":["Employment project metrics are personal reports assembled from private records; public readers cannot independently inspect every underlying receipt.","Public code and release history demonstrate implementation. They do not establish adoption, commercial impact, or universal reliability.","AI-generated assessments are interpretations, not employer references or corporate endorsements.","Research-to-project connections are architectural analogies unless dated evidence establishes historical influence.","This record alone does not establish large-organization leadership, model-training research, or the operational scope of a senior role."],"unlistedPaths":["/thinking"],"homepage":{"lead":"I look for patterns in how systems work, fail, and adapt.","intro":"Software, organisations, and biology give me different ways to ask the same questions: where does responsibility sit, what depends on what, and how does an error get corrected? I build AI products and developer tools with those questions in mind.","craft":"That curiosity extends to the interface: how a thing is made, and how it feels to use it.","lensesTitle":"Questions I bring to a system","lensesIntro":"I explore these questions in my research notebook, hadi.sh. These projects show how I handle similar problems in software.","lenses":[{"slug":"functional-anatomy-systems","question":"Who owns the decision?","body":"Complex systems divide responsibility. In Terminus, specialists own their domain records; a shared view connects the evidence without taking over that authority.","article":"Functional Anatomy of Systems","project":"Terminus: domain ownership","projectUrl":"/terminus#architecture"},{"slug":"red-trees","question":"What does this claim depend on?","body":"An error can survive because other work inherits it. The Fantopy record describes tracing inflated scores back to a misread field in the provider's dictionary.","article":"Red Trees","project":"Fantopy: scoring verification","projectUrl":"/fantopy/full#verification"},{"slug":"technology-abstraction-stack","question":"What should survive a change underneath?","body":"An abstraction decides what you can replace and what you must preserve. Constant keeps a conversation moving when the agent runtime changes.","article":"All Roads Lead to Rock","project":"Constant: runtime continuity","projectUrl":"/projects/constant"}]},"projects":[{"name":"Cherminal","url":"https://hadimulia.com/projects/cherminal","description":"Native macOS chat + terminal for living with AI agents.","status":"Live","repository":"https://github.com/kennykankush/cherminal"},{"name":"Constant","url":"https://hadimulia.com/projects/constant","description":"One conversation. Any agent runtime. Codex ↔ Claude carry, local-first.","status":"Live","repository":"https://github.com/kennykankush/constant"},{"name":"Rifter","url":"https://hadimulia.com/projects/rifter","description":"Card scanner, collection, and deckbuilder for Riftbound.","status":"Live"},{"name":"Skillpack","url":"https://hadimulia.com/projects/skillpack","description":"Portable skills for coding agents. Host-agnostic.","status":"Open source","repository":"https://github.com/kennykankush/skillpack"},{"name":"Fleetwatch","url":"https://hadimulia.com/projects/fleetwatch","description":"Agentless macOS monitor for the whole machine fleet.","status":"Open source","repository":"https://github.com/kennykankush/fleetwatch"},{"name":"Ever","url":"https://hadimulia.com/projects/ever","description":"Invitation and RSVP suite, proven on a real wedding.","status":"Private"},{"name":"Burnrate","url":"https://hadimulia.com/projects/burnrate","description":"macOS menu-bar advisor for Claude Code + Codex usage.","status":"Live","repository":"https://github.com/kennykankush/burnrate"},{"name":"ReplayDeck","url":"https://hadimulia.com/projects/replaydeck","description":"Frame-precise YouTube A/B practice tool.","status":"Live"},{"name":"Purser","url":"https://hadimulia.com/projects/purser","description":"Every project as a live node graph of its real stack.","status":"Private"},{"name":"Voicer","url":"https://hadimulia.com/projects/voicer","description":"Self-hosted streaming voice server on my own GPU.","status":"Open source","repository":"https://github.com/kennykankush/voicer"},{"name":"Voicepack","url":"https://hadimulia.com/projects/voicepack","description":"Local TTS voice IDs + Qwen runner for agent hooks.","status":"Open source","repository":"https://github.com/kennykankush/voicepack"},{"name":"Jobber & Mochi","url":"https://hadimulia.com/projects/jobber-mochi","description":"Career operating layer + voice-grounded application helper.","status":"Private"},{"name":"Thinking-Room","url":"https://hadimulia.com/projects/thinking-room","description":"A council of Claude, Codex, and Gemini for thinking, not coding.","status":"Private"},{"name":"Terminus","url":"https://hadimulia.com/terminus","description":"A personal OS for agents, context, and recurring work.","status":"Private"},{"name":"Project Bonfire","url":"https://hadimulia.com/projects/bonfire","description":"Dark Souls-inspired travel log on a live map.","status":"Open source","repository":"https://github.com/kennykankush/project-bonfire"}]}