© 2026 constantin.studio — resourcesPrimitives for AI-native interfaces

Thinking

Expandable traces — steps, reasoning, search, coding.

Reading collection manifests
Scanning contributor records
Comparing licence terms6 collections
Writing the intake report

Streaming answer

Provenance at three depths: chip, count, full list.

Contributor attribution is the archive's largest gap: 38% of the 1974 series has no named photographer, and licence terms are missing on half of those. Source: archive-index.example.orgTwo partner catalogues publish the same series with fuller records.

Follow-ups

Approval

Human in the loop. One question at a time.

How many collections should we index first?

Loading

Pending work, with the time it has taken.

Indexing collections

Reading 6 collections. This runs in the background, so you can leave the page.

Empty

Three emptinesses, and they are not the same thing.

No collections yet

Point the indexer at a source and its assets will appear here as they are read.

Error

What happened, what to do, detail underneath.

Couldn’t read the Rijksmuseum collection

The source returned an unexpected response. Nothing was written to the index.

GET /collections/rijksmuseum/assets → 502 Bad Gateway (request 8f21c4, 14:22:07)

Status

Five run states, each carrying its own glyph.

Cleveland Museum1,204 assetsIndexed
Art Institute412 of 980Running
Rijksmuseum502 from sourceFailed
Smithsonianwaiting on keyQueued
Harvard Artlicence unresolvedBlocked

Inline alert

A condition that persists, dismissed on purpose.

Three connectors are dormant

Rijksmuseum, Smithsonian and Harvard are written but waiting on API keys.

Toast

It already happened, and here is how to take it back.

the action completes, and says so
Re-run queued for 3 collections

Search field

A query, a scope, and an honest count.

8 records in All fields

Field

A label that stays, and one line for hint or error.

Use lower case letters, numbers and hyphens only.

Pagination

Ends, neighbours, and the range in words.

121–140 of 1,204 assets

Composer

Enter sends. While working, send becomes stop.

1974-series.csv
All collections

Enter to send, Shift+Enter for a new line.

Turn

Who is speaking, told three ways at once.

You

Which collections have unresolved licence terms?

Archivist
Two: Rijksmuseum and Harvard Art. Between them 61 assets carry terms that conflict with the contributor agreement, so the stricter term governs until someone resolves it.

Tool call

Arguments in, result out, both on demand.

search_collection1.24sIndexed
{
  "collection": "rijksmuseum",
  "query": "derivative rights",
  "limit": 20
}
{
  "matched": 61,
  "returned": 20,
  "unresolved_licence": 61,
  "sample": ["RM-1974-0112", "RM-1974-0118"]
}

Diff

What the agent wants to change, before it changes it.

Proposed change

collections/1974-series.licence.json

Applies the stricter of the two conflicting terms to the whole series, so nothing publishes under a licence the contributor agreement does not permit.

12unchanged: "series": "1974",
13removed: "licence": "CC BY",
13added: "licence": "CC BY-NC",
14removed: "resolved": false,
14added: "resolved": true,
15added: "resolvedBy": "licence-review",
16unchanged: "assets": 342
3 added · 2 removed

Confidence

How sure, and — the useful half — on what basis.

The 1974 series should publish under CC BY-NC.

Mediumconfidence, 2 of 3One field is inferred rather than recorded.
  • Licence terms read from the manifest.
  • Capture year inferred from the accession number, not stated.
  • Contributor confirmed in the register.
try

Suggested actions

The next question, offered rather than waited for.

Suggested next

Code block

Copy is the component. Wrapping is the reader's choice.

bash
curl https://archive-index.example.org/v1/collections \  -H "Authorization: Bearer $ARCHIVE_TOKEN" \  -d '{ "series": "1974", "resolved": false }'

Stat

A number, what it counts, which way it is going.

Assets indexed1,204
+186since last run
Unresolved licences61
−14since last run
Median ingest2.18s
no changeover 6 runs

Chart

Two forms, one dataset. No charting library.

Assets indexed per run210Aug 06
Jul 28Aug 06

Data table

Sortable, selectable, tri-state header.

Collections by asset count
Status
Cleveland Museum1,204Indexed
Selected. Art Institute980Running
Harvard Art342Blocked
Rijksmuseum61Failed
Smithsonian0Queued

1 of 5 selected

Drawer

Detail beside the list. Both stay live; Esc closes.

No collection selectedPick one on the left to see its record.
Rijksmuseum
Assets
61
Licence
Unresolved
Contributor
Not named
Last run
06 Aug, 14:22

Date range

Presets first, because nobody wants a calendar.

Showing 30 Jul – 06 Aug · 7 runs

Usage meter

What it cost, what is left, and when that resets.

$31.40this cyclethis cycle

Tokens

1.84M of 2.00M

8% left before runs queue.resets in 6 days

Facets

Grouped filters, each with a count, and what they hide.

742 of 1,204 shown

Filter chips

What is on, and how to turn it off.

  • LicenceUnresolved
  • Decade1970s
  • ContributorNot named
  • Queryderivative rights
4 active

Dropzone

Query by image. A button as well as a target.

Panel

The box every layout is made of. Header, body, floor.

Collections

last 7 days
Cleveland Museum1,204
Art Institute980
Rijksmuseum61
3 of 6 shown

App frame

Rail, main, aside. A product's chrome, not this site's.

Runs

6 collections
Cleveland Museum
Art Institute
Rijksmuseum

Nav list

Grouped rows, one of them current. Not a facet.

Selection bar

What you picked, and the verb for it. Floats, so the grid holds still.

2 of 1,204 selected

Sheet

Where folded chrome comes back. Nothing folds without a way home.

Ingest runs

Cleveland Museum
Art Institute
Rijksmuseum

Menu

The actions a surface has but does not show.

Cleveland Museum
⋯ opens · arrows move · Esc closes