Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions .claude/skills/gently-debugging/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
---
name: gently-debugging
description: Use when debugging a Gently session, inspecting stored data, or tailing logs — the full D:/Gently3 file-store directory layout, log locations/tail commands, and the map of debugging data sources (traces, predictions, memory, session/timelapse state).
---

# Gently — debugging & data-source reference

The Gently3 store is file-based under `D:\Gently3\` (env: `GENTLY_STORAGE_PATH`). No SQLite — everything is human-browsable files. See the resident `CLAUDE.md` for the store classes and architecture summary; this skill holds the full layout and debugging map.

## Directory layout

```
D:/Gently3/
gently.yaml # root manifest
sessions/
_index.yaml # session_id -> folder_name mapping
{YYYYMMDD}_{HHMM}_{slug}_{id8}/
session.yaml # metadata, config, organism
session.lock # PID + hostname (while active)
intent.yaml # planned vs actual
timelapse.yaml # checkpointed timelapse state
timeline.jsonl # session events
interaction_log.jsonl # agent conversation records
conversation.json # Claude API messages (resumption)
summary.yaml # auto-generated stats
perception_runs.yaml # run metadata
snapshots/{source}_{stem}.tif
embryos/{embryo_id}/
embryo.yaml # position, calibration, uid
predictions.jsonl # per-timepoint summary
ground_truth.yaml # human annotations
timelapse.mp4
volumes/t{NNNN}.tif
volumes/t{NNNN}.meta.yaml # shape, dtype, acquired_at, metadata
projections/t{NNNN}.jpg
traces/t{NNNN}.json # complete perception record
agent/
state.yaml # key-value agent state
campaigns/{id}_{slug}/
campaign.yaml
plan/current.yaml
plan/history/{YYYYMMDD_HHMM}.yaml
templates/{name}.yaml
projects/{id}_{slug}.yaml
session_intents/{session_id}.yaml
planned_sessions/{id}.yaml
learnings/{id}_{slug}.yaml
observations/{id}_{slug}.yaml
active/expectations.yaml
active/watchpoints.yaml
active/questions.yaml
embryo_understanding/{uid}.yaml
ml/pipelines/{id}.yaml
ml/runs/{id}.yaml
ml/assessments/{id}.yaml
logs/
gently_{YYYYMMDD_HHMMSS}.log
device_layer_{YYYYMMDD_HHMMSS}.log
config/
hardware.yaml
mesh/...
incoming/{uuid}.tif # transient device staging
```

### Legacy stores (D:\Gently2\ — read-only reference)
The old SQLite-based stores are preserved but no longer written to:
- `gently.db` (GentlyStore) — replaced by FileStore
- `context/agent_mind.db` (ContextStore) — replaced by FileContextStore
- `D:\gently\dataset.db` — legacy benchmarking DB

## Logging

Both the agent and device layer write logs to `D:\Gently3\logs\`:

- **Agent**: `gently_YYYYMMDD_HHMMSS.log` — INFO+ to file, console level configurable via `-v` flag
- **Device layer**: `device_layer_YYYYMMDD_HHMMSS.log` — INFO level

To check logs during a session:
```bash
# Latest agent log
tail -f D:/Gently3/logs/$(ls -t D:/Gently3/logs/gently_*.log | head -1)

# Latest device layer log
tail -f D:/Gently3/logs/$(ls -t D:/Gently3/logs/device_layer_*.log | head -1)

