Select the apps you use. See who they share your data with — rendered as a live graph. Get exact opt-out steps powered by AI.
- Pick services (Google, Meta, TikTok, LinkedIn, ChatGPT, Gemini)
- A Neo4j graph renders showing which companies receive your data and how
- An AI agent (Kimchi → kimi-k2.5) generates step-by-step opt-out instructions for each service using a Tessl Privacy Skill as its system prompt
The demo moment: LinkedIn and ChatGPT both route through Microsoft — a multi-hop connection most users don't know about.
- Python 3.10+
- Neo4j Aura free account (one instance)
- Kimchi free account (API key)
git clone <repo-url>
cd tessl
python -m venv venv
# Windows
venv\Scripts\pip install -r requirements.txt
# Mac/Linux
venv/bin/pip install -r requirements.txtCopy .env.example to .env and fill in your credentials:
NEO4J_URI=neo4j+s://<instance-id>.databases.neo4j.io
NEO4J_USERNAME=<instance-id>
NEO4J_PASSWORD=<password>
NEO4J_DATABASE=<instance-id>
KIMCHI_API_KEY=<castai-api-key>
Seed the graph first (one-time):
# Windows
venv\Scripts\python seed.py
# Mac/Linux
venv/bin/python seed.pyStart the app:
# Windows
venv\Scripts\python app.py
# Mac/Linux
venv/bin/python app.pyOpen http://localhost:5000.
All graph data lives in Neo4j Aura. The seed script loads 13 nodes (6 services, 4 corporate entities, 3 data categories) and 12 relationships via Cypher MERGE statements. On each page load, a Cypher query filters the graph by selected services and returns nodes and edges as JSON for vis.js to render. The connection URI is logged to the console on startup.
Three Neo4j Tessl Skills were used during development to write correct Cypher and driver code:
| Skill | Used for |
|---|---|
neo4j-cypher-skill |
Writing seed.py MERGE statements and the /api/graph Cypher query |
neo4j-driver-python-skill |
Flask + neo4j driver integration: execute_query, result mapping, database parameter |
neo4j-getting-started-skill |
Aura free instance setup, neo4j+s:// connection string format |
Install via: /plugin marketplace add https://github.com/neo4j-contrib/neo4j-skills.git
The /api/action-items endpoint routes through Kimchi using the OpenAI-compatible SDK (base_url=https://llm.kimchi.dev/openai/v1, model kimi-k2.5). The model name is displayed in the action items panel footer so judges can see it doing work in the demo.
skills/privacy/SKILL.md is a Tessl Privacy Skill containing verified opt-out navigation paths for all 6 services. Flask reads this file at startup and injects it as the system prompt for every Kimchi call — making it a runtime Tessl integration, not just a dev tool. The action items panel shows a "Powered by Tessl" badge once the skill response loads.