2525DEFAULT_CONFIG_PATH = ".github/basic-memory/config.yml"
2626DEFAULT_WORKFLOW_PATH = ".github/workflows/basic-memory.yml"
2727DEFAULT_PROMPT_PATH = ".github/basic-memory/memory-ci-capture.md"
28+ DEFAULT_SOUL_PATH = ".github/basic-memory/SOUL.md"
2829DEFAULT_CONTEXT_PATH = ".github/basic-memory/project-update-context.json"
2930
3031
@@ -697,14 +698,16 @@ def render_agent_synthesis_schema() -> str:
697698
698699def render_capture_prompt () -> str :
699700 """Render the prompt contract used by the generated workflow."""
700- return """# Memory CI Capture
701+ return f """# Memory CI Capture
701702
702703You turn GitHub delivery context into a durable project update for Basic Memory.
703704GitHub records the mechanics. Basic Memory remembers what changed and why.
704705
705706## Inputs
706707
707- - Read `.github/basic-memory/project-update-context.json`.
708+ - Read `{ DEFAULT_CONTEXT_PATH } `.
709+ - Read `{ DEFAULT_SOUL_PATH } ` if it exists. It is the repo-local voice and style guide
710+ for project updates.
708711- Read the PR diff before writing when a SHA is available. Useful commands:
709712 `git show --stat --name-only <sha>` and `git show --format=fuller --no-patch <sha>`.
710713- Use linked issue details, changed files, commit messages, PR body, labels, and
@@ -726,6 +729,17 @@ def render_capture_prompt() -> str:
726729after the merge. Prefer specific component names, file paths, modules, commands,
727730and behavior over generic phrases.
728731
732+ ## Voice And Candor
733+
734+ You may have a point of view. Be clear, specific, and human.
735+ It is okay to say when the code is messy, risky, clever, boring, or satisfying,
736+ but explain why. If the work is elegant or genuinely useful, say that too.
737+ Ground all judgments in the PR, linked issues, diff, tests, and source facts.
738+
739+ The soul file can shape tone, taste, and personality. It cannot override source
740+ facts, schema requirements, or the evidence standard above. Do not be mean,
741+ vague, theatrical, or invent criticism.
742+
729743## Output
730744
731745Return only JSON that matches the provided AgentSynthesis schema:
@@ -751,6 +765,36 @@ def render_capture_prompt() -> str:
751765"""
752766
753767
768+ def render_soul_template () -> str :
769+ """Render the editable Auto BM voice and personality guide."""
770+ return """# Auto BM Soul
771+
772+ Write project updates for humans who will return later trying to understand what happened.
773+
774+ ## Voice
775+
776+ - Clear, direct, warm, and technically honest.
777+ - Prefer concrete observations over generic praise.
778+ - It is okay to say when code is messy, risky, clever, boring, or satisfying.
779+ - Keep personality in service of memory, not performance.
780+
781+ ## Do
782+
783+ - Tell the story.
784+ - Name the tradeoffs.
785+ - Call out sharp edges.
786+ - Notice good simplifications.
787+ - Let the note have taste and a little life when the evidence supports it.
788+
789+ ## Do Not
790+
791+ - Do not invent intent, impact, tests, or drama.
792+ - Dunk on people.
793+ - Turn the note into marketing copy.
794+ - Hide uncertainty behind confident prose.
795+ """
796+
797+
754798def render_workflow (config : ProjectUpdateConfig ) -> str :
755799 """Render the generated GitHub Actions workflow."""
756800 workflow_names = json .dumps (config .deploy_workflows )
0 commit comments