▢→AgentMarkv0.2.0

4 · Syntax & Notation

The guiding principle: the core stays tiny. People should not need to learn a language to start. Everything advanced is optional.

The viral core:

[User] -> [Agent] -> [Model]
[Agent] -> [Tool]
[Agent] -> [RAG] -> [Data]
[Agent] -> [Eval] -> [Agent]

A few arrows, not fifteen. Reduce edge semantics to a small closed set. Anything more specific becomes an edge label.

[A] -> [B]    # uses / calls / sends to
[A] => [B]    # hands off / escalates to
[A] x> [B]    # blocks / forbids
[A] ~> [B]    # observes / subscribes to
[A] <-> [B]   # interacts with (two-way)

The <-> arrow models two-way / channel interaction — e.g. a user who talks to a harness over a chat channel and gets replies back the same way. Model the channel as a node and read it as one two-way chain — clearer than drawing the request and the response as separate edges:

[human#me: Me] <->[Telegram] [mcp#tg: Telegram MCP] <->[Telegram] [harness#hermes: Hermes]

If you do want to show the request and response as distinct directed edges, you can — the renderer fans out parallel edges between the same pair so the round-trip stays legible:

[human#me: Me] ->[/command] [mcp#tg: Telegram MCP] -> [harness#hermes: Hermes]
[harness#hermes] ->[response] [mcp#tg] -> [human#me]

Layout direction

Diagrams render left→right by default. Set direction: TB in the frontmatter (or use the editor's layout toggle / am render --direction TB) for a top→bottom flow.

---
agentmark: 0.2.0
title: Top-down view
direction: TB
---
[User] -> [Agent] -> [Model]

Edge labels for specificity:

[Agent]  ->[selects tools] [MCP Tool Selector]
[Agent]  ->[streams tokens] [Chat UI]
[Policy] x>[forbids]        [Delete Production DB]

Stable IDs for round-tripping. Every important node gets an optional stable ID via type#id: Label.

[agent#coder: Coding Agent]
[harness#codex: Codex Harness]
[middleware#mcp_selector: MCP Tool Selector]

The renderer shows pretty labels while the source retains durable IDs. That solves the reverse-diagram problem.

Properties. Fast-changing detail lives in { ... } property blocks, never in the node type:

[agent#coder: Coding Agent {roles: [coder, tester], autonomy: 3}]
[browser#chromium: Chromium {mode: headless}]
[middleware#mcp_selector: MCP Tool Selector {strategy: shortlist, top_k: 12}]

The preamble (YAML frontmatter):

---
agentmark: 0.2.0
title: Hermes Coding Harness
id: hermes-coding-harness
owner: Joel Tong
status: draft
as_of: 2026-06-02
review_by: 2026-06-16
timezone: Asia/Singapore
views: [topology, runtime, decision, risk, cost, eval]
imports:
  - agentmark/mcp@0.1
  - agentmark/a2a@0.1
---

Versioning the language (SemVer):

0.2.0 = experimental
1.0.0 = stable core
1.1.0 = backward-compatible additions
2.0.0 = breaking changes