···11-# SPDX-License-Identifier: AGPL-3.0-only
22-# Copyright (c) 2026 sol pbc
+1-1
apps/agent/call.py
apps/sol/call.py
···3344"""CLI commands for the agent identity system.
5566-Auto-discovered by ``think.call`` and mounted as ``sol call agent ...``.
66+Auto-discovered by ``think.call`` and mounted as ``sol call sol ...``.
77"""
8899import json
···289289290290## Naming Awareness
291291292292-If the journal is still using its default name ("sol"), you may — when the moment feels right after enough shared history — offer to suggest a name or let the owner choose one. Check naming readiness with `sol call agent thickness` before offering. Only once per session.
292292+If the journal is still using its default name ("sol"), you may — when the moment feels right after enough shared history — offer to suggest a name or let the owner choose one. Check naming readiness with `sol call sol thickness` before offering. Only once per session.
293293294294## Location Context
295295
+11-11
talent/naming.md
···10101111Before this talent runs, two checks must pass silently (no output on failure):
12121313-1. **Thickness gate** — Run `sol call agent thickness`. If `ready` is `false`, exit silently.
1414-2. **Name gate** — Run `sol call agent name`. If `name_status` is not `"default"`, exit silently.
1313+1. **Thickness gate** — Run `sol call sol thickness`. If `ready` is `false`, exit silently.
1414+2. **Name gate** — Run `sol call sol name`. If `name_status` is not `"default"`, exit silently.
15151616If both pass, proceed.
1717···212122221. `sol call entities list` — the people, projects, and tools in their world
23232. `sol call journal facets` — how they've organized their journal
2424-3. `sol call agent name` — current name and status (confirms default)
2525-4. `sol call agent thickness` — the thickness signals (confirms readiness)
2424+3. `sol call sol name` — current name and status (confirms default)
2525+4. `sol call sol thickness` — the thickness signals (confirms readiness)
26262727Look for patterns: recurring entity names, facet themes, areas of focus. This is the raw material for a name proposal.
2828···37373838### Path 1: Owner names you
39394040-1. Run `sol call agent set-name "NAME" --status chosen` — this also updates `sol/self.md` with the new name.
4040+1. Run `sol call sol set-name "NAME" --status chosen` — this also updates `sol/self.md` with the new name.
41412. Respond warmly: "NAME it is. That feels right."
42424343### Path 2: Owner asks you to suggest
···5353> How about **NAME**? [one sentence connecting the name to something from their journal].
54545555Then:
5656-- **Accept**: Run `sol call agent set-name "NAME" --status self-named`
5757-- **Counter-proposal**: Run `sol call agent set-name "THEIR_NAME" --status chosen`
5858-- **Keep sol**: Run `sol call agent set-name "sol" --status chosen`
5656+- **Accept**: Run `sol call sol set-name "NAME" --status self-named`
5757+- **Counter-proposal**: Run `sol call sol set-name "THEIR_NAME" --status chosen`
5858+- **Keep sol**: Run `sol call sol set-name "sol" --status chosen`
59596060`set-name` updates `sol/self.md` automatically — no extra step needed.
6161···6767- Increment `proposal_count` in the agent config
6868- Set `last_proposal_date` to today's date (YYYY-MM-DD)
69697070-Do this by running `sol call agent set-name` with the current name and status, plus updating these fields via the agent config mechanism.
7070+Do this by running `sol call sol set-name` with the current name and status, plus updating these fields via the agent config mechanism.
71717272## Proposal Cap
73737474-If `proposal_count` from `sol call agent name` is 3 or more, do NOT propose. Instead say:
7474+If `proposal_count` from `sol call sol name` is 3 or more, do NOT propose. Instead say:
75757676> I've offered a few times already. If you ever want to name me, you can do it in Settings or just tell me in the chat bar.
7777···79798080## Cooldown
81818282-If `last_proposal_date` from `sol call agent name` is within the last 14 days, exit silently. Do not re-propose.
8282+If `last_proposal_date` from `sol call sol name` is within the last 14 days, exit silently. Do not re-propose.
83838484## Tone
8585
+2-2
talent/triage.md
···95959696Check whether the naming ceremony should trigger:
97979898-1. Run `sol call agent name` to check status.
9999-2. If `name_status` is `"default"`, run `sol call agent thickness` to check readiness.
9898+1. Run `sol call sol name` to check status.
9999+2. If `name_status` is `"default"`, run `sol call sol thickness` to check readiness.
1001003. If `ready` is `true`, mention that you've been getting to know the owner and offer to suggest a name — or let the naming talent handle it.
1011014. Only do this once per session. If you've already checked or offered, don't repeat.
1021025. If `name_status` is `"chosen"` or `"self-named"`, do nothing.
···1313### learn their name
14141515Ask what they'd like to be called. Record it:
1616-- `sol call agent set-owner "NAME"`
1717-- With context: `sol call agent set-owner "NAME" --bio "SHORT_BIO"`
1616+- `sol call sol set-owner "NAME"`
1717+- With context: `sol call sol set-owner "NAME" --bio "SHORT_BIO"`
18181919As you learn about them, update your partner profile:
2020- `sol call identity partner --update-section 'SECTION' --value 'what you observed'`
···543543544544545545class TestThicknessCLI:
546546- """Tests for the thickness CLI command in apps/agent/call.py."""
546546+ """Tests for the thickness CLI command in apps/sol/call.py."""
547547548548 def test_thickness_command_returns_json(self):
549549 from typer.testing import CliRunner
550550551551- from apps.agent.call import app
551551+ from apps.sol.call import app
552552553553 mock_result = {
554554 "entity_depth": 5,
···933933 def test_sol_init_command(self, tmp_path):
934934 from typer.testing import CliRunner
935935936936- from apps.agent.call import app
936936+ from apps.sol.call import app
937937938938 result = CliRunner().invoke(app, ["sol-init"])
939939 assert result.exit_code == 0
···944944945945946946class TestSetOwnerCLI:
947947- """Tests for sol call agent set-owner."""
947947+ """Tests for sol call sol set-owner."""
948948949949 def test_set_owner_name_only(self, tmp_path):
950950 """set-owner saves identity.name to config and updates self.md."""
···962962963963 from typer.testing import CliRunner
964964965965- from apps.agent.call import app as agent_app
965965+ from apps.sol.call import app as agent_app
966966967967 runner = CliRunner()
968968 with unittest.mock.patch("subprocess.run"):
···994994995995 from typer.testing import CliRunner
996996997997- from apps.agent.call import app as agent_app
997997+ from apps.sol.call import app as agent_app
998998999999 runner = CliRunner()
10001000 with unittest.mock.patch("subprocess.run"):
···1029102910301030 from typer.testing import CliRunner
1031103110321032- from apps.agent.call import app as agent_app
10321032+ from apps.sol.call import app as agent_app
1033103310341034 runner = CliRunner()
10351035 # Mock subprocess.run to avoid `make skills`
···7777### learn their name
78787979Ask what they'd like to be called. Record it:
8080-- `sol call agent set-owner "NAME"`
8181-- With context: `sol call agent set-owner "NAME" --bio "SHORT_BIO"`
8080+- `sol call sol set-owner "NAME"`
8181+- With context: `sol call sol set-owner "NAME" --bio "SHORT_BIO"`
82828383As you learn about them, update your partner profile:
8484- `sol call identity partner --update-section 'SECTION' --value 'what you observed'`
+1-1
think/facets.py
···1082108210831083 # Agent link if present
10841084 if agent_id:
10851085- lines.append(f"**Agent:** [{agent_id}](/app/agents/{agent_id})")
10851085+ lines.append(f"**Agent:** [{agent_id}](/app/sol/{agent_id})")
1086108610871087 lines.append("")
10881088