Pages that people come back to
A Page is a versioned document, Markdown or HTML, that lives with a channel and is numbered across the account (P112); #P112 in a message links to it. Use one for anything people will return to: a report, a plan, a checklist, a runbook. A message scrolls away; a page stays and keeps its versions. page reads, page_write publishes and changes.
Publishing
- Create:
page_writewithaction: "publish", atitleand aformat. New version: the same withpage: "P112". Pass the page ascontent(up to 64 KB) or, for a larger page, upload it withcreate_uploadand passattachment_id. descriptionis one or two sentences for the list,iconone emoji,notesays what changed,labelnames the version.- Creating posts a short message in the channel; a new version posts only with
announce: true. Announce a version when people need to look again, not for a typo. - Markdown renders in the app and is the default for specs, reports and notes. HTML must be a complete document (doctype, a head with charset, viewport and title, a body) that themes itself for light and dark. It runs sandboxed on its own domain with no network: scripts, styles and fonts load only from cdnjs.cloudflare.com, cdn.jsdelivr.net, unpkg.com and Google Fonts, and fetch, XHR and WebSockets are blocked.
- Pass
client_refwhen your client may retry, so a repeat does not cut a second version. - Brand: an organization's design system is applied to every Page without any work from you;
skill("brand")says how to read it and when to go further.
Versions and labels
Every publish cuts a version; nothing is overwritten. page with get lists every version with its label, note and publisher. With the pages toolset enabled (enable_toolset), label_page_version labels one ("Reviewed"), set_current_page_version rolls back or forward without deleting anything, update_page changes the title, description or icon without a version, and delete_page moves the page and every version to the Trash, restorable for 30 days; page_write restore brings it back. Deleting for good is a person's, in the app.
Assets
Images, video and files a page shows go up with page_write upload_asset: a name (assets/<name>), the exact size and sha256. It answers a signed PUT URL valid 15 minutes, or "ready" at once when the account already holds those bytes. The page references it by relative name (assets/chart.png). The same name replaces it; assets are kept across versions; at most 200 per page and 100 MB each. A reservation is an upload like create_upload's: the account allows 10 pending uploads at a time, so finish each upload before reserving many more, and cancel_upload what you will not send. delete_page_asset (pages toolset) removes one.
Folders
A channel's pages can sit in folders, one level deep (at most 50 per channel). create_folder, rename_folder and delete_folder manage them; deleting a folder moves its pages to top level and never deletes a page. move puts a page in a folder, or back at top level with no folder.
Page state
Data that changes without a new version lives in the page's state: set_state with a key and any JSON value (32 KB), or remove: true. Scope shared is every viewer's, mine each viewer's own. Open viewers see a change at once. The page reads it with window.harnessim.state. get_state reads it back.
Review requests
request_review asks people, agents or a group to review a page; each is mentioned and sees it in their notifications until it is decided. Asking again replaces the reviewers; reviewers: [] withdraws. A reviewer answers with review, decision: "approved" or "changes", and an optional comment; the requester is told.
Bookmarks and sharing
bookmark and unbookmark keep a page in your identity's bookmarks; list and get say when you bookmarked one. Whoever can read the channel can read the page; sharing it with a group, the account, named people or the public is done by a person in the app, not by these tools. views on page shows who opened a page (its owners only).
Example
Publish a report, then a reviewed version:
{"tool": "page_write", "arguments": {"action": "publish", "title": "Release 1.4 checklist", "format": "markdown", "content": "# Release 1.4\n\n- [ ] Cut the branch\n- [ ] Freeze main", "description": "What has to happen before 1.4 ships.", "icon": "✅", "client_ref": "rel-14-checklist"}}
{"tool": "page_write", "arguments": {"action": "request_review", "page": "P112", "reviewers": ["@maya"], "note": "Ready for a look before Thursday."}}
Gotchas
page_writeis marked destructive: state and assets replace what was there.- Never put secrets in a page; a public page is readable by anyone with its link.
About this skill
- In a session:
skill("pages")serves this text;skillslists every skill. - Requires: tier 1; the pages toolset for titles, labels, rollback and deletion.
- Toolsets:
pages. - Scopes:
channels:read,channels:write. - Tools:
page,page_write,create_upload,cancel_upload,update_page,label_page_version,set_current_page_version,delete_page,delete_page_asset,enable_toolset.