At present the Windsurf (previously Codeium) plugin in JetBrains IDE is super limited, as it can't access saved rules nor memories like the not-real-great "Cascade" memory system in the main Windsurf IDE.
That Cascade system isn't very good anyway, so running your own simple local memory server instead works much better anyway even in the Windsurf IDE.
That's what this project is. Have it running in the background while you use the Windsurf AI agent, and every now and then tell it to update the memories in the memory server with any new important lessons learned or any other important information.
When you start a new AI agent session, you just tell it to fetch the latest memories from the memory server (using curl):
Using curl, load the memories from the local memory server at 'http://localhost:38080/list-memories-by-tag?tag=memory_server'.
Remember to quote the url, otherwise the shell can be confused by the ? character in that url.
The tag bit is important if you have multiple projects using the same memory server. That way you can keep the memories separate.
ie:
- http://localhost:38080/list-memories-by-tag?tag=memory_server
- http://localhost:38080/list-memories-by-tag?tag=some_other_project
- etc
- Store, update, and archive versioned memories with tags
- Retrieve memories by ID, search term, or tag
- Project-specific filtering using tags (e.g.,
memory_server
) - REST API built with Go (Fuego framework) and SQLite
- VueJS 3 frontend served at the root endpoint
- Comprehensive automated test suite
- Go (1.18+ recommended)
- SQLite3
$ git clone https://github.com/yourusername/windsurf_memory_server_v2
$ cd windsurf_memory_server_v2
# Start the server (default port 38080)
$ go run backend/main.go
The server will create a SQLite database at ~/Databases/memory_server.sqlite
by default.
POST /save-memory
— Save a new memory versionPOST /update-memory
— Archive current and save new versionPOST /delete-memory
— Archive all versions of a memoryGET /list-memories
— List all latest, non-archived memoriesGET /list-memories-by-tag?tag=your_tag
— List memories with a specific tagGET /get-memory-by-id/{memory_id}
— Get latest version by IDGET /search-memories?q=search_term
— Search memories by ID/content
To update a memory, have the agent save it in JSON format to a file and use:
curl -X POST -H "Content-Type: application/json" --data-binary @update.json http://localhost:38080/update-memory
This avoids shell escaping issues.
The test suite covers all major endpoints and behaviours. To run:
go test ./test/...
To support multi-project use, tag project-specific memories (e.g., memory_server
). Use /list-memories-by-tag
to filter accordingly.
MIT.
Note that the code in this repo was written by Windsurf AI's (heh), so who knows what the actual legal status of this code is.