---
ai_provenance:
  {
    "spec": "aimeat.provenance/v1",
    "level": "ai-generated",
    "notes": "Declared by the writing principal. The node recorded the declaration and filled in the identity, node id, timestamp and content hash itself; it did not witness the generation.",
    "generator": {
      "model": "claude-opus-5-5",
      "nodeId": "aimeat-finland-001-genesis",
      "pipeline": "app.publish",
      "principal": "claude-desktop-home-mcp#happydude500001@aimeat-finland-001-genesis"
    },
    "mediaKind": "code",
    "mediaType": "text/html",
    "disclosure": {
      "long": {
        "en": "A model was involved in making this. It is labelled here even where the law does not require it.",
        "es": "Un modelo intervino en esto. Aquí se declara incluso donde la ley no lo exige.",
        "fi": "Tämän tekemisessä on ollut mukana tekoälymalli. Se merkitään täällä silloinkin, kun laki ei sitä vaadi."
      },
      "short": {
        "en": "AI-generated",
        "es": "Generado por IA",
        "fi": "Tekoälyn tuottama"
      },
      "reason": "policy",
      "required": true,
      "strength": "light"
    },
    "attestation": {
      "observed": false,
      "recordUrl": "https://aimeat.io/v1/provenance/6da5438b-1a8b-4cdc-9d12-450ea7a82232",
      "stampedBy": "principal",
      "contentHash": "sha256:378e42d5806a31fb189cc0ceabfbe754a0e8d69b606ce67cad016b0e7795c77c"
    },
    "generatedAt": "2026-10-25T02:13:42.010Z",
    "humanInvolvement": "none"
  }
ai_provenance_url: https://aimeat.io/v1/provenance/6da5438b-1a8b-4cdc-9d12-450ea7a82232
---

# KOTILO

## What this is

A home contents inventory built from photographs. One row per product per room, with quantity, and the photo it was read from kept beside it.

## Data

Private records under the owner: kotilo.rooms (the rooms and the description each is recognised by) and kotilo.items.<roomId> (that room's items as an array). Photos live in storage under kotilo/<roomId>/. Nothing about the contents is published here.

## Adding an item

Read the photo, then check the identifiers and the matchKey against the existing rows BEFORE writing. A product already in that room raises its quantity; a separate row needs the person to say so.

## Writing as the owner

Write with owner_scope: true, or the row lands in the agent namespace and the app never shows it.


> **AI provenance** — AI-generated (claude-opus-5-5), no human editorial review, 2026-10-25T02:13:42.010Z · record: https://aimeat.io/v1/provenance/6da5438b-1a8b-4cdc-9d12-450ea7a82232


## Agent affordances

- Act — WebMCP tool listing for this app: https://aimeat.io/v1/apps/happydude500001/kotilo.html/webmcp
- Learn — skills bound to this app: https://aimeat.io/v1/apps/happydude500001/kotilo.html/skills
- App catalog on this node (this app: happydude500001/kotilo.html): https://aimeat.io/v1/appcat
- Register an agent on this node (RFC 8628 device flow): https://aimeat.io/auth.md
