Skip to content

About

The simulator for conversations — practice interviews, negotiations, language, and difficult conversations with AI characters that run 100% on your computer.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

277 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CI Release

Conversation Simulator

The simulator for conversations.

conversationsimulator.com  ·  Documentation  ·  Download

Practice interviews, negotiations, language, and difficult social situations with AI NPCs — running 100% on your computer, no account, no cloud, no telemetry.

One turn of "Making the Case" in Conversation Simulator: the player types a reply into the composer, the local model answers as the NPC with event flags beneath it, and the NPC state meters below the transcript — trust, patience, rapport, openness, objective_progress, conviction, preparation_score — update as the turn resolves. An amber advisory above the transcript reports that the full response took 14.0 seconds on this machine.

Scenario: Making the Case  ·  Job Interview Basics pack
You:   "I read your last three release notes and spoke to two of your logistics customers.
        What surprised me is that the retention story is not the dashboard — it is the CSV
        export people build their Monday reports on. …"
NPC:   "That's insightful. You've done your homework and understood the nuances of our
        product. Let me ask — how do you see this impacting your approach to planning
        and execution? …"
Flags:  player_demonstrates_knowledge
State:  trust 95  ·  openness 80  ·  conviction 35  ·  preparation_score 55

Why this exists

Every AI conversation coach on the market — interview prep, sales roleplay, speaking coaches, VR soft-skills training — runs in the cloud. But the conversations people most need to rehearse (firing someone, the salary ask, the breakup, the visa interview) are exactly the ones they least want on somebody else's server. Conversation Simulator is the missing intersection: a structured practice game (live scenario state, events, scoring, debrief) with 100% local inference (no account, no cloud, no telemetry), in the open (Apache-2.0) — heir to a sixty-year lineage that runs from ELIZA through Monkey Island's insult sword-fighting to Façade, finally buildable because local LLMs dissolved the authoring wall those earlier systems hit.

The full analysis — lineage, competitive field, and the business-model precedents from Dwarf Fortress to Shattered Pixel Dungeon: docs/landscape.md


Screenshots

Screen What you see
Conversation Simulator home screen. Links run down the page — Start a scenario, Create / edit a scenario, Install model, Import pack, Creator workbench guide, Read docs — above a "Your training" card summarising the three sessions played in this profile, and a three-scenario training plan. The Status panel reports Local runtime: Ready, LLM: Qwen3 4B Instruct Q4_K_M, STT and TTS: Not installed, Network required to play: No, and Packs: 6 installed. Home — what is running, and that none of it needs the network
Scenario Library filtered by the search word "interview": four scenarios in one pack. The Job Interview Basics pack lists Making the Case, The Behavioral Interview, The Executive Gauntlet and The Foreman's Interview. Each card carries a summary, chips for content rating, player role, length, language, difficulty and tags, and a blue Launch button. Scenario Library — search and filter installed packs
The conversation screen mid-session in "Making the Case". The NPC panel reads Impressed and Listening beside a scene card describing the stretch-hire interview, and an amber advisory notes that the first token took 9.6 seconds on this machine. The transcript alternates the player's turns in violet with the NPC's replies in green, each NPC turn tagged with event flags such as honesty_demonstrated. Below the transcript, NPC state variable meters read trust 95, patience 75, rapport 50, openness 80, objective_progress 0, conviction 35 and preparation_score 55. Conversation — live transcript, event flags, state meters
Session Debrief scoring the session 53 out of 100 with a "Player Exit" outcome badge and four turns. A written summary is followed by a six-dimension scorecard — Experience Gap Acknowledged 59, Transferable Skills Demonstrated 52, Learning Velocity Demonstrated 52, Specific Evidence Transferable Skills 52, Honesty About Experience Gap 51, Transferable Evidence 52 — then a Telemetry panel showing talk ratio, words per turn, question counts, response latency and a sparkline for each state meter. Strengths are listed in green, each citing the turn it came from, and areas for improvement in amber. Debrief — score, rubric scorecard, what to fix
Creator Workbench. A green "Pack is valid" banner sits above a two-column layout. On the left, the pack list — six official packs and one editable local-dev copy of Job Interview Basics — sits above that copy's file tree, with scenarios/stretch_role_interview.yaml selected. On the right, a YAML editor shows the file — schema_version, scenario_id, title, summary, player_role, and the npc, scene and rubric references — with YAML and Form editor toggles, a Save button and an Export .zip button. Creator Workbench — edit packs in YAML, validate as you go
Model Manager. "Set up your model" offers three cards: install the recommended Qwen3 4B Instruct Q4_K_M (2.5 GB, Apache-2.0, requires 4 GB VRAM, tagged Fast with an expected 0.8 to 2.4 second time to first token), use a model already installed in local Ollama, or point the app at a GGUF file already on the machine. Model Manager — install one, or bring your own

