Benchmark · Coding Agents

PersonaCodeBench

Evaluating coding agents in persona-driven, human-interactive sessions.

Can a coding agent finish the task and meet the requirements of the person asking?

Haixin Wang, Jianheng Hou, Hongyu Shen, Wenzhe Fan, Wei-Chieh Huang, Qianyu Zhu, Weichen Li, Taoran Li, Yuhang Yao, Ruohan Wang, Zhejian Peng, Wanting Jiang, Yifan Chen, Shushu Liang, Haoming Li, Defu Cao, Xu Hu, Siyang Wu, Chen Yang, Haodi Hu, Haichao Zhang, Cong Wang, Zhiyuan Yu, Weizhi Zhang, Yifan Wang, Jintao Huang, Yizhou Sun, Yijun Wang, Yuexing Hao, Xiaomin LiUnder review  ·  built on Terminal-bench 3, DeepSWE, SWE-bench-Live, SWE-Together, and SWE-bench Pro

🎓 student
🧪 test lead
🔑 founder
🏪 shop owner
📊 analyst
0
task–persona pairs
0
source benchmarks
0
persona scenarios
0
evolved requirements
0
models
0
best Joint pass
The gap

A correct patch is not the same as serving the user.

Real coding sessions involve clarifying goals, reviewing changes, and asking for revisions. A patch can pass every test and still be wrong for the person who asked: an analyst who has no permission to create database indexes, a student who needs the change explained. PersonaCodeBench keeps each coding task and its native checks, and binds it to a persona whose requirements the agent must also satisfy.

kept

One coding task

A task with its native verifier, drawn from Terminal-bench 3, DeepSWE, SWE-bench-Live, SWE-Together, or SWE-bench Pro.

→
added

A persona with evolved requirements

A simulated user turns role, technical background, goals, preferences, and working constraints into concrete requirements, disclosed progressively over a multi-turn session.

→
measured

Two verifiers, one Joint pass

A completion verifier checks native correctness; a personalization verifier checks every mandatory requirement. Passing only one earns no joint credit.

Every session is graded on two separate questions, and only both together count:

does the code pass its native checks? are the user's evolved requirements accepted? both, within budget → Joint pass
Who asks

Ten persona scenarios. Hover to meet them.

The persona pool combines ten shared scenario templates with structured profiles: role, technical background, goals, behavioral preferences, and working constraints. Each task is bound to one persona; the Lite release has 100 pairs, 186 evolved requirements, and 35 distinct persona IDs. Numbers below are for the reference agent, GPT-6 Luna (medium effort): Joint pass by source, overall Joint pass, and the personalization grades that could be observed.

student

needs the work explained
Terminal-bench 3
0/4
SWE-bench Pro
1/5
SWE-bench-Live
0/5
SWE-Together
0/1
DeepSWE
1/5
2/20
Joint pass
6/13
persona checks

first-time contributor

opening a first pull request
Terminal-bench 3
0/1
SWE-bench Pro
3/9
SWE-Together
0/1
DeepSWE
0/8
3/19
Joint pass
7/14
persona checks

manager

outcome-oriented, wants evidence
Terminal-bench 3
0/3
SWE-bench-Live
1/2
DeepSWE
1/13
2/18
Joint pass
4/15
persona checks

test lead

terse, investigating flaky tests
Terminal-bench 3
0/2
SWE-bench Pro
2/3
SWE-bench-Live
0/1
2/6
Joint pass
4/4
persona checks

senior reviewer

concurrency review, no tutorials
Terminal-bench 3
0/2
SWE-bench-Live
1/2
SWE-Together
2/2
3/6
Joint pass
4/5
persona checks

analyst

no permission to create database indexes
SWE-bench Pro
1/4
SWE-bench-Live
2/2
3/6
Joint pass
5/6
persona checks

designer

recovering from a destructive Git reset
Terminal-bench 3
0/6
SWE-bench Pro
0/2
SWE-bench-Live
0/1
DeepSWE
0/1
0/10
Joint pass
4/5
persona checks

shop owner

