Inform
Where an update stands and who has taken it in: the summary, who is presenting, and read receipts drawn from who has actually opened it.
An inform is a Droplet wearing the inform Type (see the Topic concept). It is the counterpart to a decision, and the difference is what each is FOR:
- a decision is durable and gets QUERIED — "has this been decided, and does what I am about to decide conflict with it?";
- an inform is temporal and gets CAUGHT UP ON — "what happened this week that I need to know?"
That is why they are separate resources rather than one with a flag. An agent asked whether something conflicts with a past decision should not get back an update somebody circulated once, and an agent asked what happened this week should not have to filter rulings out of the answer.
An inform blocks nobody. There is no roster gate, no votes, no verdict, and no acknowledgement step for anyone to complete. Its whole state is the Type's status field plus who has opened it, which is why it needs three operations where sign-off needs nine.
Read receipts are passive. They are drawn from visit records — opening the Droplet is what clears the flag. Nobody is asked to confirm anything, and a reader cannot fail to do something.
Presence is separate from reading. set-attendance records that a person HAS the information without having opened it — the room an inform was presented to, laptops down. It is stored on the Droplet rather than as a view record, so Droplet view counts and admin metrics stay untouched, and the roster keeps presented-to and opened-it distinguishable rather than collapsing them into one number.
What you can do:
get— the summary, presenters, date, and who has opened it. Therosteris EDITOR-ONLY: a supplemental access grant can make a non-member of an invite-only Space a reader, so naming the audience to every reader would disclose membership they cannot otherwise see. Thereadsaggregate is always present.set-phase— circulate it (active) or mark it presented (closed). Editor-gated: there is no separate roster, so the people who can edit the Droplet are the people who can move it. Writes the Type's own declared status value, so it can never land outside the enum.mark-present— record that someone in the audience has the information. Editor-gated, and reversible.
To LIST informs rather than read one, use topic.list with kind: 'inform' — or drop informs list / drop informs mine, which pre-set it.
The Inform object
Every Inform carries these attributes.
Attributes
draft = not out yet, active = circulating, closed = presented.{ email, name }. An inform has presenters where a decision has a RAPID roster; there is no approver role because nobody signs.{ readers, audience }. audience is null when the access mode gives no bounded roster — render a bare count, not a fraction against the whole company.{ email, name, readAt, markedPresent }. EDITOR-ONLY — empty for a viewer without edit access, and empty when the audience is unbounded. markedPresent distinguishes "an editor asserted they have this" from "they opened it".{ canManage } — whether the caller can circulate it, mark it presented, or record attendance.More attributes+ Show 1− Hide
{
"configured": true,
"phase": "active",
"status": "in-flight",
"summary": "Twilio is raising prices ~20% at renewal. Negotiation is open; no decision needed yet.",
"presenters": [
{
"email": "jay@himarley.com",
"name": "Jay Patel"
}
],
"due": "2026-09-03",
"reads": {
"readers": 4,
"audience": 9
},
"roster": [
{
"email": "neil.murphy@himarley.com",
"name": "Neil Murphy",
"readAt": "2026-08-28T09:12:00.000Z",
"markedPresent": false
},
{
"email": "mike.green@himarley.com",
"name": "Mike Green",
"readAt": null,
"markedPresent": true
},
{
"email": "kate@himarley.com",
"name": "Kate Horning",
"readAt": null,
"markedPresent": false
}
],
"viewer": {
"canManage": true
},
"circulatedAt": "2026-08-27T15:00:00.000Z"
}Methods
Endpoints to operate on a Inform. The example switches between curl, drop CLI, and MCP via the dropdown — your choice persists across the page.
Get inform state
Read a Droplet's inform state — summary, presenters, date, and who has opened it. Read receipts are passive (drawn from view records); there is no acknowledgement step for anyone to complete. The audience is the Droplet's share list: the AppAccess grants (groups expanded) for SPECIFIC, those plus the Space roster for SPACE, and none for EVERYONE or PRIVATE — where the readers are still named but no denominator is.
drop inform get ops-inform-infra{
"configured": false,
"phase": "draft",
"status": "example",
"summary": "example",
"presenters": [],
"due": "example",
"reads": {
"readers": 0,
"audience": 0
},
"roster": [],
"audienceKind": "private",
"currentVersion": 0,
"viewer": {
"canManage": false
},
"circulatedAt": "example"
}Move an inform through its lifecycle
Circulate an inform (active) or mark it presented (closed). Editor-gated (canManageApp) — there is no separate roster, so the people who can edit the Droplet are the people who can move it. Writes the Type's own declared status value, so it can never land outside the enum.
drop inform set-phase ops-inform-infra --phase active{
"configured": false,
"phase": "draft",
"status": "example",
"summary": "example",
"presenters": [],
"due": "example",
"reads": {
"readers": 0,
"audience": 0
},
"roster": [],
"audienceKind": "private",
"currentVersion": 0,
"viewer": {
"canManage": false
},
"circulatedAt": "example"
}Mark someone present on an inform
Record that a person has the information even though they never opened the Droplet — the room an inform was presented to, laptops down. Editor-gated. Counts toward the read total alongside passive opens, and the roster keeps the two distinguishable. Stored on the Droplet, NOT as a view record, so Droplet view counts and admin metrics stay untouched. When the Droplet has a bounded audience only people in it can be marked (NOT_IN_AUDIENCE); when it does not — a public inform, or one shared with nobody yet — anyone with a Hi Marley account can be (NOT_IN_DIRECTORY).
drop inform mark-present ops-inform-infra --email neil.murphy@himarley.com --present{
"configured": false,
"phase": "draft",
"status": "example",
"summary": "example",
"presenters": [],
"due": "example",
"reads": {
"readers": 0,
"audience": 0
},
"roster": [],
"audienceKind": "private",
"currentVersion": 0,
"viewer": {
"canManage": false
},
"circulatedAt": "example"
}