Files
oikos/.agents/skills/session-review/SKILL.md
dtoro d4d99a7473
Some checks failed
ci / build-test (push) Has been cancelled
ci / docker-build (push) Has been cancelled
feat: Phase 1 — extract the client (web SPA + desktop) to dtoro/oikos-web
Problem: the hexagonal refactor churns the backend tree for nine more
phases; the UI delivery stack (web/ SPA, cmd/desktop Wails wrapper,
compose/web image) must move to its own repo first so doc/layout
rewrites land once on a backend-only tree.

Change:
- New repo git.hubris.network/dtoro/oikos-web (v0.33.0): web/, desktop/
  (updateURL repointed to oikos-web releases), compose/, own CI (web +
  desktop jobs), own deploy script (CI-green gate, TOCTOU guard,
  version-tagged images, prune-to-3), own webhook receiver on :9798 +
  launchd unit, own compose project publishing the same 8091:80.
- Cutover executed on mac-mini in order: oikos stack's web service
  stopped+removed, oikos-web project brought up on 8091; outer Caddy
  untouched (targets the published port) — serving + Authentik flow +
  /wails 404 quirk verified post-cutover.
- Stripped from oikos: web/, cmd/desktop/, compose/web/, desktop CI
  workflow, ci.yml web job, Makefile ui/desktop/desktop-package/install
  targets, the compose web service, oikos-web from deploy.sh's fallback
  prune list; wails + go-keyring dropped from go.mod, vendor synced.
- README / CONTRIBUTING / AGENTS.md / .agents dev+operations docs now
  point at the new repo; mbse + mascot design docs carry a path note.

Risk: production SPA serving depends on the new pipeline now; rollback
is versioned-image re-up of the old web service from a pre-split
checkout (port 8091). Desktop builds installed before the split still
check dtoro/oikos releases — one manual reinstall, noted in the
oikos-web release notes.

Verification: go vet, make test (race), make generate-check, golangci
(no new findings; baseline down 400→365); post-cutover curls —
localhost:8091 200, /wails/runtime.js 404, outer Caddy 302 Authentik.
2026-08-15 22:27:52 +02:00

3.3 KiB

name, description, risk_class, inputs
name description risk_class inputs
session-review Examine a Nomos chat session, compare the user's objective with the actual outcome, identify causes of failure (missing tools, excessive tool calls, blocked actions, model behavior), and propose concrete fixes. reversible_low
session_id

Session review

Analyze Nomos chat sessions from the live database, diff objectives against outcomes, and propose fixes.

1. Retrieve session data

# List recent sessions
curl -s http://localhost:8092/sessions | jq '.sessions[:5]'

# Fetch one session with messages
curl -s http://localhost:8092/sessions/{session_id} | jq .

2. Classify the session

For each session determine:

Dimension Check
Objective What was the user trying to accomplish?
Outcome Was it achieved? (read final assistant text)
Tool calls Count, unique tools, redundancy (e.g., N+1 fan-out)
Blockers Missing action? Missing tool? Model refusal? Empty response?
User frustration Did the user need to clarify/correct/repeat?
Message sizes Content blob sizes — truncation needed?

3. Key failure signatures

Signature Root cause Fix
Agent: "I can't run X" Missing target or capability Use run with shell command — there is no fixed action enum anymore
Agent: "No local knowledge on that" + no web tool Missing http_get / web fetch MCP tool Add MCP tool
Empty assistant bubble (text="", no tools) Model returned blank completion Retry + error surfacing
Non-English boilerplate refusal Flash-tier model degradation Response quality guard
>30 tool calls per turn, same tool repeated N+1 fan-out instead of bulk tool Enrich bulk tools + tighten SOUL.md
Message >50KB in DB Raw tool results persisted verbatim Truncation in store.go

4. Extract patterns across sessions

# All sessions summary
curl -s http://localhost:8092/sessions | jq -r '.sessions[] | "\(.id[:8]) \(.title[:80]) \(.created_at[:16])"'

# Message count + tool count per session
for id in $(curl -s http://localhost:8092/sessions | jq -r '.sessions[].id'); do
  msgs=$(curl -s "http://localhost:8092/sessions/$id" | jq '.messages | length')
  tools=$(curl -s "http://localhost:8092/sessions/$id" | jq '[.messages[].content.tool_calls | length] | add')
  echo "$id $msgs msgs $tools tools"
done

5. Output format

Session: {id[:8]} — "{title[:60]}"
  Messages: {N} ({user}/{assistant})
  Tool calls: {total} across {turns} turns
  Top tools: {name:count, name:count, ...}
  Objective: {one-line summary}
  Outcome: ✅ / ❌ / ⚠️
  Blockers: {list or "none"}
  Fixes needed: {concrete actions}
  Severity: blocker | friction | cosmetic
  • cmd/nomos/agent.go — agent loop, tool building, response guards
  • cmd/nomos/store.go — session + message persistence
  • internal/mcp/server.go — all tool implementations (run, list_lxcs, …)
  • web/src/lib/components/ToolCallGroup.svelte — tool result display (in the dtoro/oikos-web repo, ~/Projects/oikos-web, since the Phase 1 client extraction)
  • nomos/SOUL.md — agent persona and tool selection rules
  • plans/done/2026-07-09-chat-sessions-improvements.md — prior session findings
  • plans/done/2026-07-09-session-execution-and-ux-fixes.md — latest plan