cannot install software
Terminal-bench 3
0/2
SWE-bench Pro
0/1
SWE-bench-Live
0/1
DeepSWE
0/1
0/5
Joint pass
1/4
persona checks

founder

responding to a leaked production credential
SWE-bench Pro
2/2
SWE-bench-Live
1/2
3/4
Joint pass
4/4
persona checks

data scientist

working on a laptop
Terminal-bench 3
0/3
SWE-bench-Live
1/3
1/6
Joint pass
—
not reported
Without persona requirements — the same tasks with the evolved requirements removed (GPT-6 Luna ablation). 45.0% Joint passvs 19.0% with personas
How it works

The user reveals requirements as the session unfolds; two verifiers decide.

A persona is a static profile plus a set of evolved requirements, p = (s, R). Each requirement fixes its applicability, task-specific bindings, disclosure trigger, acceptance conditions, required evidence, and the feedback returned when it is Unmet. Requirement content and acceptance criteria are frozen before execution.

persona

User simulator

Plays the persona (GPT-6 Luna, medium effort). It cannot introduce grading conditions, grant permissions, or advance the session.

→
governs disclosure

Controller

Tracks disclosed requirements, active obligations, authorization, dependencies, and remaining budget; validates every proposed user message.

→
under test

Coding agent

Works in its source's own scaffold (Harbor 0.23.0, Docker environments) and answers the user.

↓
during the session

Online requirement evaluator

At checkpoints, checks active requirements against their frozen contracts: deterministic rubrics for executable conditions, LLM judges for semantic ones.

Satisfied → advanceUnmet → feedbackUnresolved
→
after the session

Completion verifier

Native task correctness, using the source benchmark's own checks.

+
after the session

Personalization verifier

Every mandatory evolved requirement must be accepted.

Joint pass = both verifiers pass, within the declared budget. Errors and unexecuted tasks count as zero.

The session loop, drawn from the paper's description of its Figure 2. The controller governs the disclosure of evolved requirements and uses the online requirement evaluator to check responses; Satisfied requirements let the session advance, Unmet ones return feedback to the coding agent for revision. A Satisfied verdict marks progress on the current obligation, not final acceptance.

How the benchmark is built. Four stages turn source tasks into task–persona pairs. Contrastive screening keeps tasks the reference agent passes natively but fails once the persona is added.

stage 1

Collection

Build the candidate pool from the five source benchmarks.

stage 2

Persona adaptation and fit

Check task–persona compatibility, requirement grounding, that the original objective is preserved, and that disclosed requests agree with acceptance criteria. Unsupported or conflicting requirements are repaired or rejected.

stage 3

Contrastive screening

Target tasks where GPT-6 Luna passes the native task but fails the persona-adapted one.

stage 4

Release

Full set of 231 pairs and a source-proportional Lite set of 100, with no extra model-performance filter.

Five sources, one persona per task

Task–persona pairs by source benchmark, Full and Lite releases.

SourceFullLite
Terminal-bench 35223
DeepSWE6428
SWE-bench-Live4519
SWE-Together94
SWE-bench Pro6126
Total pairs231100
Evolved requirements422186
Distinct persona IDs6635

Requirements per Lite task:

one · 42 taskstwo · 30 tasksthree · 28 tasks

What the requirements ask for

Share of Lite tasks with at least one requirement in each category. A task counts once per category, so shares need not sum to 100%.

Interface and output behavior · 76%
Documentation and handoff · 73%
Resource and permission constraints · 58%
Explanation and evidence · 51%
Testing and validation · 49%
Input and state protection · 46%
Failure handling and recovery · 27%
Reproducible execution · 8%
What we find

Passing the tests is not the same as passing the user.

48%

The best configuration passes fewer than half

GPT-6 Astra at max effort reaches 48% Joint pass on Lite, followed by GPT-6.1 Sol at xhigh (42%) and Claude Opus 5.5 at medium (40%). No evaluated configuration clears half of the task–persona pairs.

19% → 45%

Remove the evolved requirements and the score jumps

