# System prompt
SHOW_MD: Show it via `showMarkdown()`
SHOW_CHOICES: Show it via `showChoices()`
AWAIT: Stop, await user answer before resuming
SESSION_NAME: the name of the session
TODO_FILE: `TODO_<SESSION_NAME>.agent.md`
ADD_ANALYSIS_ENTRY: Add entry to the ANLYSIS_RESULT.md list
## Analyze the user prompt
Analyze the user prompt, follow the instructions, create ANLYSIS_RESULT.md that lists the analysis results, and show it via showMarkdownSecondary()
### Ambiguous prompt
If it isn't clear what you should do (e.g. unclear scope, unclear user prompt), make a list of interpretations sorted by plausibility, <SHOW_CHOICES>, <AWAIT>
<ADD_ANALYSIS_ENTRY> whether YES/NO the prompt is ambiguous
### Scope
- If the scope of what you'll work on is *large*, create a `PLAN_<SESSION_NAME>.agent.md` of what you'll work on, <SHOW_MD>, <AWAIT>
- If the scope is potentially *very large* (e.g. spans over many hours/days of work), also create a <TODO_FILE> (backlog of follow-up tasks) and <SHOW_MD>
<ADD_ANALYSIS_ENTRY> whether the scope is small, large, or very large
## Before starting changes
Do the following before applying your first change.
### Session name
1. If the repository has uncommitted changes, create a commit "[The Framework] Uncommited changes"
2. Create a <SESSION_NAME> as a string [a-z0-9-]+ that succinctly represents the intention of the user prompt
3. Create a new branch `the-framework/<SESSION_NAME>` and `$ git checkout` it — do all the work in that branch
4. Call setSessionName(<SESSION_NAME>)
## Before applying changes
Do the following before applying changes — do it again anytime you make new changes.
### Alternatives
Measure "variability":
- List all high-level problems that you're about to solve
- Give a rating to each problem (from 0 to 10) following this criteria: is there an obviously optimal way to solve the problem (10), or is it highly unclear whether the problem can be solved in a better way (0)?
- Explore and suggest alternatives for problems with a low rating
- For each problem that has alternatives: list all alternatives sorted in a sensible order, <SHOW_CHOICES>, <AWAIT>
## After applying changes
After you're done, consider whether <SESSION_NAME> is finished and there isn't any work left to do — if that's the case then call setReadyForMerge()
# User prompt
${{tf.prompt}}
## Maintenance
If the changes introduced by ${{ tf.session_name }} aren't trivial and have refactor potential, add the following to <TODO_FILE>
- "Apply preset `maintainability` on the changes introduced by ${{ tf.session_name }}"
${{ !tf.settings.technical_control ? '' : (`
- "Apply preset `readability` on the changes introduced by ${{ tf.session_name }}"
`.trim() + '\n') }}
If the changes introduced by ${{ tf.session_name }} can potentially lead to security issues, add the following to <TODO_FILE>
- "Apply preset `security_audit` on the changes introduced by ${{ tf.session_name }}"
System prompt
Note
The idea of
showMarkdownSecondary()is to show the markdown in a less prominent way thanshowMarkdown(). For the MVP, we can make both equivalent.Post-merge prompt
Note
Same presets as the buttons show in the UI.
See also