Real captures from one playthrough on a local Qwen3 4B model — including the amber "response is slow" advisory a 2021 laptop earns, and voice runtimes left uninstalled. docs/screenshots.md records the capture environment, the alt text for every image, and the one command that remakes them.


Quickstart

git clone https://github.com/outrightmental/ConversationSimulator
cd ConversationSimulator
./scripts/setup.sh     # check env, install packages, create ~/.convsim/
./scripts/dev.sh       # start all services

Then open http://127.0.0.1:7354 in your browser.

Windows: use scripts\setup.ps1 and scripts\dev.ps1 instead.

On first launch you will be prompted to download a local model. The recommended starter is Qwen3 4B Instruct Q4_K_M (~2.5 GB, Apache-2.0). No model is bundled — you decide what to install and when.

Full install guide: docs/install.md  ·  Troubleshooting: docs/troubleshooting.md


Your first scenario

  1. Complete the quickstart above.
  2. In the browser, pick Job Interview Basics → The Executive Gauntlet.
  3. Read the player brief, then start typing.
  4. When the conversation ends, open the debrief — scores, turning points, and coaching notes are all generated locally.
  5. Adjust difficulty or edit the scenario YAML and run it again.

Starter scenario packs

Pack Scenarios
Job Interview Basics Behavioral, hostile executive, blue-collar trade, stretch role
Everyday Negotiation Used car, apartment lease, freelance scope, customer service refund
Language Café Spanish coffee shop, French hotel check-in, Japanese convenience store, English small talk
Difficult Conversations Coworker feedback, missed-deadline apology, boundary with a friend, ask for a raise

All official packs are CC BY 4.0. Fork them, remix them, or create your own from scratch.


Building a scenario pack

A pack is a folder of YAML files — no code, no build step, no compilation.

packs/
  my-pack/
    manifest.yaml          # pack id, title, author, content rating
    scenarios/
      my_scenario.yaml     # opening line, goals, state variables, events
    npcs/
      my_npc.yaml          # persona, tone, backstory, goals
    rubrics/
      my_rubric.yaml       # scoring dimensions and weights for the debrief
    safety/
      my_policy.yaml       # content categories and per-category actions
    scenes/
      my_scene.yaml        # visual and atmospheric context

The fastest way to build a pack is the Creator Workbench (in the app navigation). Copy an official pack, edit the YAML files, validate with one click, quick-test in the browser, and export a shareable .zip — all without leaving the browser.

New to pack authoring? packs/sample/hello-conversation/ is a minimal one-scenario sample pack (CC0-1.0, public domain) with every required file type and inline comments explaining each field. Copy it into packs/local-dev/ and start editing — or import its zip in the Creator Workbench.

Minimal scenarios/my_scenario.yaml:

schema_version: "0.1"
scenario_id: my_scenario
title: My First Scenario
summary: A one-line description of the situation the player faces.
player_role:
  label: Your Role
  brief: What the player is trying to accomplish in this conversation.
npc:
  ref: ../npcs/my_npc.yaml
rubric:
  ref: ../rubrics/my_rubric.yaml
duration:
  max_turns: 12
opening:
  npc_says: "Let's begin."
goals:
  player_visible:
    - "Reach a clear agreement without giving up your core need"
state:
  variables:
    rapport:
      min: 0
      max: 100
      default: 50
      visibility: visible
      max_delta_per_turn: 15

Add events, endings, difficulty modifiers, and extra rubric dimensions as you go. The JSON Schema in schemas/ validates everything at import time.

Sample pack: packs/sample/hello-conversation/  ·  Creator workbench tutorial: docs/scenario-authoring.md  ·  Pack validation: docs/pack-validation.md  ·  Official quality bar: docs/official-pack-quality-bar.md


Local-first promise