# Filter for errors
grep -E "ERROR|Traceback" D:/Gently3/logs/gently_*.log
```

## Debugging Data Sources

- **Agent logs**: `D:\Gently3\logs\gently_*.log`
- **Device layer logs**: `D:\Gently3\logs\device_layer_*.log`
- **Perception traces**: `D:\Gently3\sessions\{session}\embryos\{embryo}\traces\` — per-timepoint JSON
- **Predictions**: `D:\Gently3\sessions\{session}\embryos\{embryo}\predictions.jsonl`
- **Volume staging**: `D:\Gently3\incoming\`
- **Agent memory**: `D:\Gently3\agent\` — campaigns, learnings, observations (all YAML)
- **Session state**: `D:\Gently3\sessions\{session}\session.yaml`
- **Timelapse state**: `D:\Gently3\sessions\{session}\timelapse.yaml`
55 changes: 55 additions & 0 deletions .playwright-mcp/page-2026-08-24T08-24-47-321Z.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
- generic [active] [ref=e1]:
- generic [ref=e2]:
- generic:
- generic [ref=e3]: BOTTOM CAMERA
- generic [ref=e9]:
- generic [ref=e10]: EMBRYOS · 4
- generic [ref=e13]:
- generic [ref=e14]:
- generic [ref=e15] [cursor=pointer]: e01 1420, 880
- generic [ref=e16] [cursor=pointer]: e02 1610, 905
- generic [ref=e17] [cursor=pointer]: e03 1755, 1120
- generic [ref=e18] [cursor=pointer]: e04 2010, 860
- generic [ref=e19]:
- button "remap region" [ref=e20] [cursor=pointer]
- generic [ref=e21]: µm
- generic [ref=e22]:
- generic [ref=e23]: SPIM HEAD
- generic [ref=e26]:
- generic [ref=e27]:
- generic [ref=e28]: laser
- slider [ref=e29]: "35"
- generic [ref=e30]: 35%
- generic [ref=e31]:
- generic [ref=e32]: exposure
- slider [ref=e33]: "40"
- generic [ref=e34]: 40ms
- generic [ref=e35]:
- generic [ref=e36]: step
- slider [ref=e37]: "50"
- generic [ref=e38]: 50µm
- generic [ref=e39]:
- button "go to e02" [ref=e40] [cursor=pointer]
- button "HALT" [ref=e41] [cursor=pointer]
- generic [ref=e42]:
- generic [ref=e43]: STAGE
- generic [ref=e46]:
- generic [ref=e47]:
- generic [ref=e48]: x
- generic [ref=e49]: 1610.4 µm
- generic [ref=e50]:
- generic [ref=e51]: "y"
- generic [ref=e52]: 905.2 µm
- generic [ref=e53]:
- generic [ref=e54]: z
- generic [ref=e55]: "-12.8 µm"
- generic [ref=e56]:
- button "snap" [ref=e57] [cursor=pointer]
- button "live" [ref=e58] [cursor=pointer]
- generic [ref=e59]: drag empty space to pan · wheel to zoom · f fit · 1 100%
- generic [ref=e60]:
- button "+ calibration" [ref=e61] [cursor=pointer]
- button "+ agent" [ref=e62] [cursor=pointer]
- button "+ acquisition" [ref=e63] [cursor=pointer]
- button "fit" [ref=e64] [cursor=pointer]
- generic [ref=e65]: 132%
119 changes: 119 additions & 0 deletions .playwright-mcp/page-2026-08-24T08-31-44-879Z.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
- generic [active] [ref=f1e1]:
- generic [ref=f1e2]:
- generic:
- generic [ref=f1e3]:
- generic [ref=f1e4]:
- generic [ref=f1e5]: EMBRYOS · 4
- generic [ref=f1e6]: live
- generic [ref=f1e7]:
- generic [ref=f1e8]:
- generic [ref=f1e9] [cursor=pointer]: e01 1420, 880
- generic [ref=f1e10] [cursor=pointer]: e02 1610, 905
- generic [ref=f1e11] [cursor=pointer]: e03 1755, 1120
- generic [ref=f1e12] [cursor=pointer]: e04 2010, 860
- generic [ref=f1e13]:
- button "remap region" [ref=f1e14] [cursor=pointer]
- generic [ref=f1e15]: µm
- generic [ref=f1e16]:
- generic [ref=f1e17]:
- generic [ref=f1e18]: BOTTOM CAMERA
- generic [ref=f1e19]: live
- generic [ref=f1e23]:
- button "−" [ref=f1e24] [cursor=pointer]
- generic [ref=f1e25]: 1.0×
- button "+" [ref=f1e26] [cursor=pointer]
- generic [ref=f1e27]:
- generic [ref=f1e28]:
- generic [ref=f1e29]: SPIM HEAD
- generic [ref=f1e30]: ready
- generic [ref=f1e31]:
- generic [ref=f1e32]:
- generic [ref=f1e33]: laser
- slider [ref=f1e34]: "35"
- generic [ref=f1e35]: 35%
- generic [ref=f1e36]:
- generic [ref=f1e37]: exposure
- slider [ref=f1e38]: "40"
- generic [ref=f1e39]: 40ms
- generic [ref=f1e40]:
- generic [ref=f1e41]: step
- slider [ref=f1e42]: "50"
- generic [ref=f1e43]: 50µm
- generic [ref=f1e44]:
- button "go to e02" [ref=f1e45] [cursor=pointer]
- button "HALT" [ref=f1e46] [cursor=pointer]
- generic [ref=f1e47]:
- generic [ref=f1e48]:
- generic [ref=f1e49]: STAGE
- generic [ref=f1e50]: live
- generic [ref=f1e51]:
- generic [ref=f1e52]:
- generic [ref=f1e53]: x
- generic [ref=f1e54]: 1610.4 µm
- generic [ref=f1e55]:
- generic [ref=f1e56]: "y"
- generic [ref=f1e57]: 905.2 µm
- generic [ref=f1e58]:
- generic [ref=f1e59]: z
- generic [ref=f1e60]: "-12.8 µm"
- generic [ref=f1e61]:
- generic [ref=f1e62]:
- generic [ref=f1e63]: CALIBRATION · two-point
- generic [ref=f1e64]: stale
- generic [ref=f1e65]:
- generic [ref=f1e66]:
- generic [ref=f1e67]: source
- generic [ref=f1e68]: laser 488
- generic [ref=f1e69]:
- generic [ref=f1e70]: point 1
- generic [ref=f1e71]: captured
- generic [ref=f1e72]:
- generic [ref=f1e73]: point 2
- generic [ref=f1e74]: —
- generic [ref=f1e75]:
- button "capture point 2" [ref=f1e76] [cursor=pointer]
- button "solve transform" [ref=f1e77] [cursor=pointer]
- generic [ref=f1e78]:
- generic [ref=f1e79]:
- generic [ref=f1e80]: ACQUISITION
- generic [ref=f1e81]: ready
- generic [ref=f1e82]:
- generic [ref=f1e83]:
- generic [ref=f1e84]: interval
- slider [ref=f1e85]: "100"
- generic [ref=f1e86]: 120s
- generic [ref=f1e87]:
- generic [ref=f1e88]: timepoints
- slider [ref=f1e89]: "60"
- generic [ref=f1e90]: "60"
- button "start" [ref=f1e92] [cursor=pointer]
- generic [ref=f1e93]:
- generic [ref=f1e94]:
- generic [ref=f1e95]: CURATOR
- generic [ref=f1e96]: live
- generic [ref=f1e97]:
- generic [ref=f1e98]:
- generic [ref=f1e99]: tracking
- generic [ref=f1e100]: e02 · bottom cam · stage
- generic [ref=f1e101]:
- generic [ref=f1e102]: stale
- generic [ref=f1e103]: calibration transform
- generic [ref=f1e104]: Calibration never completed. Acquisition would put e02 off-centre.
- generic [ref=f1e105]:
- button "show me" [ref=f1e106] [cursor=pointer]
- button "dismiss" [ref=f1e107] [cursor=pointer]
- generic [ref=f1e108]: "rule 5: keys 0–5 do this without me"
- generic [ref=f1e109]:
- generic [ref=f1e110]:
- generic [ref=f1e111]: EVENTS
- generic [ref=f1e112]: ready
- generic [ref=f1e113]: no events this session
- generic [ref=f1e115]: everything exists · attention travels · 0–5 · surface zoom ≠ frame zoom
- generic [ref=f1e116]:
- button "0 bench" [ref=f1e117] [cursor=pointer]
- button "1 detect" [ref=f1e118] [cursor=pointer]
- button "2 position" [ref=f1e119] [cursor=pointer]
- button "3 calibrate" [ref=f1e120] [cursor=pointer]
- button "4 acquire" [ref=f1e121] [cursor=pointer]
- button "5 curator" [ref=f1e122] [cursor=pointer]
- generic [ref=f1e123]: 182%
119 changes: 119 additions & 0 deletions .playwright-mcp/page-2026-08-24T08-32-07-503Z.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
- generic [ref=f1e1]:
- generic [ref=f1e2]:
- generic:
- generic [ref=f1e3]:
- generic [ref=f1e4]:
- generic [ref=f1e5]: EMBRYOS · 4
- generic [ref=f1e6]: live
- generic [ref=f1e7]:
- generic [ref=f1e8]:
- generic [ref=f1e9] [cursor=pointer]: e01 1420, 880
- generic [ref=f1e10] [cursor=pointer]: e02 1610, 905
- generic [ref=f1e11] [cursor=pointer]: e03 1755, 1120
- generic [ref=f1e12] [cursor=pointer]: e04 2010, 860
- generic [ref=f1e13]:
- button "remap region" [ref=f1e14] [cursor=pointer]
- generic [ref=f1e15]: µm
- generic [ref=f1e16]:
- generic [ref=f1e17]:
- generic [ref=f1e18]: BOTTOM CAMERA
- generic [ref=f1e19]: live
- generic [ref=f1e23]:
- button "−" [ref=f1e24] [cursor=pointer]
- generic [ref=f1e25]: 1.0×
- button "+" [ref=f1e26] [cursor=pointer]
- generic [ref=f1e27]:
- generic [ref=f1e28]:
- generic [ref=f1e29]: SPIM HEAD
- generic [ref=f1e30]: ready
- generic [ref=f1e31]:
- generic [ref=f1e32]:
- generic [ref=f1e33]: laser
- slider [ref=f1e34]: "35"
- generic [ref=f1e35]: 35%
- generic [ref=f1e36]:
- generic [ref=f1e37]: exposure
- slider [ref=f1e38]: "40"
- generic [ref=f1e39]: 40ms
- generic [ref=f1e40]:
- generic [ref=f1e41]: step
- slider [ref=f1e42]: "50"
- generic [ref=f1e43]: 50µm
- generic [ref=f1e44]:
- button "go to e02" [ref=f1e45] [cursor=pointer]
- button "HALT" [ref=f1e46] [cursor=pointer]
- generic [ref=f1e47]:
- generic [ref=f1e48]:
- generic [ref=f1e49]: STAGE
- generic [ref=f1e50]: live
- generic [ref=f1e51]:
- generic [ref=f1e52]:
- generic [ref=f1e53]: x
- generic [ref=f1e54]: 1610.4 µm
- generic [ref=f1e55]:
- generic [ref=f1e56]: "y"
- generic [ref=f1e57]: 905.2 µm
- generic [ref=f1e58]:
- generic [ref=f1e59]: z
- generic [ref=f1e60]: "-12.8 µm"
- generic [ref=f1e61]:
- generic [ref=f1e62]:
- generic [ref=f1e63]: CALIBRATION · two-point
- generic [ref=f1e64]: stale
- generic [ref=f1e65]:
- generic [ref=f1e66]:
- generic [ref=f1e67]: source
- generic [ref=f1e68]: laser 488
- generic [ref=f1e69]:
- generic [ref=f1e70]: point 1
- generic [ref=f1e71]: captured
- generic [ref=f1e72]:
- generic [ref=f1e73]: point 2
- generic [ref=f1e74]: —
- generic [ref=f1e75]:
- button "capture point 2" [ref=f1e76] [cursor=pointer]
- button "solve transform" [ref=f1e77] [cursor=pointer]
- generic [ref=f1e78]:
- generic [ref=f1e79]:
- generic [ref=f1e80]: ACQUISITION
- generic [ref=f1e81]: ready
- generic [ref=f1e82]:
- generic [ref=f1e83]:
- generic [ref=f1e84]: interval
- slider [ref=f1e85]: "100"
- generic [ref=f1e86]: 120s
- generic [ref=f1e87]:
- generic [ref=f1e88]: timepoints
- slider [ref=f1e89]: "60"
- generic [ref=f1e90]: "60"
- button "start" [ref=f1e92] [cursor=pointer]
- generic [ref=f1e93]:
- generic [ref=f1e94]:
- generic [ref=f1e95]: CURATOR
- generic [ref=f1e96]: live
- generic [ref=f1e97]:
- generic [ref=f1e98]:
- generic [ref=f1e99]: tracking
- generic [ref=f1e100]: e02 · bottom cam · stage
- generic [ref=f1e101]:
- generic [ref=f1e102]: stale
- generic [ref=f1e103]: calibration transform
- generic [ref=f1e104]: Calibration never completed. Acquisition would put e02 off-centre.
- generic [ref=f1e105]:
- button "show me" [active] [ref=f1e106] [cursor=pointer]
- button "dismiss" [ref=f1e107] [cursor=pointer]
- generic [ref=f1e108]: "rule 5: keys 0–5 do this without me"
- generic [ref=f1e109]:
- generic [ref=f1e110]:
- generic [ref=f1e111]: EVENTS
- generic [ref=f1e112]: ready
- generic [ref=f1e113]: no events this session
- generic [ref=f1e115]: everything exists · attention travels · 0–5 · surface zoom ≠ frame zoom
- generic [ref=f1e116]:
- button "0 bench" [ref=f1e117] [cursor=pointer]
- button "1 detect" [ref=f1e118] [cursor=pointer]
- button "2 position" [ref=f1e119] [cursor=pointer]
- button "3 calibrate" [ref=f1e120] [cursor=pointer]
- button "4 acquire" [ref=f1e121] [cursor=pointer]
- button "5 curator" [ref=f1e122] [cursor=pointer]
- generic [ref=f1e123]: 76%
Loading
Loading