I was inspired by this post. How much work would it be to make this myself?
The answer: it's only a few hours of vibe coding to get to a working prototype. But then come all those details...
Spark is a personal AI assistant. You store information about important (future) events in a local database. Spark sends this information to an AI API and compiles a summary of the events for you.
The following summaries are currently pre-defined:
- today: the summary for today and a quick look at tomorrow
- week: a summary for the current week
- full: a summary of all entries in scope (you can use command line flags to determine the scope)
You can also start a conversation with Spark, to ask it questions about your events.
Spark currently supports Google Gemini and OpenAI ChatGPT. Ollama support is available, but I can't test this with my hardware...
Install the binary:
go install github.com/jovandeginste/spark-personal-assistant/cmd/spark@latestCreate a configuration file. Take a look at the example file.
Create some entry sources:
spark sources add my-calendar --name "My personal calendar"
spark sources add birthdays --name "Birthday reminders"
spark sources add weather-brussels --name "Weather in Brussels"Check your current sources:
spark sources listImport some entries:
# Update your personal calendar from an ICS file
spark ical2entry my-calendar https://example.com/feed/calendar.ics
# Update your birthday reminders from a VCF file
spark vcf2entry birthdays ./contacts.vcf
# Update the weather in Brussels
spark weather2entry weather-brussels BrusselsCheck your current entries:
spark entries listCreate a summary:
spark print -f today
spark print -f week
spark print -f fullYou can customize Spark's behavior by changing the configuration file.
llm:
type: ollama
model: gemma3:1bllm:
type: gemini
model: models/gemini-2.5-flash-preview-04-17
tts_model: gemini-2.5-flash-preview-tts
tts_voice: Charon
api_key: your-keyllm:
type: openai
model: gpt-4o-mini
tts_model: gpt-4o-mini-tts
tts_voice: ash
api_key: your-keyuser_data:
names:
- John Doe (husband)
- Jane Doe (wife)This allows you to describe the members of your family, which will be used as extra context and for the greeting in the summary.
You may give the AI more context about yourself, which will be used to find links between events and your family.
extra_context:
- John works at BigCo
- John likes to play video games
- Jane is a teacher
- Jane likes to read novelsEg. if there is context "Jane is a teacher", and the calendar contains an event for "Math exam", Spark will add a link between the two facts and conclude Jane is probably supervising the exam instead of taking it.
You can customize the behavior of the assistant by creating a custom persona.
A number of alternative persona can be found in the personas folder.
assistant:
file: ./persona/chuck.md
language: GermanAsk for a summary:
spark print --format today --days-ahead 1 --days-back 1Chat with Spark:
$ spark chat
Enter your question. Type /quit to exit or press Ctrl+D.
> Find a free evening for a movie- Add support for Matrix
- Add text-to-speech support, to generate an mp3 file and expose as a (personal) podcast