Apothem vs raw Windsurf config
Hand-maintaining Windsurf's rules under .devin/rules/ versus rendering them from apothem's shared profile.
Windsurf is now Devin Desktop and reads rules from a .devin/rules/
directory (the preferred location, which takes precedence over the
.windsurf/rules/ fallback). Apothem's windsurf adapter renders the
directory-based rules from the shared profile. This page contrasts
hand-maintaining that config against managing it with apothem.
Effort comparison
| Task | Raw hand-config | Apothem-managed |
|---|---|---|
| Author rules | Hand-write each file under .windsurf/rules/ | Rendered from the shared corpus |
| Keep one rule format | Hand-pick between .windsurf/rules/ and a single .windsurfrules file | The adapter writes only .devin/rules/ |
| Keep rules aligned with other harnesses | Manual, per tool | Automatic on apothem update |
| Share reusable skills and commands | Hand-copy each skill folder into ~/.agents/skills/ and keep the copies current | Written to ~/.agents/skills/ by the adapter, one copy for every project, and refreshed on apothem update |
| Keep reusable helpers in sync | Hand-write each Devin Local subagent file under .devin/agents/ and track Devin's tool names | Eleven helpers written to .devin/agents/ with their tools translated, and refreshed on apothem update |
| Verify the config is correct | Manual inspection | apothem verify --harness windsurf --project <path> |
What Apothem manages
The windsurf adapter renders the shared rules into one file,
<project>/.devin/rules/apothem-rules.md; it does not write a single-file
.windsurfrules. It also writes eleven of Apothem's helpers as Devin Local
subagents in <project>/.devin/agents/; the three that need web tools wait until
Devin documents their tool names. It registers two Devin Local hooks, a session
bootstrap and a context-size advisory, in <project>/.devin/config.local.json;
the older Cascade mode reads a different hook format (hooks.json), which the
adapter does not write. It registers no tool-call guard, so guardrail intent lives
in the rule prose rather than a tool-call interception point. Every change to the
shared rules re-renders the file on the next apothem update.
Migration path
- Run
apothem profile initto create the shared profile if you have not yet. - Move the rules from your existing
.windsurf/rules/(and any single-file.windsurfrules) into the shared corpus. - Run
apothem install --harness windsurf --project <path>to render the.devin/rules/directory. - Run
apothem verify --harness windsurf --project <path>to confirm the config landed. - Use
apothem update --harness windsurf --project <path>for every later change.