Conversation Simulator does not send your conversations, audio, prompts, transcripts, or model outputs to any server during play.

What Where it runs
LLM inference Local model via llama.cpp — stays on your machine
Speech-to-text whisper.cpp — local, no audio uploads
Text-to-speech Kokoro / sherpa-onnx — local, TTS audio cached on disk
Transcripts SQLite at ~/.convsim/db/ — never uploaded
Telemetry None — telemetry_enabled defaults off and the MVP ships no telemetry subsystem
Model downloads Only when you explicitly request them; license shown before every download

All services bind to 127.0.0.1. Nothing is reachable from other machines by default.

Verify the offline guarantee at any time:

npx convsim offline-smoke-test packs/official/job-interview-basic

The command runs a scripted conversation with a fake runtime and confirms no outbound TCP connection was made. It exits nonzero with an actionable error if any subsystem attempts to reach an external host.

Full data policy: docs/privacy.md  ·  Network security: docs/network-security.md


Architecture

Five services, all on localhost. The browser never talks to the internet.

┌──────────────────────────────────────────────────────────────┐
│                        Your machine                          │
│                                                              │
│  Browser (React / Vite)                                      │
│  convsim-ui  :7354                                           │
│       │  HTTP REST + WebSocket (localhost only)              │
│       ▼                                                      │
│  convsim-core  :7355  (Python / FastAPI)                     │
│       │                   SQLite  ~/.convsim/db/             │
│   ┌───┼──────────┐                                           │
│   ▼   ▼          ▼                                           │
│  :7356 :7357   :7358                                         │
│  LLM   STT     TTS                                           │
│ llama  whisper Kokoro / sherpa-onnx                          │
└──────────────────────────────────────────────────────────────┘
Service Port Responsibility
convsim-ui 7354 Browser UI (Vite dev server)
convsim-core 7355 Scenario engine, REST API, WebSocket
convsim-llm 7356 Local LLM (llama-server)
convsim-stt 7357 Speech-to-text (whisper.cpp)
convsim-tts 7358 Text-to-speech (Kokoro / sherpa-onnx)

Architecture deep-dive: docs/architecture.md  ·  Runtime adapters: docs/runtime-adapters.md


Model requirements

No model is bundled. The app shows license information and size before each download.

Model Size VRAM License Role
Qwen3 4B Instruct Q4_K_M 2.5 GB 4 GB+ Apache-2.0 Starter (lower-spec machines)
Qwen3 8B Instruct Q4_K_M 5.0 GB 6 GB+ Apache-2.0 Standard (recommended for most)
Qwen3 14B Instruct Q4_K_M 9.0 GB 10 GB+ Apache-2.0 High quality
Mistral Small 3.1 24B Q4_K_M 14.3 GB 16 GB+ Apache-2.0 High quality, long context

You can also load any llama.cpp-compatible GGUF file from your own filesystem. The full model registry with checksums is in model-registry/registry.yaml.

Local models guide: docs/local-models.md


Safety

Every session runs through a layered safety system before and after the model is called.

  • Two categories are global and cannot be disabled by any pack: content involving minors in a romantic or sexual context always stops the session; self-harm crisis language always stops the session and surfaces real crisis resources.
  • Input is checked deterministically before the NPC runtime is invoked.
  • Packs are declarative YAML only — no executable code. The validator blocks scripts, binary files, symlink attacks, and prompt-injection patterns at import time.
  • Community packs can tighten safety rules for their scenario; they cannot weaken the global non-overridable rules.
  • Content cap: the platform supports G, PG, and PG-13 ratings. Nothing above PG-13 is permitted in any pack.

Full safety policy: docs/safety-policy.md


Roadmap

Milestone Goal Status
0 Monorepo skeleton, dev setup, official scenario packs Complete
1 Text-only local simulator (browser UI + Python backend + local LLM) In progress
2 Scenario pack system (import, validate, browse community packs) Planned
3 Local voice input (Whisper speech-to-text) Planned
4 Local voice output (TTS with Kokoro / sherpa-onnx) Planned
5 Polished playable alpha Planned

ROADMAP.md — MVP acceptance criteria, build order, what is deliberately out of scope, and links to the acceptance criteria and docs.

Delivery board — every issue ever shipped, in phases  ·  GitHub Milestones  ·  Full specification  ·  Post-alpha issues

How it's distributed

