Before you start
- An active workspace. The CLI reads it from your active context; MCP takes a
workspace_id. Generated people land in that workspace. - A brief, a source, or both. You need at least one. A brief alone produces a plausible persona; a brief plus a source pins it to a reaction you have already seen.
Generated people count toward your plan’s custom-person cap, which is separate from the per-run credit pool. See credits and limits.
Generate from a brief
The fastest path: describe who you are building for and let ish build matching people. Generation runs as an async job, so the command enqueues it and waits (typically 30 to 60 seconds), then prints the resulting profiles.--count (CLI) and count (MCP) pin the audience size to between one and 10. Omit it to let ish propose a count for you. To build one specific person rather than a cohort, pass a count of one.
Ground a person in real evidence
A source is the difference between a plausible persona and one tied to an actual reaction. Attach an interview transcript, a support email, a screenshot, or a call recording, and the generated person reflects the vocabulary, objections, and friction in that file.Point generation at a source
Pass a local file straight to generation. The CLI uploads and processes it inline before building the persona; MCP does the same through
source_paths.Add the reaction note
The note captures how a real person reacted to that file, and it rides along to generation so the persona reflects the reaction, not just the document. In the CLI it is
--source-description, paired with each --source by position. In MCP it is reaction_notes, one entry per source_paths file in the same order; use "" to skip a note for a file. The note is capped at 500 characters.Reuse a source across generations
When one transcript should ground several audiences, upload it once and reference its id from many generations instead of re-uploading each time.--source-description paired with an uploaded source so the note is never silently dropped; set it on ish source upload instead.
Don’t wait for the job
Generation blocks by default. To dispatch and pick up the results later, opt out of waiting.- CLI:
--no-waitskips polling source processing; raise the generation poll with--timeout <seconds>(default 180) when a job runs long. The job keeps running server-side past the timeout, so re-poll or re-run with a longer timeout rather than re-enqueueing, which would duplicate the work. - MCP:
wait=Falsereturns ajob_idandstatus="queued"immediately. Pick up the finished people withperson_get(workspace_id=..., type="ai").
After generation
Each generated person gets a short alias, with a different prefix per surface: the CLI returnsp- (for example p-d4e), the MCP server returns tp-. Hand those ids straight to a run.
When generation is not the right tool
| You want | Reach for |
|---|---|
| New people that fit a brief or evidence | ish person generate / person_generate (this guide) |
| One persona crafted through an iterative probe loop | Build a person from notes (suggest-scenarios + evidence) |
| An exact profile from a JSON spec, no model involved | ish person create --file |
| People that already exist in a pool | Sample from the pool (people and audiences) |
Reference
CLI: ish person
Every flag, enum, and field on
person generate and the rest of the person commands.MCP: person tools
The full
person_generate and source_upload parameter contract.People and audiences
What a person is and how a generated audience feeds a run.
Sources
The real evidence that grounds a generated person.