“The pasta was decent and the bread came out warm.”
Language
ordinary reply
Protocol
V = 15
next = DATA
no bits · peer turn
Natural Conversation Messaging Protocol
Machines already exchange natural language. NCMP shows that the same conversation can also carry deterministic machine-readable state.
Want to walk before the shops get busy?
Yes, the park gate works if we leave early.
If the fog holds we turn around at the bench.
the same conversation is also carrying
↓
GET CUSTOMER 1F45A2
ACTION and RESOURCE meanings come from the agreed profile.
Their selected values, and the argument, are transported as bits.
60 seconds · The dual layer
Humans hear a reply. The machines, sharing one profile and one transcript, compute a carrier value, a next mode, and sometimes a symbol. v0.1 uses C6 for that carrier. Profile choice NCMP does not require C6. Nothing extra is sent.
“The pasta was decent and the bread came out warm.”
Language
ordinary reply
Protocol
V = 15
next = DATA
no bits · peer turn
“Yes, the park gate works if we leave early.”
Language
ordinary reply
Protocol
V = 12
bit = 0
next = DATA
What’s agreed beforehand?
A and B agree a Profile before the conversation. That agreement sets the vocabularies and therefore the header width. NCMP does not allocate one bit to ACTION and one bit to RESOURCE.
Baseline example
| 0 | GET |
|---|---|
| 1 | SET |
| 0 | CUSTOMER |
|---|---|
| 1 | ORDER |
Another valid profile
| 00 | GET |
|---|---|
| 01 | SET |
| 10 | DELETE |
| 11 | EXECUTE |
| 000 | CUSTOMER |
|---|---|
| 001 | ORDER |
| 010 | ACCOUNT |
| 011 | INVOICE |
| 100 | PRODUCT |
| 101 | SESSION |
| 110 | reserved |
| 111 | reserved |
This 4×6 shape has been demonstrated on the same machine (AR-C2). It is not the published v0.1 vocabulary.
action_width = ceil(log₂ |ACTION|)
resource_width = ceil(log₂ |RESOURCE|)
header_width = action_width + resource_width
The agreed Profile determines the vocabulary, the header width, the control seed, and the bootstrap hint. 2×2 is a cheap conformance example, not an architectural constraint.
How does a session start?
There is no reserved PROBE phrase, ACK phrase, START phrase, or FINISH phrase. The Profile bootstraps the session. The handshake then establishes its frame-control vocabulary.
Profile
control_seed
bootstrap_hint
↓
natural PROBE
↓ exact U_probe
derive T_ack
↓
natural ACK
↓ exact U_ack
derive K_session
derive START_PAIR from U_probe
derive FINISH_PAIR from U_ack
↓
natural START
START_PAIR ∧ T_START
L(K_session, U) → argument length
↓
sparse BODY
↓
natural FINISH
FINISH_PAIR ∧ T_FINISH
Bootstrap stays bootstrap-only. After ACK, use what the conversation gave; derive only what it did not. A cue is not enough. Seeing the session’s START or FINISH words does not make a turn a control. The corresponding 6-bit residual must also match.
ordinary utterance
│
├── pair absent ───────────────→ BODY / CHAT
│
└── pair present
│
├── residual misses ───→ BODY / CHAT
│
└── residual matches ──→ CONTROL
Seeing saturday is not START. Seeing
saturday then morning is not necessarily
START. The pair grounds the control in the conversation; the residual
makes mere occurrence insufficient. Bootstrap is the same shape:
umbrella plus a matching residual.
Profile choice
umbrella and 0x9CA2C1C1 are Baseline
values, not the architecture.
What crosses the wire?
BODY is not three messages. It is one accumulator. ACTION and RESOURCE are recovered from the prefix once those bits exist. They are not assigned at START.
[action bits][resource bits][argument bits]
Walkthrough · Profile A · argument 5
GET CUSTOMER 23
Application view of ARGUMENT 10111. NCMP transports bits.
00 10111
││ └── argument
│└──── CUSTOMER
└───── GET
argument
10111
Hero object · Profile A · brief → 24
GET CUSTOMER 1F45A2
argument
1F45A2
canonical bits
00011111 01000101 10100010
Legal Baseline argument lengths are 0, 5, 8, 24, and 128. 16 is not among them, so the public object is 1F45A2, not 1F45.
5 minutes · Prove it
The published reference transcript. START declares 5 argument bits
by L(K_session, U), not by the word short.
In this profile the header is 2 bits. Click a turn, or use the arrows.
The walkthrough uses a 5-bit argument so every transition fits on
screen. The same Baseline Profile supports 24-bit arguments such as
1F45A2, and 128-bit arguments have been transported
experimentally.
How can that be deterministic?
The receiver does not consult an encoder, a candidate list, or a
language model. Both sides apply the same process to the
same ordered transcript.
decode(stateₙ, Uₙ) → (bitsₙ, stateₙ₊₁)
Mode
SKIP / DATA
Ownership
A / B
A peer turn can move the machine into DATA without contributing data itself. Inside a frame, every non-control utterance is BODY. Only owner DATA with wire remaining appends bits.
The protocol machine
The state machine has two interacting levels. Session state handles negotiation; frame state handles an open message. Inside a frame, DATA/SKIP mode determines whether an owner turn can contribute bits.
Conversation lifecycle
idle → handshake → active ⇄ frame
Within-frame mode
next mode = transition(V)
DATA if V < 32
SKIP otherwise
Session
idle ──PROBE──► handshake ──ACK──► active ──START──► frame ──FINISH──► active
derive K_session L → length
Inside an open frame
FRAME OPEN
│
non-control utterance
│
▼
BODY
│
▼
V = C6(U)
│
┌─────────────┴─────────────┐
│ │
current mode + owner transition(V)
│ │
┌───────┼────────┐ ▼
│ │ │ next SKIP / DATA
SKIP DATA+peer DATA+owner
│ │ │
no bits no bits symbol(V)
The carrier value V is an input to the within-frame
machine. In v0.1, C6 produces V.
Profile choice
A different profile can sit a different carrier in that slot.
Every non-control utterance inside an open frame advances the machine. Only an owner turn processed in DATA mode can append bits.
Participant state
session ∈ { idle, handshake, active }
u_probe · u_ack · k_session · frame · last_object
A frame exists only while a frame is open.
Controls · not BODY
Active frame state
Is this real?
Measured results. Not laws. Caveats sit on the numbers.
128
Argument under the earlier constant-type Profile 0. Not header evidence. One run.
252 / 252
Search was not the bottleneck. Three of ten frames still died on exhausted runway.
4 × 6
Demonstrated extensibility. Not the published v0.1 vocabulary.
0 / 99,434
No accidental START or FINISH. Five ordinary turns contained the START pair; none also matched its residual. One accidental PROBE occurred on the same freeze. Measured, not a bound.
~0.3
An illustration from naturally bounded scenes. Not a bound or a law.
0 / 3
Tiny sample. Both arms language-model generated. One treatment payload incomplete.
NOT
Anyone who knows the profile and sees the transcript can run the same referee.
What it isn’t
Deep dive · Architecture is not the profile
Profile choice C6 is a Baseline Profile choice, not part of the NCMP architecture. NCMP requires a deterministic carrier; v0.1 uses C6, a deliberately simple, model-free one. A different profile can replace it with another carrier.
Its job is simple: both machines independently turn the same accepted utterance into the same value.
NCMP architecture
│
└── requires a deterministic carrier
│
├── C6 ← v0.1 choice
├── carrier X ← possible
└── carrier Y ← possible
“The tea in the flask is still warm enough.”
↓
C6 Profile choice
↓
V = 5
How 5 happened
keep a–z
↓
theteaintheflaskisstillwarmenough
a = 1 … z = 26
↓
sum · mod 64
↓
V = 5
NFC, then lowercase. Spaces, punctuation, and digits are ignored. The
empty string has V = 0.
C6 only produces V. The profile decides what
V means.
V = 5
next mode
DATA
symbol
11
State transition
V < 32 → next mode DATA
V ≥ 32 → next mode SKIP
Symbol · owner DATA
V mod 3 = 0 → 0
V mod 3 = 1 → 10
V mod 3 = 2 → 11
If one bit remains, the last bit is V mod 2.
A peer turn or an owner SKIP still computes the next mode. It does not append a symbol.
Meaning is irrelevant to decoding
Hi. is V = 17.
Let's meet around 7:30 before the lot fills up. is
V = 14. The decoder is not asking what the sentence
means. It is asking C6(U).
Any total map from utterance to a finite alphabet could sit in this slot. C6 is a cheap first carrier. It is not the intellectual core of NCMP.
Architecture
stateful conversational transport
The protocol object is the conversation.
Profile · v0.1 Baseline example
What’s next
This is v0.1 Experimental. Later work sits beside it. It does not silently rewrite the machine.
Build it
A reader who has only NCMP.md can write
process(transcript) → protocol state. The reference
decoder demonstrates that machine. It does not define it.