{"version":"2.1.224","anchor":"artifact-tool-gains-a-document-database-off-by-default","canonical_anchor":"artifact-tool-gains-a-document-database-off-by-default","heading":"Artifact tool gains a document database, off by default","tier":"soon","area":"Artifacts","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.224\/e\/artifact-tool-gains-a-document-database-off-by-default","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.224","markdown":"### Artifact tool gains a document database, off by default\n\nPublished artifacts can gain a document database Claude reads and writes, off unless you set the env var.\n\n**What**\n\nThe tool that publishes artifacts can now read and write a published artifact's document database, through two new actions `read_db` and `write_db`. Reads take a `db_op` of get, list or query; writes take set, update or delete, addressed by `collection` and `doc_id`. The actions only appear in the tool's schema when the `tengu_umber_lattice` gate is on (source fallback is false, real value from remote config) or the `CLAUDE_CODE_ARTIFACT_DB` environment variable is set.\n\n**Details**\n\n- A collection is a path of 1 to 31 slash-separated segments (letters, digits, `_ - . ~ : @ +` per segment), so subcollections nest like `boards\/b1\/columns`; `doc_id` is a single segment. There are byte caps on the composed document path and on serialized `data`.\n- Queries support `where` comparators including the Firestore-style `array-contains`, plus `order_by`, `limit` and `cursor`; list results page through a cursor.\n- Rows read back are wrapped in a `=== BEGIN ARTIFACT DB` fence and labelled as collaborator-written data, not instructions, and the read-consent prompt warns that collaborator-written rows will be read into the conversation.\n- Prompts flag ownership: a suffix of \"(someone else's artifact)\" or \"(ownership unconfirmed)\" and a shared-with note, and the consent prompt says the database is written by its collaborators when a share probe fails.\n- Consent is recorded per artifact for the session, once for reads and once for writes, with separate handling in plan mode and for notification-triggered reads.\n- Transcript lines render as \"read database\" and \"write database\"; verbose mode shows the target document and share status on writes.\n- Backend errors are normalised to a fixed set (not found, invalid argument, quota or rate, busy, upstream auth, store unavailable, not declared) each with a human remedy.\n- Read is treated as read-only and safe to run concurrently; write is not.\n\n**Evidence**\n\n`Read a published artifact's database \\u2014 collaborator-written rows will be read into the conversation`, `Database operation: 'get', 'list' or 'query' for read_db; 'set', 'update' or 'delete' for write_db. Required for both database actions; meaningless for every other action.`, `database write committed`, `CLAUDE_CODE_ARTIFACT_DB`, `Database collection path: 1-31 \"\/\"-separated segments (letters, digits, _ - . ~ : @ + per segment), so subcollections nest like \"boards\/b1\/columns\". Required for read_db and write_db.`\n\n- Flag `tengu_umber_lattice`: Off by default, switched on for this account (read for one account on one subscription tier against v2.1.224; this account: on, anonymous baseline: on, compiled default: off) These values were read against a different version of Claude Code, so treat them as the nearest reading available instead of one taken on this release.\n- Area: Artifacts\n- Names: `CLAUDE_CODE_ARTIFACT_DB`\n- Tier: Nothing to try yet\n- Useful: 3\/5\n- Signal: 5\/5\n- Present in the build but not switched on"}