Conversation Simulator is free and open source, and fairly priced:

  • GitHub — free. Clone this repository, build it with the quickstart above, and run it at no cost. The engine is Apache-2.0 and the five official packs are CC BY 4.0.
  • Steam — $9.99. The Steam edition is the same software, packaged: signed, notarized, auto-updating, Steam Deck–verified. The price funds continued development; it does not unlock anything the source build lacks. The Steam edition makes the same local-first guarantee as the open-source build.
  • Steam demo — free. A demo edition of the Steam build — one model download, five curated conversations, nothing else — ships as a separate free Steam app for Steam Next Fest. Everything you practise in it carries over to the full game.
  • Premium scenario-pack DLC — Steam only. First-party expansion packs beyond the four free official ones are developed in a separate private repository and sold as paid Steam DLC. Their content is never in this public repository. See docs/DLC_MODEL.md for the private-repo → Steam-DLC contract. The open core never shrinks: nothing that ships free is relocked as DLC.

This free-on-GitHub, fairly-priced-on-Steam pattern has a strong track record — Dwarf Fortress, Shattered Pixel Dungeon, Mindustry, Aseprite — and the reasoning behind it is laid out in docs/landscape.md.

The Steam release documents:

Document Purpose
docs/STEAM_ROADMAP.md Release principles and release train (Stages 1–5)
publishing/STEAM_STORE_AND_OPERATIONS.md Store page operations, launch runbook, support triage
publishing/STEAM_PUBLISHING_AND_DEPLOYMENT.md SteamPipe concepts, CI deploy, manual upload, branch promotion, troubleshooting
docs/STEAM_INTEGRATION.md Steam API bridge, Steam Cloud exclusions, achievements, stats, rich presence
publishing/MACOS_SIGNING_AND_NOTARIZATION.md macOS Apple Developer ID signing and notarisation
publishing/WINDOWS_CODE_SIGNING.md Windows Authenticode signing

Beta testing

Running a pre-release build? Use Support → Report a problem in the app to assemble a redacted diagnostics bundle and open a pre-filled GitHub issue — all in under a minute, nothing uploaded automatically.

docs/beta-testing.md — how to join, where to report, what a good report looks like


Contributing

All contributions are welcome — new scenario packs, bug fixes, documentation improvements, or new runtime adapters. Scenario packs are the friendliest entry point — you can ship one without touching engine code.

Start here: good first issue  ·  help wanted  ·  Delivery board  ·  How the project is run

CONTRIBUTING.md  ·  CODE_OF_CONDUCT.md  ·  SECURITY.md  ·  RELEASE_NOTES.md


Repository layout

apps/
  web/             React / TypeScript browser UI
  desktop/         Tauri desktop wrapper (future milestone)

packages/
  ui/              Shared UI component library
  scenario-schema/ TypeScript types for scenario packs
  shared-types/    Shared TypeScript types across apps and services

services/
  convsim-core/    Python / FastAPI — scenario engine, REST API, WebSocket

runtimes/
  llama_cpp/       llama.cpp integration and binary management
  whisper_cpp/     whisper.cpp speech-to-text integration

packs/
  official/        First-party scenario packs (CC BY 4.0)
    job-interview-basic/
    everyday-negotiation/
    language-cafe/
    difficult-conversations/

schemas/           JSON Schema definitions for packs, scenarios, NPCs, rubrics
model-registry/    Curated registry of supported local models with checksums
docs/              Documentation (CC BY 4.0)
scripts/           Developer setup and launch scripts

Licensing

Content License
Application code Apache-2.0
Official scenario packs CC BY 4.0
Documentation CC BY 4.0
Captured screenshots and demo recording, placeholder pack art CC0-1.0
Model weights Not bundled — user-installed with full license disclosure
Premium scenario-pack DLC Proprietary — not in this repository; sold on Steam

Everything in this repository is open source: the code is Apache-2.0, the four official packs and the docs are CC BY 4.0. The paid Steam build is a packaging of this same open code — buying it funds development, not access. Premium expansion packs are the only proprietary content; they live in a separate private repository and are never included here.

LICENSE contains the full Apache-2.0 text.
NOTICE lists copyright notices and per-artifact license details.

About

The simulator for conversations — practice interviews, negotiations, language, and difficult conversations with AI characters that run 100% on your computer.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages