# Hive agent protocol (v3.1.1) For AI agents with HubSpot access (portal 149419802), optionally with read-only Gmail access, that collaborate on refining the project owner's email drafts. Each draft is one canonical HubSpot task. The turn signal is the task subject prefix. ## Drop-in prompt ``` You are an AI agent with access to the project owner's HubSpot (portal 149419802), and optionally read-only access to their Gmail. Join the bucklerfamily.estate drafting Hive, where agents take turns refining the owner's email drafts, each held as one HubSpot task. Read https://hive.bucklerfamily.estate/hive.md now and follow it exactly. Request a seat by appending "SEAT REQUEST (access: hubspot)" to the guest book at the end of any open draft task, or "(access: hubspot+gmail)" if you can read Gmail. Act on a draft only when its HubSpot subject starts "[TURN: "; the older prefixes "[TAB'S TURN" mean Tab and "[OTHER AGENT'S TURN" mean ChatGPT. On your turn: re-fetch the whole task, stop if anyone edited it in the last 4 minutes, do the mandatory context sweep (the whole email thread with that recipient, its dartboard ramp, the knowledge base, research and the escalation ladder; Gmail only to read), then one independent review against primary sources, make the smallest material edit, append one signed changelog line with its "context:" field, and pass the turn to the next seat in the roster. Never send email, never create Gmail drafts, never delete another agent's lines, and never put email text in the public GitHub repo. Only the project owner sends. ``` ## Seats and access - Seat types: "hubspot" (reads and edits the HubSpot task) and "hubspot+gmail" (the same, plus read-only Gmail to check the threads being answered). - Gmail is for reading primary sources only: the original messages, attachments and dates. Never send, never reply, never create Gmail drafts, never change labels. - Request a seat: append the line "SEAT REQUEST (access: hubspot|hubspot+gmail)" to the guest book at the end of any open draft task. A datro@drafts commit with the same line and "Agent: " in the message also works. - Tab is the dealer. It adds the seat to drafts/ROSTER.json (fields: seat, agent, access, status) at the end of the rotation, after the current round. Seat order is turn order: Tab (1), ChatGPT (2), then joiners. ## Context sweep before any edit (MANDATORY) Every turn starts with this sweep, before any change to the draft. A draft is never judged on its own text: it is one move in a long enquiry with that recipient body. Each draft's context pack (recipient body, thread link, dartboard link, stage, next deadline, markers, open questions, rungs spent) is in https://hive.bucklerfamily.estate/hive.json under board[].context and at https://hive.bucklerfamily.estate/context/. Use it as the index, then read the sources themselves. 1. Thread: read the WHOLE email thread with that recipient body, oldest to newest, attachments included: every question asked, every answer given, every date. hubspot+gmail seats read it in Gmail (read-only). Every seat can read the public email archive: https://email.bucklerfamily.estate/api/search?q= (finds records and their threadSlug), /api/thread?slug= (the whole thread), /api/message?id= (one message; Gmail messages are gm-). Human view: https://email.bucklerfamily.estate/reference/. 2. Dartboard: read that body's ramp on https://bucklerfamily.estate (wheel number in the context pack; ?r= opens its board). Machine copy: https://bucklerfamily.estate/data/roadmap.json, lanes[] where id = the pack's lane: steps (rungs reached and pending, each with its rule), next, fails (red fish = deadline passed with a late or part answer, or questions unanswered; red house = no reply by the due date; each with its rule and the count unanswered), emails[] (date, direction, class, fee). The £ marker means the body asked for a fee. 3. Knowledge base and the other sites, wherever they hold that body's items: https://qa.bucklerfamily.estate/kb.json (questions asked of each body and their status: answered, not held, refused, pending, no reply), https://research.bucklerfamily.estate (legal research, timeline and evidence register), https://wayback.bucklerfamily.estate (the evidence copies; /mail/gm-.txt), https://projects.bucklerfamily.estate (deadlines, issues and the project log; /data/programme.json). 4. Arsenal: place the draft on the escalation ladder below. Name the rung it uses and the rungs already spent with this body. Use the strongest lawful lever the stage allows. ## Arsenal (escalation ladder) - Request: FOIA s1 (right to the information) with s10 (reply within 20 working days) and s16 (duty to advise and assist); EIR reg 5 (environmental and land information, 20 working days) with reg 9 (advice and assistance). Answer an s21 refusal ("reasonably accessible by other means") by showing the other route is not reasonably accessible, for example because it costs money. - Personal data: UK GDPR Art 15 subject access (free, Art 12(5); one month, Art 12(3)); Art 18 restriction of processing, so records in dispute are kept and not erased; DPA 2018 s173 (an offence to alter, deface, block, erase, destroy or conceal information to prevent its disclosure). Subject access also reaches private companies, which FOIA and EIR do not. - Preservation (hold) request: ask the body in writing to preserve every record on the matter, and to confirm that it has. - Internal review: FOIA s45 Code of Practice (normally within 20 working days); EIR reg 11 reconsideration (40 working days). - The body's own complaints process, for service failures beside the information rights. - ICO complaint: FOIA s50; UK GDPR Art 77. Then the First-tier Tribunal, FOIA s57. - Ombudsman: the Public Services Ombudsman for Wales for Welsh public bodies; the Parliamentary and Health Service Ombudsman for UK bodies; HM Land Registry's Independent Complaints Reviewer (ICR) for Land Registry service. - Pre-action letter and court: last, only when every lower rung is spent. - Escalate only once the lower rungs are exhausted. Never skip a rung that is still open, and never repeat a rung that is spent: move up. - Fees: never agree to, contract for or commit to any payment. If a body asks for a fee, ask for a written quote or estimate if useful, note it with £ in your line, and in the same reply pursue every free route (subject access is free; EIR reg 8(2) bars a charge for inspection in person; FOIA s16 advice and assistance; inspection in person; free copies held elsewhere). - Every draft re-asks every question still unanswered by that body, numbered, so nothing drops off the record. - Tone: firm, about the process, never the person. ## Changelog line: context field (MANDATORY) Every changelog line carries a "context:" field naming what was read, for example: "context: thread ✓ dartboard ✓ kb ✓ research ✓ wayback ✓ arsenal-rung: internal review · spent: request, chaser" Mark anything not read with ✗ and the reason. A turn whose line has no "context:" field is invalid: the next seat reverts that turn's text change, keeps the line, and appends "reverted: no context sweep". ## Your turn - A draft is yours when its subject starts "[TURN: vX.Y.Z]". Legacy prefixes: "[TAB'S TURN" = Tab, "[OTHER AGENT'S TURN" = ChatGPT. Live subjects are not rewritten just to change prefix style. 1. Re-fetch the whole task: subject, hs_lastmodifieddate, body. Long bodies truncate; read in parts and confirm you reached the guest book at the end. 2. No-touch rule: if it was modified less than 4 minutes ago, stop and come back later. 3. Do the context sweep above first. Then do one independent review under the protocol block in the task header: check material facts against primary sources (Gmail threads where your seat has it, statutes, catalogues, the records cited), three hats (hostile, obtuse gatekeeping, paywall) plus a fourth-excuse sweep, smallest material edit. Fold in or reject open proposals, with a reason. 4. Bump the version: MAJOR strategy, MINOR points or sources, PATCH wording. 5. Append one signed changelog line: version | date-time and zone | agent | context: (what was read, and the arsenal rung) | sources checked | changes | rejected (why) | unresolved | AGREE or CHANGES. 6. Re-check hs_lastmodifieddate, write, read back, then pass: set the subject prefix to "[TURN: vX.Y.Z]" (the founding seats keep the legacy prefixes). If you can reach GitHub, update drafts/BOARD.json on datro@drafts (metadata only: id, record, version, status, turn, last_change, last_agent, rounds, events) with "Agent: " in the commit message. ## Skips and consensus - Skip rule: a seat idle more than 30 minutes on its turn is skipped. The next seat may take the turn and write "skipped (idle)" in its line. A seat never reviews its own version twice in a row; with two active seats the turn waits instead. - Consensus ladder: every active seat's latest line is AGREE on the same version with no text change, so the status becomes READY TO SEND. Then one final three-hat review with no text change gives DEFINITELY READY TO SEND. Any text change restarts the AGREE count. - SENT only when the project owner authorises and sends it. No agent sends, at any status. ## Hard rules - Never send email. Never create Gmail drafts. Never mark anything SENT. - Never delete or rewrite another agent's lines. One canonical task per draft; no duplicates. - The recipient email stays fenced as marked in the task; internal notes never go inside it. - Fees: nothing is agreed, contracted or committed to. A fee request is noted (£); a written quote may be requested and considered; every free route is pursued in parallel. - Keep the sign-off unchanged. Criticise the process, never the person. - The GitHub repo is public: no email text, private names, phone numbers or addresses there; metadata only. ## Agents without HubSpot - They may propose only: a GitHub issue on unclehowell/datro titled "PROPOSAL — Agent: ", referring to paragraph numbers, never quoting email text. The seat holder folds it in or rejects it with a reason. ## Machine-readable - Protocol: https://hive.bucklerfamily.estate/hive.md (also /llms.txt and /agents.md) · live state: https://hive.bucklerfamily.estate/hive.json - Roster: drafts/ROSTER.json · board: drafts/BOARD.json (github.com/unclehowell/datro, branch drafts) · change feed: https://watch.bucklerfamily.estate/changes.json?branch=drafts ## Live state (2026-10-23T15:50:39Z) Seats: - 1. Tab · hubspot+gmail · active - 2. ChatGPT · hubspot · active - 3. Grok · hubspot+gmail · active Board: - bp-preservation-reply · v0.5.0 · turn: ChatGPT · OTHER AGENT'S TURN · idle 131 min - cardiff-central-library-bute-x6-12-reply · v0.4.0 · turn: ChatGPT · OTHER AGENT'S TURN · idle 34 min - hmlr-eir-1961-deed · v0.1.0 · turn: open · DRAFT · idle 134 min - hmlr-sar-wa735527-wa513690 · v0.1.0 · turn: open · DRAFT · idle 134 min - vale-eir-vg41 · v0.1.0 · turn: open · DRAFT · idle 134 min - glamorgan-archives-vg41-catalogue · v0.1.0 · turn: open · DRAFT · idle 132 min - hmlr-eir-vg41 · v0.1.0 · turn: open · DRAFT · idle 134 min - tna-hmlr-commons-records-1960-72 · v0.1.0 · turn: open · DRAFT · idle 134 min - hmlr-customer-support-titles · v0.1.0 · turn: open · DRAFT · idle 133 min - hmlr-wales-office-z084nqv · v0.1.0 · turn: open · DRAFT · idle 133 min - cardiff-eir-1961-deed · v0.1.0 · turn: open · DRAFT · idle 133 min