Skip to content

feat(framework): remove the persona / skill / memory framing (#547)#550

Merged
suleimansh merged 2 commits into
mainfrom
feat/remove-persona-skill-memory-547
Jul 15, 2026
Merged

feat(framework): remove the persona / skill / memory framing (#547)#550
suleimansh merged 2 commits into
mainfrom
feat/remove-persona-skill-memory-547

Conversation

@suleimansh

Copy link
Copy Markdown
Member

Closes #547. Follows #548 + #549 (#545), both merged.

A run's system prompt is now the built-in #326 prompt plus your own SYSTEM.md. Nothing else. Nothing is read off disk and appended when the run starts.

The number

A build used to append the personas and skills for its detected stack plus the full contents of the repo's memory files. Measured on a real --fake build:

before after
build run system prompt 8,852 chars 3,874 chars

3,874 is exactly what a prompt-kind run already composed. The two paths now produce byte-identical system channels, which is the proof the framing is actually gone rather than merely disconnected.

None of the removed text was designed. It accumulated, and it was bigger than the prompt it was wrapping.

Two things fall out of this

1. The prompt preview is now exact. This closes a gap I left in #520. The "See actual prompt sent" disclosure had to carry a caveat that a build appends more at run time and that a pre-run preview therefore could not be exact. That is no longer true, so the caveat is deleted. What you read before the run is what the agent gets, for every run kind.

2. A build finally stops being opinionated about the stack. #549 removed the architect turn, but personas/library.ts still hard-instructed "Default to Prisma" and the Vike personas were stack-opinionated. #549 and this PR together are what deliver that. Neither did it alone.

The call I made that you may want to reverse

The extension SPI (#190) goes with them. FrameworkExtension is {name, capability, personas, skills, signals} - strip personas and skills and it carries literally nothing, so it cannot survive as a half-thing. #190 is closed, so this is not cutting across live work, but it is a deletion beyond "remove the prompt text" and it is yours to veto. If you want the registry kept as a seam for the first-class skills feature later, say so and I will restore it without the prompt text.

Deleted with it: discoverExtensions, --compose-extensions, and the two example packages that existed only to prove the SPI (framework-discovery-demo, framework-hello).

What survives

  • Preset detection. readProjectSignals moved to project.ts; a run still narrates Detected Vike (confidence 2). Detection now only narrates - none of it reaches the prompt, and a test pins that.
  • Domain presets. They lose skills and keep their loops, prompts, modes, and review policy, which is the substance.
  • @gemstack/ai-skills is untouched. Different thing (an on-disk SKILL.md loader for ai-sdk agents), and load-bearing: its parseSkillManifest parses every prompt body and preset markdown in ai-autopilot. Confirmed zero diff.

Locked down

Two tests pin the property, because a description is not a guarantee:

  • unit: composeRunSystem() exactly equals [#326 block, AWAIT_PROTOCOL, SIGNAL_PROTOCOL].join('\n\n'), plus one proving no supported option can append a trailing section.
  • integration: captures what the driver is really started with in a full runFramework run and asserts exact equality. That is the one that would catch run.ts reintroducing framing; the unit test alone cannot.

Verify

  • framework 524 tests (523 pass / 0 fail / 1 skipped, a pre-existing Docker-unreachable case); ai-autopilot 280 pass; bootstrap-quickstart 2 pass; autopilot-quickstart 2 pass
  • workspace typecheck 21/21 and build clean
  • framework --fake --no-dashboard: system prompt sent (3874 chars), Detected Vike (confidence 2), runs through to production-grade, exit 0

A run's system channel is now the built-in #326 prompt plus the user's own
SYSTEM.md, and nothing else. Nothing is read off disk and appended when the
run starts, so the prompt is knowable before it runs.

A measured build prompt drops 8,852 -> 3,874 chars, the same text a
prompt-kind run already composed. The two paths now produce byte-identical
system channels.

The extension SPI goes with them: FrameworkExtension carried only personas
and skills, so nothing was left in it. readProjectSignals moves to
project.ts; preset detection still narrates what it found.
@suleimansh suleimansh self-assigned this Jul 15, 2026
@suleimansh suleimansh added the enhancement New feature or request label Jul 15, 2026
@suleimansh suleimansh merged commit 5e24797 into main Jul 15, 2026
2 checks passed
@suleimansh suleimansh deleted the feat/remove-persona-skill-memory-547 branch July 15, 2026 16:55
@suleimansh

Copy link
Copy Markdown
Member Author

Correcting an overstatement in the description now that this is merged, so the record is right.

I framed the result as "a build prompt is the #326 block". Measured, it is 47% of it:

block chars who wrote it
#326 1,832 you
AWAIT_PROTOCOL 1,415 me
SIGNAL_PROTOCOL 623 me
total 3,874 53% mine

Everything this PR claims is still true: 8,852 -> 3,874, personas / skills / memory gone, build and prompt runs byte-identical, the preview exact. What is not true is that what remains is all yours. The emit protocols are the majority of it, and they are mine.

Picked up on #326 with the full text and the ask: #326 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[The Framework] Remove the persona / skill / memory framing

1 participant