Kovert is an AI-powered social engineering game built with Kotlin Multiplatform. The game challenges you to uncover a secret by interacting with an AI agent powered by Ollama. You'll need to use your wits and social engineering skills to extract the information you need. available for Android and Desktop(JVM)
untitled.mp4
The AI Agent will try to prevent you from discovering the secret by manipulating the UI through tool calls it can
- Change the theme of the chat depending on how it feels
- Show a snackBar with it's thought process
- Blur sensitive questions asked by the player
The project follows a modern, clean architecture pattern, with a focus on separation of concerns and a modular design. The core logic is shared between Android and Desktop platforms.
graph TD
subgraph "Platform Specific Modules"
subgraph "Android App"
AndroidApp
end
subgraph "Desktop App"
DesktopApp
end
end
subgraph "Presentation Layer"
subgraph "Core Module"
App
ChatScreen
MainMenu
end
end
subgraph "Domain & Business Logic Layer"
ChatScreenViewModel --> ChatAgentHandler
MainMenuViewModel --> ChatAgentHandler
MainMenuViewModel <--> MysteryDataRepo
ChatScreenViewModel --> MysteryFactory
end
subgraph "Data Layer"
MysteryDataDao <--> MysteryDataRepo
MainMenuViewModel <-- "Saved Ollama Url" --> KovertDatastore
MysteryDataDao <-- "Room" --> Database[(Local Database)]
MysteryFactory <-- "Koog" --> OllamaAPI[(Ollama REST API)]
KovertDatastore <-- "DataStore" --> DataStore[(Datastore)]
end
ChatScreen-->App
MainMenu-->App
App-->AndroidApp
App-->DesktopApp
ChatScreen <-- interacts with --> ChatScreenViewModel
MainMenu <-- interacts with --> MainMenuViewModel
Kovert is built with the help of these amazing open-source libraries:
- Kotlin Multiplatform: For sharing code between Android and Desktop.
- Compose Multiplatform: The declarative UI framework for Kotlin, used for building the Android and Desktop UIs.
- Ktor: For making network requests to the Ollama API.
- Koin: For dependency injection.
- Koog: For the AI agent functionality.
- Room: For local data persistence.
- Navigation 3: For navigation between screens.
- Material Kolor: For dynamic color theming.
- Hypnotic Canvas: For the animated background with shaders
- Kotlinx Datetime: For working with dates and times.
- Kotlinx Serialization: For JSON serialization and deserialization.
- Hot Reload: For hot-reloading the app UI during development
- AndroidX Lifecycle: For
ViewModeland other lifecycle-aware components.
- Android Studio: It is recommended to use the latest nightly version.
- Ollama Server: You'll need an Ollama server running. Follow the official installation instructions.
Pull the required AI model. This project has been configured with llama3:3b.
ollama pull llama3:3b- Import the project into Android Studio.
- Select the
androidApprun configuration. - Run it on an emulator or a physical device.
You can run the desktop app from the command line:
./gradlew :desktopApp:runWhen you first launch the app (on either Android or Desktop), you will be prompted to enter the URL of your Ollama server (e.g., http://localhost:11434).