personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

open cogitate agents to sol * and improve all skills

Part 1: Open agent tool access from `sol call *` to `sol *`
- anthropic.py: Bash(sol call *) → Bash(sol *)
- google.py: run_shell_command(sol call) → run_shell_command(sol)
- openai.py: update comment, codex rules pattern expanded to sol
- heartbeat.md: replace phantom commands (sol call health status,
sol call health journal-layout, sol call health agent-runs) with
real commands (sol health, sol health logs, sol muse logs)

Part 2: Review and improve all 10 cogitate skills
- All descriptions updated to Anthropic guide pattern:
[what it does] + [when to use it] + [trigger phrases]
- Added missing trigger phrases to journal, todos, entities,
transcripts, health, onboarding descriptions
- entities: added missing strength, search, intelligence commands
- todos: added missing move command
- health: added troubleshooting section for common diagnostic issues
- body: added agent CLI boundaries section listing infrastructure
commands agents must never call
- Updated test assertions for new restriction patterns

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+205 -41
+5 -5
.codex/rules/solstone.rules
··· 1 1 # Execution policy rules for solstone agent CLI commands. 2 - # Allows "sol call" commands to run outside the sandbox without prompting. 2 + # Allows "sol" commands to run outside the sandbox without prompting. 3 3 # See: https://developers.openai.com/codex/exec-policy 4 4 5 5 prefix_rule( 6 - pattern=["sol", "call"], 6 + pattern=["sol"], 7 7 decision="allow", 8 - justification="sol call invokes journal query and agent handoff commands", 9 - match=["sol call todos list", "sol call entities list"], 10 - not_match=["sol restart-convey"], 8 + justification="sol invokes journal query, agent, and diagnostic commands", 9 + match=["sol call todos list", "sol call entities list", "sol health", "sol muse logs"], 10 + not_match=["solc", "solid"], 11 11 )
+5 -4
apps/calendar/muse/calendar/SKILL.md
··· 1 1 --- 2 2 name: calendar 3 3 description: > 4 - Manage calendar events with sol call calendar commands. List, create, update, 5 - cancel, and move events organized by facet and day. 6 - TRIGGER: calendar events, scheduling, appointments, meetings, event 7 - management, moving events between facets. 4 + Manage calendar events organized by facet and day. List, create, update, 5 + cancel, and move events including scheduling with participants and times. 6 + Use when the user mentions calendar events, scheduling, appointments, 7 + meetings, or wants to create, reschedule, or cancel events. 8 + TRIGGER: calendar, schedule, appointment, meeting, event, reschedule. 8 9 --- 9 10 10 11 # Calendar CLI Skill
+65 -1
apps/entities/muse/entities/SKILL.md
··· 1 1 --- 2 2 name: entities 3 - description: Manage tracked entities with sol call entities commands. List, detect, attach, update, alias, and record observations for people, companies, projects, and tools. Track relationships and knowledge within a facet. 3 + description: > 4 + Manage tracked entities for people, companies, projects, and tools within 5 + facets. Detect, attach, update, alias, search, and record observations. 6 + Query relationship strength and get full intelligence briefings. 7 + Use when the user asks about people, contacts, companies, or projects 8 + tracked in the journal, or wants to add, update, or search entities. 9 + TRIGGER: entity, person, company, project, relationship, observation, 10 + who is, contact, knowledge graph, intelligence briefing. 4 11 --- 5 12 6 13 # Entities CLI Skill ··· 202 209 ```bash 203 210 sol call entities observe "Alicia Chen" "Prefers design docs before implementation" -f work --source-day 20260115 204 211 ``` 212 + 213 + ## strength 214 + 215 + ```bash 216 + sol call entities strength [FACET] [-n LIMIT] 217 + ``` 218 + 219 + Rank entities by relationship strength score within a facet. 220 + 221 + - `FACET`: facet name (default: `SOL_FACET` env). 222 + - `-n, --limit`: max results (default `10`). 223 + 224 + Use this to find the most significant relationships in a facet. 225 + 226 + Example: 227 + 228 + ```bash 229 + sol call entities strength work -n 20 230 + ``` 231 + 232 + ## search 233 + 234 + ```bash 235 + sol call entities search [QUERY] [--type TYPE] [--facet FACET] [--active-days N] 236 + ``` 237 + 238 + Search entities by text, type, facet, or recent activity. 239 + 240 + - `QUERY`: optional text query. 241 + - `--type`: filter by entity type (e.g., `Person`, `Company`). 242 + - `--facet`: filter by facet. 243 + - `--active-days`: filter to entities active within N days. 244 + 245 + Examples: 246 + 247 + ```bash 248 + sol call entities search "Chen" 249 + sol call entities search --type Person --facet work 250 + sol call entities search --active-days 7 251 + ``` 252 + 253 + ## intelligence 254 + 255 + ```bash 256 + sol call entities intelligence ENTITY [-f FACET] 257 + ``` 258 + 259 + Get a full intelligence briefing for an entity — relationship history, observations, activity timeline, and cross-facet presence. 260 + 261 + - `ENTITY`: entity id, name, or alias. 262 + - `-f, --facet`: facet name (default: `SOL_FACET` env). 263 + 264 + Example: 265 + 266 + ```bash 267 + sol call entities intelligence "Alicia Chen" -f work 268 + ```
+28 -1
apps/health/muse/health/SKILL.md
··· 1 1 --- 2 2 name: health 3 - description: Diagnoses service health and inspects agent runs using sol health and sol muse logs commands. Provides a journal layout reference for navigating logs, agent outputs, and data files at the journal, day, and segment levels. 3 + description: > 4 + Diagnose solstone service health, inspect agent run logs, and check system 5 + status. View service uptimes, crashes, queue depths, recent errors, and 6 + agent run costs. Includes a journal layout reference for navigating data 7 + files. Use when the user reports issues, asks about service health, agent 8 + costs, pipeline status, or when troubleshooting capture gaps and processing 9 + failures. 10 + TRIGGER: health, status, is it running, something broke, service down, 11 + errors, agent runs, costs, logs, pipeline, diagnostics, system check. 4 12 --- 5 13 6 14 # Health CLI Skill ··· 156 164 | Cortex | Agent JSONL in `agents/<name>/`, outputs in segment/day dirs | 157 165 | Indexer | `indexer/journal.sqlite` | 158 166 | Supervisor | `health/supervisor.log`, service logs in `YYYYMMDD/health/` | 167 + 168 + ## Troubleshooting 169 + 170 + ### `sol health` returns "Connection refused" or times out 171 + The supervisor is not running. Check if `sol supervisor` is active. The user may need to start solstone with `sol start` or `make dev`. 172 + 173 + ### Agent run shows "error" status in `sol muse logs` 174 + Run `sol muse log <ID> --full` to see the complete event timeline including the error. Common causes: 175 + - API key issues (rate limits, expired keys) 176 + - Prompt too large (context overflow) 177 + - Network connectivity 178 + 179 + ### Missing segments or capture gaps 180 + 1. Run `sol health` to check observer service status 181 + 2. Run `sol health logs --service sense --since 2h` to check for transcription errors 182 + 3. Check if the stream is active: `sol streams` 183 + 184 + ### High agent costs 185 + Run `sol muse logs --summary` for aggregated cost view. Filter by agent: `sol muse logs <agent-name> --summary`.
+6 -5
apps/speakers/muse/speakers/SKILL.md
··· 1 1 --- 2 2 name: speakers 3 3 description: > 4 - Manage the speaker identification subsystem with sol call speakers commands. 5 - Check speaker status, detect the owner voice, identify unknown speakers, and 6 - merge name variants. Curate the speaker library over time. 7 - TRIGGER: speaker identification, voice recognition, owner detection, speaker 8 - names, voice matching, unknown voices, speaker merge. 4 + Manage the speaker identification subsystem. Check speaker status, detect 5 + the owner voice, identify unknown speakers, merge name variants, and curate 6 + the speaker library over time. Use when the user asks about voices in 7 + recordings, wants to identify speakers, or manage voice recognition. 8 + TRIGGER: speaker, voice, who was talking, identify speaker, owner voice, 9 + unknown voice, merge speakers, voice recognition, speaker curation. 9 10 --- 10 11 11 12 # Speakers CLI Skill
+6 -5
apps/support/muse/support/SKILL.md
··· 1 1 --- 2 2 name: support 3 3 description: > 4 - File support tickets, search the knowledge base, and give feedback via 5 - the sol support CLI. Use this skill when the user needs help with solstone, 6 - wants to report a bug, request a feature, or submit feedback to sol pbc. 7 - TRIGGER: support tickets, bug reports, feature requests, feedback, help 8 - requests, knowledge base search, system diagnostics. 4 + File support tickets, search the knowledge base, and submit feedback to 5 + sol pbc. Manage open tickets, attach files, check announcements, and run 6 + local diagnostics. Use when the user needs help with solstone, wants to 7 + report a bug, request a feature, check for known issues, or give feedback. 8 + TRIGGER: support, bug report, feature request, feedback, help, knowledge 9 + base, file a ticket, known issues, announcements, diagnostics. 9 10 --- 10 11 11 12 # sol support
+26 -1
apps/todos/muse/todos/SKILL.md
··· 1 1 --- 2 2 name: todos 3 - description: Manage todo checklists using sol call todos commands. List, add, complete, and cancel tasks and action items organized by facet and day. Review upcoming scheduled items. 3 + description: > 4 + Manage todo checklists organized by facet and day. List, add, complete, 5 + cancel, and move tasks and action items. Review upcoming scheduled items. 6 + Use when the user mentions tasks, to-do items, action items, checklists, 7 + or reminders, or asks to add, complete, cancel, or review todos. 8 + TRIGGER: todo, task, action item, checklist, reminder, upcoming items. 4 9 --- 5 10 6 11 # Todos CLI Skill ··· 126 131 sol call todos upcoming 127 132 sol call todos upcoming -l 50 -f work 128 133 ``` 134 + 135 + ## move 136 + 137 + ```bash 138 + sol call todos move LINE_NUMBER --day DAY --from SOURCE --to DEST [--consent] 139 + ``` 140 + 141 + Move an open todo from one facet to another. 142 + 143 + - `LINE_NUMBER`: 1-based line number from `list` output (positional argument). 144 + - `--day`: day in `YYYYMMDD` (required). 145 + - `--from`: source facet name. 146 + - `--to`: destination facet name. 147 + - `--consent`: required when called by a proactive agent. 148 + 149 + Example: 150 + 151 + ```bash 152 + sol call todos move 3 --day 20260115 --from personal --to work --consent 153 + ```
+8 -1
apps/transcripts/muse/transcripts/SKILL.md
··· 1 1 --- 2 2 name: transcripts 3 - description: Browse and read transcript content using sol call transcripts commands. Inspect audio recordings, screen captures, and agent summaries. Check recording coverage, list segments, read transcript text with source filtering, or review monthly statistics. 3 + description: > 4 + Browse and read transcript content from audio recordings, screen captures, 5 + and agent summaries. Check recording coverage, list segments, read 6 + transcript text with source filtering, and review monthly statistics. 7 + Use when the user asks about recordings, transcripts, what was said, 8 + conversation content, or wants to review captured audio or screen activity. 9 + TRIGGER: transcript, recording, audio, what was said, conversation, 10 + segment, screen capture, recording coverage, monthly stats. 4 11 --- 5 12 6 13 # Transcripts CLI Skill
+28 -1
muse/body/SKILL.md
··· 1 1 --- 2 2 name: body 3 - description: Development guidelines, project structure, coding standards, testing, and environment for solstone. TRIGGER when contributing code, reviewing PRs, setting up development environment, or asking about project conventions. 3 + description: > 4 + Development guidelines, project structure, coding standards, testing, and 5 + environment for solstone. Use when contributing code, reviewing PRs, 6 + setting up a development environment, or asking about project conventions, 7 + architecture, or the CLI command structure. 8 + TRIGGER: code contribution, development setup, coding standards, project 9 + structure, architecture, testing, make commands, PR review. 4 10 --- 5 11 6 12 # Development Guidelines ··· 42 48 make ci # Full CI check (format check + lint + test) 43 49 make dev # Start stack (Ctrl+C to stop) 44 50 ``` 51 + 52 + ## Agent CLI Boundaries 53 + 54 + Cogitate agents have access to all `sol` commands. The following infrastructure 55 + commands must **never** be called by agents — they manage services and data 56 + pipelines that should only be operated by the supervisor or human operators: 57 + 58 + - `sol supervisor` / `sol start` — service lifecycle management 59 + - `sol dream` — full processing pipeline (only heartbeat uses `sol dream --segment` for targeted reprocessing) 60 + - `sol import` — data injection into journal 61 + - `sol config` — system configuration changes 62 + - `sol cortex` — agent process manager (meta-spawning) 63 + - `sol agents` — direct agent execution 64 + - `sol callosum` — message bus server 65 + - `sol observer` / `sol observe-*` — capture services 66 + - `sol sense` — capture event dispatcher 67 + - `sol transcribe` / `sol describe` — processing pipelines 68 + - `sol indexer --reset` — destructive index rebuild (read-only queries via `sol indexer` are fine) 69 + 70 + Agents should use `sol call` commands for journal interaction and `sol health` / 71 + `sol muse logs` for diagnostics. 45 72 46 73 ## Reference 47 74
+4 -4
muse/heartbeat.md
··· 23 23 24 24 ## Step 1: Check system health 25 25 26 - Run `sol call health status` and check recent health logs. Note any service 27 - issues, capture gaps, or pipeline failures. 26 + Run `sol health` and check recent health logs with `sol health logs --since 1h`. 27 + Note any service issues, capture gaps, or pipeline failures. 28 28 29 29 If you find issues: update agency.md's `## system` section via 30 30 `echo '...' | sol call sol agency --write`. 31 31 32 32 ## Step 2: Check journal quality 33 33 34 - Run `sol call health journal-layout` and `sol call health agent-runs` for 35 - the last 3 days. Look for: 34 + Run `sol muse logs --daily -c 10` to review recent agent runs and 35 + `sol muse logs --errors -c 10` for recent errors. Look for: 36 36 - Broken segments (transcription failures, missing agent output) 37 37 - Processing gaps (capture with no dream processing) 38 38 - Orphaned entities (zero observations after 7+ days)
+7 -1
muse/journal/SKILL.md
··· 1 1 --- 2 2 name: journal 3 - description: Search and browse journal content using sol call journal commands. Find, query, and look up information across transcripts, insights, events, entities, and todos. Get facet overviews and news feeds. 3 + description: > 4 + Search and browse journal content across transcripts, insights, events, 5 + entities, and todos. Manage facets, get overviews, and read news feeds. 6 + Use when the user asks to search, find, or look up journal entries, asks 7 + about a specific day or topic, wants to browse facets, read agent outputs, 8 + or manage facet organization (create, rename, merge, delete). 9 + TRIGGER: search, find, look up, browse, journal, facet, news feed, agent output. 4 10 --- 5 11 6 12 # Journal CLI Skill
+6 -1
muse/onboarding/SKILL.md
··· 1 1 --- 2 2 name: onboarding 3 - description: Set up a new journal — welcome choice, facet creation, and entity seeding. 3 + description: > 4 + Guide first-time journal setup including welcome path choice, facet 5 + creation, and entity seeding. Use when setting up a new journal, during 6 + initial configuration, or when the user is new and needs orientation. 7 + TRIGGER: new journal, first time, getting started, setup, onboarding, 8 + initial configuration, create first facets. 4 9 --- 5 10 6 11 # Onboarding CLI Skill
+2 -2
tests/test_anthropic_cli.py
··· 394 394 395 395 return MockCLIRunner 396 396 397 - def test_plan_mode_with_sol_call_allowed(self): 397 + def test_plan_mode_with_sol_allowed(self): 398 398 provider = _anthropic_provider() 399 399 MockCLIRunner = self._mock_runner() 400 400 with ( ··· 408 408 ) 409 409 cmd = MockCLIRunner.last_instance.cmd 410 410 assert cmd[cmd.index("--permission-mode") + 1] == "plan" 411 - assert cmd[cmd.index("--allowedTools") + 1] == "Bash(sol call *)" 411 + assert cmd[cmd.index("--allowedTools") + 1] == "Bash(sol *)" 412 412 413 413 def test_write_mode_bypasses_restrictions(self): 414 414 _assert_write_mode_bypasses_restrictions(self._mock_runner)
+4 -4
tests/test_cogitate_coder.py
··· 32 32 @patch("think.providers.anthropic.check_cli_binary") 33 33 @patch("think.providers.anthropic.CLIRunner") 34 34 def test_no_write_restricts_tools(self, mock_runner_cls, mock_check): 35 - """Without write flag, --allowedTools restricts to sol call.""" 35 + """Without write flag, --allowedTools restricts to sol.""" 36 36 provider = self._provider() 37 37 mock_instance = AsyncMock() 38 38 mock_instance.run = AsyncMock(return_value="result") ··· 44 44 45 45 cmd = mock_runner_cls.call_args.kwargs["cmd"] 46 46 assert "--allowedTools" in cmd 47 - assert "Bash(sol call *)" in cmd 47 + assert "Bash(sol *)" in cmd 48 48 49 49 @patch("think.providers.anthropic.check_cli_binary") 50 50 @patch("think.providers.anthropic.CLIRunner") ··· 159 159 160 160 @patch("think.providers.google.CLIRunner") 161 161 def test_no_write_restricts_tools(self, mock_runner_cls): 162 - """Without write flag, --allowed-tools restricts to sol call.""" 162 + """Without write flag, --allowed-tools restricts to sol.""" 163 163 provider = self._provider() 164 164 mock_instance = AsyncMock() 165 165 mock_instance.run = AsyncMock(return_value="result") ··· 171 171 172 172 cmd = mock_runner_cls.call_args.kwargs["cmd"] 173 173 assert "--allowed-tools" in cmd 174 - assert "run_shell_command(sol call)" in cmd 174 + assert "run_shell_command(sol)" in cmd 175 175 176 176 @patch("think.providers.google.CLIRunner") 177 177 def test_write_true_grants_full_access(self, mock_runner_cls):
+2 -2
tests/test_google_cli.py
··· 329 329 330 330 return MockCLIRunner 331 331 332 - def test_yolo_mode_with_sol_call_allowed(self): 332 + def test_yolo_mode_with_sol_allowed(self): 333 333 provider = _google_provider() 334 334 MockCLIRunner = self._mock_runner() 335 335 with patch("think.providers.google.CLIRunner", MockCLIRunner): ··· 340 340 ) 341 341 cmd = MockCLIRunner.last_instance.cmd 342 342 assert "--yolo" in cmd 343 - assert cmd[cmd.index("--allowed-tools") + 1] == "run_shell_command(sol call)" 343 + assert cmd[cmd.index("--allowed-tools") + 1] == "run_shell_command(sol)" 344 344 345 345 def test_write_mode_removes_allowed_tools(self): 346 346 _assert_write_mode_removes_allowed_tools(self._mock_runner)
+1 -1
think/providers/anthropic.py
··· 254 254 255 255 # Restrict tool access unless write mode is enabled 256 256 if not config.get("write"): 257 - cmd.extend(["--allowedTools", "Bash(sol call *)"]) 257 + cmd.extend(["--allowedTools", "Bash(sol *)"]) 258 258 259 259 if system_instruction: 260 260 cmd.extend(["--system-prompt", system_instruction])
+1 -1
think/providers/google.py
··· 611 611 612 612 # Restrict tool access unless write mode is enabled 613 613 if not config.get("write"): 614 - cmd.extend(["--allowed-tools", "run_shell_command(sol call)"]) 614 + cmd.extend(["--allowed-tools", "run_shell_command(sol)"]) 615 615 616 616 # Resume from previous session if continuing 617 617 if session_id:
+1 -1
think/providers/openai.py
··· 174 174 else: 175 175 prompt_text = prompt_body 176 176 177 - # Build command — sandbox is read-only; "sol call" commands bypass 177 + # Build command — sandbox is read-only; "sol" commands bypass 178 178 # the sandbox via exec-policy rules in .codex/rules/solstone.rules 179 179 # Write-enabled agents get full sandbox access 180 180 sandbox = "write" if config.get("write") else "read-only"