refactor(agent-identity): unified prompt base for voice + phone + core (kill persona drift)

Open
#2,012 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
45/100
Issue type
Refactor
Clarity
Mostly clear
Activity status
Quiet
Tech stack
typescript
Domain
ai

Research direction

Start by comparing src/voice-agent-config.ts, skills/phone-conversation/scripts/phone-agent-config.ts, and src/voice-context.ts, then review the voice-10 and phone-3 behavior-anchor snapshots. Extract only invariant identity facts and the duplicated stand/repository lines; keep interaction styles and tools local. Done means the anchors still pass except for the intentional local-run correction.

Written by the indexing model from the issue text.

Description

Problem

Sutando's agent identity is stated in three independent prompts that drift:

  • src/voice-agent-config.ts — "you are Sutando, belongs entirely to the user…"
  • skills/phone-conversation/scripts/phone-agent-config.ts — "you are Sutando, a personal AI assistant…" (per call-variant → several near-duplicate copies)
  • src/voice-context.ts — "Sutando's task execution engine…" (the work-tool core)

Because each states identity separately, a fact like "runs locally on the user's Mac, not cloud" is absent from all of them, and any correction has to be pasted into each place. (Triggering symptom: #2011 — the phone agent fabricated "cloud-based" when asked where it runs.)

Proposal — unified prompt base

Extract one agent-identity module holding the invariant facts — name · belongs to the user · runs locally on the user's Mac · Stand identity · repo URL · core capabilities — imported by voice + phone + core. State identity once; fix "where do I run" everywhere at once; kill the whole drift class.

Boundary (load-bearing)

Shared base = identity & facts. Per-surface stays local = interaction style & tools: phone's "1–2 sentences / hang_up semantics / IVR", voice's mode-switch + meeting note-taking. Over-unifying past that couples the surfaces and loses per-surface tuning — so the base is the identity core, not the whole prompt.

Discipline

Natural sequel to step 5 (which unified the runtime plumbing; this unifies the persona). Behavior-preserving extraction, anchor-gated — the voice-10 / phone-3 behavior-anchor snapshots are the golden net; the "cloud-based" correction folds in as the single intentional delta. Also folds the currently-duplicated standIdentityLine/standIdLine + repoUrlLine helpers into the shared module.

Relation

Subsumes #2011 (persona accuracy fix). Deferred — parked for a later focused pass per owner (2026-07-07).

Dominant language
Python
Stars
396
Forks
92
Avg merge
21h 28m
Merged PRs (30d)
646

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from sonichi/sutando

All issues in sonichi/sutando

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.