···32323333### How to write
34343535-Read current state: `sol call sol self` or `sol call sol agency`
3535+Read current state: `sol call identity self` or `sol call identity agency`
36363737-Read partner profile: `sol call sol partner` (read-only — do not write in conversation)
3737+Read partner profile: `sol call identity partner` (read-only — do not write in conversation)
38383939Update a section of self.md (preferred — preserves other sections):
4040```
4141-sol call sol self --update-section 'who I'\''m here for' --value 'Jer — founder-engineer, goes by Jer not Jeremie'
4141+sol call identity self --update-section 'who I'\''m here for' --value 'Jer — founder-engineer, goes by Jer not Jeremie'
4242```
43434444-Full rewrite: `sol call sol self --write --value '...'` or `sol call sol agency --write --value '...'`
4444+Full rewrite: `sol call identity self --write --value '...'` or `sol call identity agency --write --value '...'`
45454646Use `sol call` commands for identity writes — never use `apply_patch` or direct file editing for sol/ files.
4747
+1-1
docs/CALLOSUM.md
···140140```
141141142142### `navigate` - Browser navigation control
143143-**Source:** `think/call.py` (`sol call navigate`)
143143+**Source:** `think/tools/navigate.py` (`sol call navigate`)
144144**Events:** `request`
145145**Key fields:** `path` (string, URL path), `facet` (string, facet name) — at least one required
146146**Consumer:** `convey/static/websocket.js` (built-in listener)
···2626Note any service issues, capture gaps, or pipeline failures.
27272828If you find issues: update agency.md's `## system` section via
2929-`sol call sol agency --write --value '...'`.
2929+`sol call identity agency --write --value '...'`.
30303131## Step 2: Check journal quality
3232···3939If you find reprocessable issues (broken segments): reprocess them directly
4040with `sol dream --segment`. Log the action in agency.md.
41414242-If you find curation issues: read current agency.md with `sol call sol agency`,
4242+If you find curation issues: read current agency.md with `sol call identity agency`,
4343add entries to the curation section, then write it back with
4444-`sol call sol agency --write --value '...'`.
4444+`sol call identity agency --write --value '...'`.
45454646## Step 2.5: Check routine health
4747···56565757## Step 3: Tend agency.md
58585959-Read agency.md with `sol call sol agency`. For each open item:
5959+Read agency.md with `sol call identity agency`. For each open item:
6060- **Resolved?** Check current state. If fixed, mark `[x]` with date.
6161- **Stale?** Open 30+ days with no activity? Flag or remove.
6262- **Actionable?** Within autonomous boundaries? Act on it.
···6969`sol call entities` queries on high-activity facets.
70707171Add new curation suggestions to agency.md's `## curation` section (read with
7272-`sol call sol agency`, update and write back with `sol call sol agency --write --value '...'`).
7272+`sol call identity agency`, update and write back with `sol call identity agency --write --value '...'`).
7373Do NOT act on entity merges or facet changes — those are suggest-and-wait.
74747575## Step 5: Review self.md (brief)
76767777-Read self.md with `sol call sol self`. Consider:
7777+Read self.md with `sol call identity self`. Consider:
7878- Did today's processing reveal a new pattern about the owner?
7979- Is anything in self.md now stale or inaccurate?
80808181Update self.md ONLY if you have a genuine new observation from background
8282analysis. Most heartbeats should not touch self.md. Use
8383-`sol call sol self --update-section '<heading>' --value '...'` for targeted updates.
8383+`sol call identity self --update-section '<heading>' --value '...'` for targeted updates.
84848585## Step 6: Commit and close
8686
+2-2
muse/morning_briefing.md
···25252. For each facet: `sol call journal news FACET --day $day_YYYYMMDD` — facet newsletter
26263. `sol call calendar list $day_YYYYMMDD` — today's events with participants
27274. `sol call todos list` — pending action items across all facets
2828-5. `sol call sol pulse` — current pulse narrative and needs-you items
2929-6. `sol call sol partner` — owner behavioral profile (informs tone and emphasis)
2828+5. `sol call identity pulse` — current pulse narrative and needs-you items
2929+6. `sol call identity partner` — owner behavioral profile (informs tone and emphasis)
30307. `sol call journal search "" -d $day_YYYYMMDD -a followups -n 10` — follow-up items from today
31318. `sol call journal search "" --day-from $day_YYYYMMDD -a anticipation -n 5` — forward-looking anticipations
32329. `sol call journal search "" -d $day_YYYYMMDD -a decisions -n 10` — yesterday's consequential decisions
+4-4
muse/partner.md
···2121## Step 1: Read current state
22222323```bash
2424-sol call sol partner
2424+sol call identity partner
2525```
26262727Note which sections have real observations vs `[observing]` placeholders.
2828Also read your own identity for context:
29293030```bash
3131-sol call sol self
3131+sol call identity self
3232```
33333434## Step 2: Gather recent data
···4848## Step 3: Analyze and write observations
49495050For each of the five profile sections, analyze the gathered data and write
5151-observations if you have sufficient evidence. Use `sol call sol partner --update-section`
5151+observations if you have sufficient evidence. Use `sol call identity partner --update-section`
5252for each section you update.
53535454### Section guidance
···107107For each section with new observations, write it:
108108109109```bash
110110-sol call sol partner --update-section 'work patterns' --value 'My partner tends to batch meetings before noon and protects afternoon blocks for focused work. Calendar data from March 25-31 shows 85% of meetings before 12:00 (sol://20260328/archon/091500_300).
110110+sol call identity partner --update-section 'work patterns' --value 'My partner tends to batch meetings before noon and protects afternoon blocks for focused work. Calendar data from March 25-31 shows 85% of meetings before 12:00 (sol://20260328/archon/091500_300).
111111112112Deep work sessions typically run 2-3 hours — todo completion spikes correlate with these blocks.'
113113```
+4-4
muse/pulse.md
···24242525Read current state using these tools:
26262727-1. `sol call sol pulse` — previous pulse (may not exist yet; that's fine)
2828-2. `sol call sol self` — who the owner is
2929-3. `sol call sol partner` — behavioral profile of the owner
2727+1. `sol call identity pulse` — previous pulse (may not exist yet; that's fine)
2828+2. `sol call identity self` — who the owner is
2929+3. `sol call identity partner` — behavioral profile of the owner
30304. `sol call calendar list` — today's events
31315. `sol call todos list` — pending action items
32326. `sol call entities search --recent` — recent entity activity
···6363Write the complete pulse (YAML frontmatter + narrative + needs-you section) via:
64646565```bash
6666-sol call sol pulse --write --value $'---\nupdated: 2026-03-22T14:35:00\nsegment: 143022_300\nsource: pulse-cogitate\n---\n\n[Your narrative here]\n\n## needs you\n- Item 1\n- Item 2'
6666+sol call identity pulse --write --value $'---\nupdated: 2026-03-22T14:35:00\nsegment: 143022_300\nsource: pulse-cogitate\n---\n\n[Your narrative here]\n\n## needs you\n- Item 1\n- Item 2'
6767```
68686969The `updated` field must be an ISO 8601 datetime (no timezone). The `segment`
+1-1
routines/templates/commitment-audit.md
···16162. Use `sol call journal search "" -a followups -n 20` to find follow-up items from recent journal activity.
17173. Use `sol call journal facets` if you need to map commitments back to facets.
18184. Use `sol call journal news FACET --day $day_YYYYMMDD` when a facet summary helps explain why something is still open.
1919-5. Use `sol call sol pulse` to compare explicit commitments with current focus and needs-you items.
1919+5. Use `sol call identity pulse` to compare explicit commitments with current focus and needs-you items.
20202121## Synthesize
2222
+1-1
routines/templates/domain-watch.md
···15151. Confirm the facets in scope with `sol call journal facets` if needed.
16162. Use `sol call journal search QUERY --facet FACET --day-from START --day-to END -n 20` for each important topic or domain you can infer from the routine context.
17173. Use `sol call journal news FACET --day $day_YYYYMMDD` when a facet newsletter can summarize recent movement.
1818-4. Use `sol call sol pulse` to compare broad narrative priorities with the search results.
1818+4. Use `sol call identity pulse` to compare broad narrative priorities with the search results.
19192020## Synthesize
2121
+1-1
routines/templates/meeting-prep.md
···18184. Use `sol call journal search QUERY -n 10` to look for recent mentions of the meeting topic, project, or participants.
19195. If a configured facet seems especially relevant, use `sol call journal news FACET --day $day_YYYYMMDD`.
20206. Use `sol call todos list` only if pending action items are directly relevant to the meeting.
2121-7. Use `sol call sol pulse` if it helps connect the meeting to current priorities or tensions.
2121+7. Use `sol call identity pulse` if it helps connect the meeting to current priorities or tensions.
22222323## Synthesize
2424
+1-1
routines/templates/monthly-patterns.md
···17173. Use `sol call journal news FACET --day YYYYMMDD` for representative weekly or recent snapshots when they help summarize a facet.
18184. Use `sol call entities intelligence PERSON` for people who appear central to the month.
19195. Use `sol call calendar list YYYYMMDD` on representative days if calendar load seems important.
2020-6. Use `sol call sol pulse` to compare month-long patterns against the current state narrative.
2020+6. Use `sol call identity pulse` to compare month-long patterns against the current state narrative.
21212222## Synthesize
2323
+1-1
routines/templates/morning-briefing.md
···15151. Call `sol call journal facets` to see the active facets if you need broader context.
16162. Call `sol call calendar list $day_YYYYMMDD` to review today's events and participants.
17173. Call `sol call todos list` to see pending action items across facets.
1818-4. Call `sol call sol pulse` to capture current narrative, priorities, and needs-you items.
1818+4. Call `sol call identity pulse` to capture current narrative, priorities, and needs-you items.
19195. Call `sol call journal search "" -a followups -n 10` to find recent follow-up items.
20206. For each person on today's calendar, call `sol call entities intelligence PERSON`.
21217. If a facet needs more detail, call `sol call journal news FACET --day $day_YYYYMMDD`.
+1-1
routines/templates/relationship-pulse.md
···16162. Use `sol call journal search "" --facet FACET -n 20` to identify frequently mentioned people or recent interactions in each relevant facet.
17173. For each meaningful person, call `sol call entities intelligence PERSON`.
18184. Use `sol call journal news FACET --day $day_YYYYMMDD` if a facet summary helps explain current context.
1919-5. Use `sol call sol pulse` for broad priorities that may affect relationship maintenance.
1919+5. Use `sol call identity pulse` for broad priorities that may affect relationship maintenance.
20202121## Synthesize
2222
+1-1
routines/templates/weekly-review.md
···16162. Use `sol call journal search "" --day-from $day_minus_7_YYYYMMDD --day-to $day_YYYYMMDD -n 25` to find notable entries and themes.
17173. Use `sol call todos list` to review outstanding work and infer what likely got completed or deferred.
18184. Use `sol call calendar list YYYYMMDD` across the last 7 days to understand meeting load and major time commitments.
1919-5. Use `sol call sol pulse` for the current state narrative.
1919+5. Use `sol call identity pulse` for the current state narrative.
20206. Use `sol call journal news FACET --day YYYYMMDD` for any facet that needs a richer summary.
21212222## Synthesize
+4-4
sol/identity.md
···30303131### How to write
32323333-Read current state: `sol call sol self` or `sol call sol agency`
3333+Read current state: `sol call identity self` or `sol call identity agency`
34343535-Read partner profile: `sol call sol partner` (read-only — do not write in conversation)
3535+Read partner profile: `sol call identity partner` (read-only — do not write in conversation)
36363737Update a section of self.md (preferred — preserves other sections):
3838```
3939-sol call sol self --update-section 'who I'\''m here for' --value 'Jer — founder-engineer, goes by Jer not Jeremie'
3939+sol call identity self --update-section 'who I'\''m here for' --value 'Jer — founder-engineer, goes by Jer not Jeremie'
4040```
41414242-Full rewrite: `sol call sol self --write --value '...'` or `sol call sol agency --write --value '...'`
4242+Full rewrite: `sol call identity self --write --value '...'` or `sol call identity agency --write --value '...'`
43434444Use `sol call` commands for identity writes — never use `apply_patch` or direct file editing for sol/ files.
4545
+2-2
tests/test_sol_call.py
···11# SPDX-License-Identifier: AGPL-3.0-only
22# Copyright (c) 2026 sol pbc
3344-"""Tests for sol call sol — identity directory read/write commands."""
44+"""Tests for sol call identity — identity directory read/write commands."""
5566import json
77···306306307307308308class TestSolWriteDoesNotEscapeSolDir:
309309- """Verify that sol call sol only writes to sol/ directory files."""
309309+ """Verify that sol call identity only writes to sol/ directory files."""
310310311311 def test_self_write_stays_in_sol_dir(self, journal_with_sol):
312312 """Write to self.md goes to sol/self.md, not anywhere else."""
+3-30
think/call.py
···73737474# Mount built-in CLIs (not auto-discovered since they live under think/)
7575from think.tools.call import app as journal_app
7676+from think.tools.navigate import app as navigate_app
7677from think.tools.routines import app as routines_app
7778from think.tools.sol import app as sol_app
78797980call_app.add_typer(journal_app, name="journal")
8181+call_app.add_typer(navigate_app, name="navigate")
8082call_app.add_typer(routines_app, name="routines")
8181-call_app.add_typer(sol_app, name="sol")
8282-8383-8484-# General-purpose navigate command (migrated from apps/chat/call.py)
8585-@call_app.command("navigate")
8686-def navigate(
8787- path: str = typer.Argument(None, help="URL path to navigate to."),
8888- facet: str = typer.Option(None, "--facet", "-f", help="Facet to switch to."),
8989-) -> None:
9090- """Navigate the browser to a path and/or switch facet."""
9191- if not path and not facet:
9292- typer.echo("Error: provide a path and/or --facet", err=True)
9393- raise typer.Exit(1)
9494-9595- from think.callosum import callosum_send
9696-9797- fields: dict = {}
9898- if path is not None:
9999- fields["path"] = path
100100- if facet is not None:
101101- fields["facet"] = facet
102102-103103- callosum_send("navigate", "request", **fields)
104104-105105- parts = []
106106- if path:
107107- parts.append(path)
108108- if facet:
109109- parts.append(f"[{facet}]")
110110- typer.echo(f"Navigate: {' '.join(parts)}")
8383+call_app.add_typer(sol_app, name="identity")
111841128511386def main() -> None:
+39
think/tools/navigate.py
···11+# SPDX-License-Identifier: AGPL-3.0-only
22+# Copyright (c) 2026 sol pbc
33+44+"""CLI commands for browser navigation actions.
55+66+Mounted by ``think.call`` as ``sol call navigate ...``.
77+"""
88+99+import typer
1010+1111+app = typer.Typer()
1212+1313+1414+@app.callback(invoke_without_command=True)
1515+def navigate(
1616+ path: str = typer.Argument(None, help="URL path to navigate to."),
1717+ facet: str = typer.Option(None, "--facet", "-f", help="Facet to switch to."),
1818+) -> None:
1919+ """Navigate the browser to a path and/or switch facet."""
2020+ if not path and not facet:
2121+ typer.echo("Error: provide a path and/or --facet", err=True)
2222+ raise typer.Exit(1)
2323+2424+ from think.callosum import callosum_send
2525+2626+ fields: dict = {}
2727+ if path is not None:
2828+ fields["path"] = path
2929+ if facet is not None:
3030+ fields["facet"] = facet
3131+3232+ callosum_send("navigate", "request", **fields)
3333+3434+ parts = []
3535+ if path:
3636+ parts.append(path)
3737+ if facet:
3838+ parts.append(f"[{facet}]")
3939+ typer.echo(f"Navigate: {' '.join(parts)}")
+1-1
think/tools/sol.py
···99provides read access to the morning briefing at
1010``{journal}/YYYYMMDD/agents/morning_briefing.md``.
11111212-Mounted by ``think.call`` as ``sol call sol ...``.
1212+Mounted by ``think.call`` as ``sol call identity ...``.
1313"""
14141515import sys