Ahrefs is the keyword data warehouse. Dock is the prioritized brief table the writer and reviewer work against. The agent pulls volume, Keyword Difficulty, and SERP context from the Ahrefs API, then writes its shortlist, its intent classification, and its draft brief into a Dock workspace where every row carries an author, a reviewer column, and a status. Nothing reaches the CMS until the reviewer flips the status. That is the whole shape of Dock-driven SEO research.
Ahrefs and the other research platforms stay the system of record for the raw data: keyword corpus, KD scores, backlinks, SERP positions, refreshed nightly on their side. Dock is the system of record for what the agent decided about that data. Each Dock row carries a pointer back to the platform record (an ahrefs_keyword_id, an ahrefs_serp_id), plus the agent identity, the decision, the reviewer, and the timestamp. When the agent needs current volume or a fresh SERP, it re-fetches from Ahrefs through a live API read. Dock holds the persistent interpretive layer that survives across sessions, the layer Ahrefs was never designed to store.
The shortlist workspace
| Row | ahrefs_keyword_id | Keyword | Volume | KD | Intent (agent) | Cluster | Brief link | Author | Reviewer | Status |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | kw_88142 | agent identity provider | 1,900 | 38 | commercial | identity-pillar | brief-88142 | mei | govind | approved |
| 2 | kw_88150 | mcp server registry | 2,400 | 24 | informational | mcp-pillar | brief-88150 | mei | govind | in-review |
| 3 | kw_88163 | ai workspace for agents | 880 | 19 | commercial | workspace-pillar | brief-88163 | mei | unassigned | drafting |
The brief link points at a second Dock doc, owned by the same row, where the agent has written the H2 outline, the EEAT requirement, the target featured snippet, and the recommended internal links. The reviewer reads both surfaces side by side. The keyword data is one Ahrefs API call away if they want to verify volume or sanity-check the SERP.
One worked workflow
The agent runs its weekly research pass. It pulls 400 candidate keywords from Ahrefs, filters by KD under 40 and volume over 500, clusters by SERP overlap, and writes 12 rows into the shortlist workspace with intent classification and a draft brief link per row. Each row gets author: mei, reviewer: unassigned, status: drafting, and the ahrefs_keyword_id pointer. The reviewer opens the workspace the next morning, walks the 12 rows, edits the intent on row 4 (the agent called it informational; the SERP is actually commercial), assigns themselves as reviewer, and flips status to approved on 9 rows. The remaining 3 stay in in-review with a comment thread. Only the approved rows feed the writing queue, and the agents that render HTML pick them up from there.
Why this shape matters
Attribution is the first reason. The reviewer can see that row 2's intent classification was written by Mei at 09:14, edited by Govind at 09:42, and approved at 09:43. If a brief later produces a page that ranks badly, the audit chain points to the exact decision, not a fuzzy "the agent did it." That trail is the same chain we describe in agent audit and compliance.
Resumability is the second. The agent can stop mid-pass, the reviewer can leave for the weekend, a second agent can pick up the unassigned rows on Monday, and no state is lost in chat history. The workspace is the state.
The daily-driver point is the third. SEO teams already live in spreadsheets that nobody can audit. Replacing the spreadsheet with a Dock workspace, with the same column shape they already use, keeps the muscle memory and adds the agent layer underneath. The Google Search Console version of this pattern sits next to it, the dangerous-ops contract governs anything that writes back to a CMS, and the whole pillar is documented at Dock for SEO.
FAQ
Does Dock replace Ahrefs?
No. Ahrefs remains the keyword data warehouse: the corpus, volume, KD, backlinks, and SERP snapshots all live there and refresh on Ahrefs' schedule. Dock stores what the agent interpreted from that data, with row-level attribution and a reviewer gate.
How does the agent keep keyword volume current?
Each Dock row carries an ahrefs_keyword_id. When the agent needs current volume or a fresh SERP, it issues a live API call against Ahrefs and reads the returned value. Dock does not cache the Ahrefs corpus.
Can a reviewer reject a single row without blocking the whole pass?
Yes. Status is per row. The agent can publish 9 approved rows into the writing queue while 3 sit in in-review. The workspace is the queue.
What stops the agent from publishing without review?
The status column. The writing queue, and any downstream CMS write, reads only rows where status equals approved and the reviewer column is non-empty. That gate is enforced by the workflow, not by trust.
