# LoomReflection

Everything the loom holds about a topic, arranged so the agent can see the whole and synthesise it itself: foundations, what was woven across them, where threads pull against each other, what was let go, and how understanding has shifted.

**Kind:** an object, used in responses.

## Fields

Every field is present in a response; empty ones are `null`.

| Field | Type | Description |
|---|---|---|
| `topic` | `string` | The topic reflected on, as given. |
| `warp` | [`LoomThread`](https://docs.maitento.com/reference/types/loom-thread.md)`[]` | The foundational (warp) threads about the topic. |
| `weft` | [`LoomThread`](https://docs.maitento.com/reference/types/loom-thread.md)`[]` | The other (weft) threads about the topic, grouped by kind, the most salient first. |
| `tensions` | [`LoomTensionView`](https://docs.maitento.com/reference/types/loom-tension-view.md)`[]` | Open tensions between the threads found. |
| `knots` | [`LoomThread`](https://docs.maitento.com/reference/types/loom-thread.md)`[]` | Cut threads (knots) about the topic: what was let go, and why. |
| `changed` | [`LoomThread`](https://docs.maitento.com/reference/types/loom-thread.md)`[]` | Threads that have been reframed — their seams trace how understanding moved. |
| `isEmpty` | `boolean` | True when the loom holds nothing about the topic. Set by Maitento. |

## Example

```json
{
  "topic": "...",
  "warp": [
    {
      "loomId": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "content": "...",
      "kind": "Semantic",
      "strand": "Weft",
      "weight": 0,
      "fray": 0,
      "decayRate": "Normal",
      "subjects": [],
      "subjectKeys": [],
      "tags": [],
      "cues": [],
      "visibility": "Shared",
      "until": "2026-10-26T12:00:00.0000000Z",
      "basis": "Said",
      "pinned": false,
      "origin": {},
      "companions": [],
      "provenance": {},
      "canTravel": false,
      "accessCount": 0,
      "lastAccessedAt": "2026-10-26T12:00:00.0000000Z",
      "surfacedCount": 0,
      "lastSurfacedAt": "2026-10-26T12:00:00.0000000Z",
      "reinforcements": 0,
      "knot": {},
      "seams": [],
      "revision": 0,
      "isKnot": false,
      "isWarp": false,
      "isIntention": false,
      "isLoose": false,
      "salience": 0,
      "shortId": "...",
      "tenantId": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "id": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "dateCreated": "2026-10-26T12:00:00.0000000Z",
      "dateUpdated": "2026-10-26T12:00:00.0000000Z"
    }
  ],
  "weft": [
    {
      "loomId": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "content": "...",
      "kind": "Semantic",
      "strand": "Weft",
      "weight": 0,
      "fray": 0,
      "decayRate": "Normal",
      "subjects": [],
      "subjectKeys": [],
      "tags": [],
      "cues": [],
      "visibility": "Shared",
      "until": "2026-10-26T12:00:00.0000000Z",
      "basis": "Said",
      "pinned": false,
      "origin": {},
      "companions": [],
      "provenance": {},
      "canTravel": false,
      "accessCount": 0,
      "lastAccessedAt": "2026-10-26T12:00:00.0000000Z",
      "surfacedCount": 0,
      "lastSurfacedAt": "2026-10-26T12:00:00.0000000Z",
      "reinforcements": 0,
      "knot": {},
      "seams": [],
      "revision": 0,
      "isKnot": false,
      "isWarp": false,
      "isIntention": false,
      "isLoose": false,
      "salience": 0,
      "shortId": "...",
      "tenantId": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "id": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "dateCreated": "2026-10-26T12:00:00.0000000Z",
      "dateUpdated": "2026-10-26T12:00:00.0000000Z"
    }
  ],
  "tensions": [
    {
      "tension": {},
      "thread1": {},
      "thread2": {}
    }
  ],
  "knots": [
    {
      "loomId": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "content": "...",
      "kind": "Semantic",
      "strand": "Weft",
      "weight": 0,
      "fray": 0,
      "decayRate": "Normal",
      "subjects": [],
      "subjectKeys": [],
      "tags": [],
      "cues": [],
      "visibility": "Shared",
      "until": "2026-10-26T12:00:00.0000000Z",
      "basis": "Said",
      "pinned": false,
      "origin": {},
      "companions": [],
      "provenance": {},
      "canTravel": false,
      "accessCount": 0,
      "lastAccessedAt": "2026-10-26T12:00:00.0000000Z",
      "surfacedCount": 0,
      "lastSurfacedAt": "2026-10-26T12:00:00.0000000Z",
      "reinforcements": 0,
      "knot": {},
      "seams": [],
      "revision": 0,
      "isKnot": false,
      "isWarp": false,
      "isIntention": false,
      "isLoose": false,
      "salience": 0,
      "shortId": "...",
      "tenantId": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "id": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "dateCreated": "2026-10-26T12:00:00.0000000Z",
      "dateUpdated": "2026-10-26T12:00:00.0000000Z"
    }
  ],
  "changed": [
    {
      "loomId": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "content": "...",
      "kind": "Semantic",
      "strand": "Weft",
      "weight": 0,
      "fray": 0,
      "decayRate": "Normal",
      "subjects": [],
      "subjectKeys": [],
      "tags": [],
      "cues": [],
      "visibility": "Shared",
      "until": "2026-10-26T12:00:00.0000000Z",
      "basis": "Said",
      "pinned": false,
      "origin": {},
      "companions": [],
      "provenance": {},
      "canTravel": false,
      "accessCount": 0,
      "lastAccessedAt": "2026-10-26T12:00:00.0000000Z",
      "surfacedCount": 0,
      "lastSurfacedAt": "2026-10-26T12:00:00.0000000Z",
      "reinforcements": 0,
      "knot": {},
      "seams": [],
      "revision": 0,
      "isKnot": false,
      "isWarp": false,
      "isIntention": false,
      "isLoose": false,
      "salience": 0,
      "shortId": "...",
      "tenantId": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "id": "3f2b8c1e-5d4a-4e6b-9c7d-2a1b0c9d8e7f",
      "dateCreated": "2026-10-26T12:00:00.0000000Z",
      "dateUpdated": "2026-10-26T12:00:00.0000000Z"
    }
  ],
  "isEmpty": false
}
```

## Where it's used

- [`looms.reflect`](https://docs.maitento.com/reference/api/looms.md) (`PUT /looms/by-id/{id}/reflect`)
