roxabi-sense
OfficialA local workstation attention journal server that lets agents query focus, activity, and agent session data from a lightweight SQLite-backed daemon — no screenshots or keylogging involved. The server provides the following tools:
sense_status: Check daemon health, presence, and last collection metadata.
active_now: Get current presence, focused application, and open agent sessions.
what_was_i_doing: Retrieve a timeline of summarized events for a given day (default today), with optional limit on event count.
agent_sessions: List Claude/Grok sessions observed during a specified day.
day_recap: Get a compiled daily recap including apps used, away periods, meetings, and agent activity.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@roxabi-sensewhat was I doing at 3pm?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
roxabi-sense
Workstation attention journal — light sensors, local store, agent surfaces.
Status: phases 1–3 live (collectors + store + CLI + daemon + MCP stdio) · NATS still stub
Not screenpipe. Not a web SaaS. Not insideroxabi-factory.
Agent SSOT:AGENTS.md· Claude shim:CLAUDE.md
Why
Screen capture + OCR is the wrong tool for “what was I doing?”.
You already have timestamped work in ~/.claude and ~/.grok. Meetings live in Claap. What is missing is a cheap focus spine: which app/window was active, which agent sessions were open, whether Slack/Discord was running — without pixels, keyloggers, or a 174 MB trial for 40 seconds of frames.
roxabi-sense is that spine. It publishes facts, not policy.
Related MCP server: Cortex
What it is / is not
Is | Is not |
Local user-session daemon (systemd | Factory hub module |
CLI + optional MCP + optional NATS publisher | Screen OCR / continuous screenshots |
Reads existing Claude/Grok session artifacts | Re-logs AI conversations |
Focus / idle / process presence | Meeting recorder (→ Claap) |
Edge sensor for Sentinelle later | Sentinelle decision brain (→ factory hub) |
Architecture (target)
collectors (facts only)
┌─────────────┐ ┌──────────────┐ ┌────────────────┐
│ focus/idle │ │ agent sessions│ │ process presence│
│ (Wayland / │ │ ~/.claude │ │ slack/discord │
│ AT-SPI) │ │ ~/.grok │ │ (running?) │
└──────┬──────┘ └──────┬───────┘ └───────┬────────┘
│ │ │
└────────────────┼───────────────────┘
▼
local store (SQLite)
~/.local/share/roxabi-sense/
│
┌───────────────┼────────────────┐
▼ ▼ ▼
CLI MCP NATS (opt-in)
day-slice agent query factory.event.host.*
status what_was_i… activity | stale onlyBoundary (ADR-091-aligned): sensors publish facts; roxabi-factory Sentinelle (hub module, not shipped yet) may consume host events and decide. This repo never opens Discord, never dispatches jobs, never applies ops policy.
Surface | Granularity | Depends on factory? |
Local store + CLI | Fine timeline | No |
MCP (stdio) | Query on demand | No |
NATS plane ① | Coarse heartbeats ( | Yes (bus up) |
Details: docs/ARCHITECTURE.md · purpose: docs/PURPOSE.md
Stack decision
Local daemon + CLI + MCP — not a Silex web boilerplate.
Candidate | Verdict |
| No — that shape is for client demos & product UI, not a user-session sensor |
Full stack inside | No — factory owns Sentinelle consumer; capture stays on the workstation |
Python 3.13 + | Yes — matches Roxabi satellites ( |
SQLite under | Yes — single-machine, Syncthing-friendly if paused |
MCP stdio | Yes — Claude / Grok / Hermes |
NATS publisher (optional extra) | Yes later — facts only, feature-flagged |
Tiny | Optional V2 — human glance only, not the product surface |
Install matrix
Layer | What it does | How |
Data plane | Always-on collectors → SQLite |
|
Query plane | Read API for humans/agents | CLI: |
Agent DX | Host wires MCP | Grok/Claude host snippets or thin plugin |
Data plane and query plane are separate: MCP does not start collectors. Empty/offline tools ⇒ fix the daemon, not the agent config.
Setup (PATH-stable)
Prefer a stable sense on PATH so agent configs never hardcode a worktree path.
# 1. clone (or pull) + install CLI + MCP deps into uv tool env
git clone git@github.com:Roxabi/roxabi-sense.git
cd roxabi-sense
uv tool install -e '.[mcp]'
# re-run after pull when the package changes:
# uv tool install -e '.[mcp]' --force
# After PyPI release: uv tool install 'roxabi-sense[mcp]'
# 2. data plane — user systemd unit (not the same process as MCP)
sense install-service
systemctl --user enable --now roxabi-sense.service
# 3. smoke / DoD
sense doctor # FAIL if offline / no DB / MCP missing
sense status # last_tick should refresh while daemon is up
sense recap # day summary; Meetings fidelity=full|active_only
which sense # typically ~/.local/bin/sense
# 5. optional NATS (when factory Sentinelle is ready)
# sense config set nats.enabled trueMCP host registration (Grok + Claude)
Prereq: steps 1–3 above — which sense resolves, sense doctor is green (daemon + DB + MCP SDK). MCP does not start collectors; empty tools ⇒ fix data plane first.
Happy path: host spawns sense mcp from PATH — never a worktree absolute path.
Grok
User-global TOML (~/.grok/config.toml):
[mcp_servers.roxabi-sense]
command = "sense"
args = ["mcp"]
enabled = trueOr CLI (same result; user scope is default):
grok mcp add roxabi-sense -- sense mcp
grok mcp doctor roxabi-sense # config + spawn smokeRestart the Grok session (or open a new one) so the server is re-spawned.
Claude Code
CLI (preferred one-liner):
# workstation-wide (recommended for a host sensor)
claude mcp add -s user roxabi-sense -- sense mcp
# or project-local (writes/approves .mcp.json in the repo)
claude mcp add -s project roxabi-sense -- sense mcpProject .mcp.json (equivalent shape):
{
"mcpServers": {
"roxabi-sense": {
"command": "sense",
"args": ["mcp"]
}
}
}Project-scoped servers may show as pending approval until accepted in Claude. User scope avoids per-repo approval for a machine-local sensor.
Asymmetry (intentional): Grok stores servers in TOML (~/.grok/config.toml or project .grok/config.toml); Claude uses CLI scopes / .mcp.json JSON. Both spawn the same stdio command: sense + mcp.
After registration
sense doctor # still green (host config is not a substitute for data plane)
sense status # last_tick moving while daemon is upThen ask the agent for tools (sense_status, active_now, what_was_i_doing, …). If tools are missing: restart the host session; if tools return offline/empty: fix daemon/sense doctor, not MCP JSON.
Hardening (optional)
Pin absolute binary if PATH is unreliable in the agent environment:
# Grok example — replace with real path from `which sense`
[mcp_servers.roxabi-sense]
command = "/home/YOU/.local/bin/sense"
args = ["mcp"]
enabled = trueDev-only fallback (not for agent configs)
# contributor smoke — do not paste worktree paths into host MCP configs
uv run --extra mcp --directory /path/to/durable/clone sense mcpEditable uv tool install -e must point at a durable clone (e.g. ~/projects/roxabi-sense), not a feature worktree. If you delete that worktree, sense breaks with ModuleNotFoundError — reinstall:
cd ~/projects/roxabi-sense # durable path
uv tool install -e '.[mcp]' --force
sense doctorPrivacy / trust
Default MCP redaction is coarse (no window titles / media tracks / full paths). Full detail only via operator config
[mcp] detail = "full"— not tool-arg escalation (ADR-002).Agent spawn trusts the
sensebinary on PATH. Prefer operator-owneduv toolinstall over a world-writable clone.Only wire agents you trust with activity metadata.
Thin agent plugin (optional)
Optional DX package under plugins/roxabi-sense/ — wiring only:
Ships | Does not ship |
| Python runtime, collectors, AT-SPI |
Skill: when/how to use | Second query layer / private SQL |
Plugin README + missing-PATH fallback | systemd unit / daemon start |
# Same happy path as host snippets — plugin just packages it:
# command = "sense" args = ["mcp"]
# Manual still wins until marketplace publish:
grok mcp add roxabi-sense -- sense mcp
claude mcp add -s user roxabi-sense -- sense mcpRequires roxabi-sense[mcp] on PATH (package ≥ 0.0.1 with MCP extra) and sense doctor green. Full plugin notes: plugins/roxabi-sense/README.md.
Contributor / in-tree workflow (not for host MCP config):
cd roxabi-sense && uv sync --extra mcp
uv run sense statusNo Podman required on the laptop for V1. M₂ may use the same user unit. M₁ host-sensor path (services snapshot only) is a later collector, not a Quadlet of this whole app.
Roadmap (coarse)
Phase | Deliverable | State |
0 — scaffold | Public repo, purpose, architecture | done |
1 — local spine | Agent-session collector + store + CLI | done |
2 — focus + idle | Multi-backend focus probes + idle chain + process/mpris/tmux | done (P0+P1) |
3 — MCP | stdio tools over | done |
4 — NATS opt-in |
| open |
5 — optional | Filtered browser history, local status HTTP | open |
Focus probes (multi-Linux)
Focus is one collector (kind=focus) with swappable FocusProbe backends. Fact field source is the backend id (atspi | x11 | wlr | kde | noop).
Session | Candidate order (first healthy wins) |
Wayland GNOME / Cosmic / unknown |
|
Wayland wlroots (Hyprland / Sway) |
|
Wayland KDE |
|
Pure X11 |
|
AT-SPI — long-lived agent (system Python +
gi); best on GNOME/Cosmic when a11y works.X11 —
xprop/ active window (XWayland fallback). Package:x11-utils.wlr —
hyprctl activewindow -jorswaymsg -t get_treewhen compositor env is set.kde — stub for now (
probe()false until KWin D-Bus path lands).Runtime demote — if AT-SPI dies, daemon switches to next healthy probe without blocking other collectors.
Meta focus:
focus_backend,focus_status,session_type,desktop_family,last_focus_path.Meta idle:
idle_backend,idle_status,idle_chain_reason(wayland → logind → noop).
Agent sessions (Grok / Claude / optional Cursor)
Source | Default | Paths (read-only) |
Grok | on ( |
|
Claude | on ( |
|
Cursor | off ( |
|
Cursor opt-in emits agent_sessions_snapshot with agent=cursor (workspace id + folder path + mtime only). Never opens chat DBs (state.vscdb), composer history, or rewrites agent dirs.
# ~/.config/roxabi-sense/config.toml
[collectors]
cursor_sessions = true
# cursor_root = "/home/you/.config/Cursor" # optional override
# cursor_max_workspaces = 20
# cursor_max_age_days = 30Agent status detail: AGENTS.md § Status.
Out of scope forever (for this repo): OCR, continuous screenshots, keylogging, clipboard dumps, scraping Slack/Discord desktop clients, meeting transcription, cloud upload of agent chat bodies.
Relation to the rest of Roxabi
Project | Relation |
Future consumer (Sentinelle hub module). Not the home of collectors. ADR-091 | |
Downstream memory/insight may ingest sense observations later. Sense stays capture + query, not the entity graph. | |
Claap | Meetings — do not duplicate |
| Read-only sources for agent presence |
License
AGPL-3.0-or-later (same family as roxabi-cortex).
Status
Phases 1–3 live (collectors, store, CLI, daemon, MCP stdio). Host registration: README § MCP host registration. NATS still open.
Available Tools
5 toolsactive_nowB
Current presence, latest focus app, open agent sessions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden for behavioral disclosure. It only lists content categories and does not mention return format, refresh semantics, permissions, side effects, or data source. All behavioral traits must be inferred from the tool name and content list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded noun phrase with no filler words, making it very compact. However, the absence of a main verb makes it slightly less effective as a complete tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, listing the three content areas is minimally adequate. But without annotations or usage guidance, the description leaves behavioral and contextual details unstated and does not resolve overlap with sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to document. The baseline of 4 applies because no parameter information is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the three data areas returned: current presence, latest focus app, and open agent sessions. It lacks a main verb, making it a noun phrase rather than an explicit action statement, but the intent is readable. It does not explicitly differentiate from sibling tools that cover subsets of this data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. Sibling names like sense_status, what_was_i_doing, and agent_sessions suggest overlapping functionality, but the description offers no exclusion or preference cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agent_sessionsC
Claude/Grok sessions seen during a local calendar day.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it only mentions the day scoping. It does not explain what 'sessions seen' means, how a local calendar day is interpreted (e.g., timezone), or what the response contains. This is minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words, making it concise and easy to parse. It is slightly under-specified but not padded, so it earns a high score for structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the tool is simple with one optional parameter, the description omits critical context such as the output structure (even though an output schema exists, the description should clarify what sessions are listed), the meaning of 'seen', and how 'local calendar day' is determined. This is incomplete for an agent deciding to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented 'day' parameter. It mentions 'local calendar day' but does not specify the day's format, accepted values, or the meaning of null default, leaving the parameter ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that the tool shows Claude/Grok sessions seen during a local calendar day, which conveys the resource (sessions) and scope (a day). However, the verb 'seen' is vague and does not explicitly say 'list' or 'retrieve', and it does not distinguish this from sibling tools like day_recap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives like active_now or what_was_i_doing. It neither mentions appropriate conditions nor provides exclusions, so an agent has no basis for choosing it over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
day_recapC
Compiled day recap (apps, away, meetings, agents) as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the output format (JSON) and content categories, but does not disclose behavior regarding the optional 'day' parameter, default behavior, or what the recap actually covers. This is insufficient for an agent to understand tool behavior beyond the basic output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, clearly front-loaded with the core purpose. It lacks structural breakdown of the output fields, but that is not strictly required for conciseness. It earns a strong score for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple with one optional parameter and an output schema, but the description lacks essential context: what 'day' expects, what happens if omitted, and how this differs from related tools. Given the output schema exists, not explaining return values is acceptable, but the usage context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameter descriptions (0% coverage), and the description does not explain the 'day' parameter's format, allowed values, or default behavior. With only one parameter and no compensation in the description, an agent has no idea what to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates the tool produces a compiled day recap with specific categories (apps, away, meetings, agents) and notes the JSON output. It distinguishes from sibling tools that focus on current status or specific sessions, though it lacks an explicit verb like 'get' or 'retrieve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool instead of alternatives like active_now or what_was_i_doing. The description does not mention typical use cases, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sense_statusC
Daemon health, presence, last collect meta.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. It does not explicitly state that this is a read-only status check, nor does it mention side effects, permissions, or rate limits. The phrase 'Daemon health, presence, last collect meta' implies informational use but does not clearly disclose behavior beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely terse, at five words, which makes it efficient but under-specified. It lacks a subject-verb structure and reads as a fragment rather than a clear sentence. While it is front-loaded, its brevity sacrifices clarity, making it only partially effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no parameters and an output schema exists, the description does not need to detail return values. However, the description is still cryptic, leaving terms like 'presence' and 'last collect meta' undefined. It provides minimal context for an agent to understand the tool's role, though it is adequate for a very simple status endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to explain. The schema coverage is vacuously 100%, and the description does not need to elaborate on input. The baseline score of 4 is appropriate because no parameters exist and the description doesn't introduce confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun phrase listing 'Daemon health, presence, last collect meta,' which hints at the tool's purpose but lacks an explicit verb such as 'get' or 'return.' It does not clearly state what the tool does with these items, making the purpose somewhat vague. It also does not differentiate itself from sibling tools beyond the implied system status subject.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It neither states conditions for use nor mentions any exclusions or sibling tools. The context signals show sibling tools like 'active_now' and 'agent_sessions,' but the description does not help the agent decide between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
what_was_i_doingB
Timeline for a local calendar day (YYYY-MM-DD); default today.
Returns summarized events (coarse by default). limit caps event count.
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that events are summarized and coarse by default, and that limit caps event count. However, it does not explain what 'coarse' means, timezone handling, or whether it includes all-day events. It adds some behavioral context but is not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and defaults. Every sentence earns its place without redundancy or filler. It is appropriately concise for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema (not shown), so the description does not need to detail return values. However, it lacks guidance on semantics of 'coarse' events, interactions with limit, and fit within the sibling toolset. The description is adequate for basic use but leaves ambiguity that could lead to incorrect invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does: it specifies day uses YYYY-MM-DD format and defaults to today, and limit caps event count. This adds clear meaning to both parameters beyond the bare schema, though it omits details like limit bounds or behavior when omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool provides a timeline for a local calendar day, returning summarized events. The verb is implicit but the resource and action are clear: it retrieves what you were doing on a given day. It does not explicitly distinguish from sibling tools like day_recap, so it is clear but lacks differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as day_recap or active_now. It mentions default behavior (today, coarse) but does not specify use cases, exclusions, or preferability. This is a clear gap for a tool with several siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.0.1- First observed
active_now - First observed
agent_sessions - First observed
day_recap - First observed
sense_status - First observed
what_was_i_doing
TDQS
Scored across 5 tools
Most tools have distinct purposes: daemon health, current presence, daily timeline, agent sessions, and day recap. However, what_was_i_doing and day_recap both cover a day's activities, and agent_sessions is a subset of the timeline, creating minor overlap that descriptions help resolve.
Names are readable and mostly snake_case, but patterns vary: sense_status and agent_sessions are noun_noun, active_now is adjective_noun, what_was_i_doing is a sentence fragment, and day_recap is noun_noun. No consistent verb_noun or clear pattern, though not chaotic.
Five tools is well-scoped for a personal sense daemon covering health, presence, timeline, sessions, and recap. Each tool earns its place without redundancy or bloat.
The surface covers core lifecycle needs: status, current state, historical timeline, specific session data, and a compiled recap. Missing minor capabilities like searching or filtering events, but agents can work around these gaps for typical tasks.
Maintenance
Related MCP Connectors
ADHD system of record for agents: tasks, goals, loops, calendar, focus stats.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
- DoneThatOAuthai.donethat
Privacy-first work tracking with summaries, reports, coaching, and AI-ready long-term memory.
Governed personal world model and memory for your AI agent. Pair once, connect over MCP.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA local-first AI secretary that gathers your work context into private memory and enables AI agents to search and summarize it over MCP.38MIT
- AlicenseNot gradedqualityFmaintenanceProvides persistent memory to AI agents through a wearable device, storing notes, sessions, and activities in a local SQLite database accessible via MCP.MIT
- AlicenseNot gradedqualityCmaintenancePersistent activity journal for AI agents - enables logging and querying decisions, changes, errors, and observations across sessions.131MIT
- AlicenseNot gradedqualityFmaintenanceLocal-first, auditable memory for AI agents. Provides durable context for MCP hosts with SQLite storage, CLI, and MCP tools for memory management.2Apache 2.0