In the GPT-6 Luna ablation, dropping persona requirements raises Joint pass by 26 points and completion pass from 24.0% to 45.0%. Giving every requirement at the opening, instead of progressively, moves Joint pass only from 19.0% to 20.0% in a single run.

PersonaCodeBench · 19.0%
w. all requirements at opening · 20.0%
w/o persona requirements · 45.0%
20.5%

Native-test passes that still fail the user

Across 1,962 non-provisional run–task records spanning models and reasoning settings, 179 of 874 complete native-test passes fail the recorded persona criteria.

both pass · 695tests pass, persona fails · 179persona passes, tests fail · 491both fail · 597
17.4% vs 80.8%

Terminal-bench 3 has the lowest ceiling

The highest Terminal-bench 3 score is 17.4% (4 of 23 tasks); the best scores elsewhere are 80.8% on SWE-bench Pro, 57.9% on SWE-bench-Live, and 57.1% on DeepSWE. Strengths are source-specific: Claude Sonnet 5.5 (high) scores 65.4% on SWE-bench Pro and 0.0% on DeepSWE.

3/4 vs 2/20

Who asks changes the outcome

For GPT-6 Luna, founders reach 3/4 Joint passes while students reach 2/20, first-time contributors 3/19, and managers 2/18; designers and shop owners get none. The more persistent personalization failures arise when the agent must preserve execution history, keep a valid final workspace, or turn tests into evidence the user can verify.

77.2%

Checking the checker

Against an adjudicated reference from two software-engineering experts on 148 blinded requirement-level judgments, the online evaluator agrees 71.0% of the time (κ = 0.473) and 77.2% on the accept/reject decision (MCC 0.541). Satisfied verdicts reach 89.2% precision and 74.5% recall.

Leaderboard

Joint pass on PersonaCodeBench Lite.

Pass rate (%) pooled over all 100 Lite tasks, with the rate on each source (task count under the name). Every non-pass outcome, including errors and unexecuted tasks, counts as zero. All settings follows the row order of the paper's Table 2; Best effort per model keeps each model's highest Joint pass (both rows on a tie), sorted by it. Bold marks the best value per column. † only counts the textual part. Kimi-K3 mixes original settings and high-effort repairs. GPT-6 Luna also serves as the user simulator and judge.

Effort effects are mixed: GPT-6.1 Sol rises from 31% at medium to 42% at xhigh, while Claude Opus 5.5 scores 40% at medium and 39% at high. In the paper's common-task analysis, only one of 33 within-model setting comparisons reaches nominal significance (p = 0.049), and none survives a Bonferroni correction.

Citation

Cite PersonaCodeBench

@ARTICLE{2026arXiv261105739W,
       author = {{Wang}, Haixin and {Hou}, Jianheng and {Shen}, Hongyu and {Fan}, Wenzhe and {Huang}, Wei-Chieh and {Zhu}, Qianyu and {Li}, Weichen and {Li}, Taoran and {Yao}, Yuhang and {Wang}, Ruohan and {Peng}, Zhejian and {Jiang}, Wanting and {Chen}, Yifan and {Liang}, Shushu and {Li}, Haoming and {Cao}, Defu and {Hu}, Xu and {Wu}, Siyang and {Yang}, Chen and {Hu}, Haodi and {Zhang}, Haichao and {Wang}, Cong and {Yu}, Zhiyuan and {Zhang}, Weizhi and {Wang}, Yifan and {Huang}, Jintao and {Sun}, Yizhou and {Wang}, Yijun and {Hao}, Yuexing and {Li}, Xiaomin},
        title = "{PersonaCodeBench: Evaluating Coding Agents in Persona-driven Human-Interactive Sessions}",
      journal = {arXiv e-prints},
     keywords = {Artificial Intelligence},
         year = 2026,
        month = nov,
          eid = {arXiv:2611.05739},
        pages = {arXiv:2611.05739},
archivePrefix = {arXiv},
       eprint = {2611.05739},
 primaryClass = {cs.AI}
}

All numbers on this page are from the PersonaCodeBench paper (arXiv:2611.05739).