person_profile · git:20261020.49a1c46 · 2026-10-20 · sha256 8f1c612f017e1430

person_profile git:20261020.49a1c46A

Immutable. This exact content never changes and is served at /api/v1/blob/8f1c612f017e1430.

---
name: person_profile
description: Generate individual profiles from an existing person roster, LinkedIn enrichment and dataset evidence, including founder-trait assessment for active founders. Use for selected people or the complete roster.
---

# Person profile

Generate standard individual profiles for use directly or by other skills.

## Inputs and outputs

The async API accepts `dataset_name`, optional `names` (a string or list),
and keyword-only `include_dataset_context=True`. Omitted names select everyone
in the roster. `person_profile` returns `list[InsightFile]`; the
`person_profile_as_person_objects` adapter runs the same workflow and returns
populated `list[Person]`.

Explicit unmatched names currently create sparse `Person` inputs for profiling;
they do not change the roster. The roster remains required even for these calls.

## Workflow and dependencies

Read the existing roster, resolve LinkedIn profiles and synchronize the dataset
before selecting reusable individual profiles. On a cache miss, combine the
resolved LinkedIn payload with `build_person_dossier` evidence when
`include_dataset_context` is enabled, then synthesize the profile.
The shared gatherer scans current parsed sources for full-word, ordered name
combinations unique within the existing roster, or exact email/LinkedIn matches.
Combinations require two words and eight letters; exact full names are exempt
from the length requirement but still checked for ambiguity. The threshold lives
in `config/people/dossier.json`. No discovery or NER call is needed.
Personal documents are included once (up to the existing 20,000-character limit);
other matches remain distinct chunks, excluding passages already in full documents.
The profile prompt resolves attribution and ignores uncertain or unrelated evidence.
The roster and retrieval settings participate in profile freshness, so new name
collisions invalidate generated profiles; manual profiles retain precedence.

Biographical and founder-trait instructions always belong to the standard prompt.
Apply the trait assessment only to explicitly identified active founders; keep
other people factual. [Shared profile standards](../standards_and_architecture/SKILL.md#standard-person-profiles)
own identifiers, filenames, manual precedence and compatibility between consumers.

Direct calls never discover people. Run [persons_in_dataset](../persons_in_dataset/SKILL.md)
first when the roster is missing; bulk refresh declares that dependency.

## Side effects and failure behavior

LinkedIn resolution can fetch profiles and update stored JSON and registry state.
Resolution and synchronization occur even before a manual or reusable profile
is selected. Expected LinkedIn/Apify acquisition failures are logged; profiling
continues with successful enrichment and available dataset evidence. Newly generated
profiles with unresolved LinkedIn retrieval carry a Markdown INCOMPLETE notice.
The notice does not change reuse rules or manual precedence. Unexpected errors
and synchronization failures still raise. Generation settings affect freshness metadata, not filenames.

A missing or invalid roster raises. An empty roster with no explicit names
returns `[]`. With no dossier, mentions or LinkedIn payload, generation saves a
profile with a no-information note. Individual generation failures are collected:
successful files remain, but the API raises instead of returning a partial list.

## Usage

The harness requires a person; the direct CLI also supports the complete roster.

```bash
conda run -n sictic-env python -m skills.harness /person_profile "<DATASET>" "<NAME>"
conda run -n sictic-env python -m skills.person_profile --dataset "<DATASET>"
conda run -n sictic-env python -m skills.person_profile --dataset "<DATASET>" --persons "<NAME_1>, <NAME_2>"
```

The direct CLI retains `--person` as an alias for `--persons`.

## References

- [Implementation and adapter](person_profile.py)
- [Profile prompts and query](../../config/person_profile/)
- [LinkedIn resolution contract](../standards_and_architecture/SKILL.md#linkedin-retrieval-and-persistence)