TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Experimental open-source contact reconciliation with provenance, replayable models, and human-gated cleanup plans.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Kill contact chaos. Keep every relationship.
ContactKiller is an experimental, open-source contact-reconciliation project for people whose address books have become accidental CRMs. The public tree combines a working SurrealDB-backed prototype, read-only local research tools, and an experimental ActiveGraph domain pack. Its target architecture preserves source evidence, proposes conservative identity matches, and keeps risky provider changes behind explicit human approval; the current web importer does not yet deliver those guarantees end to end.README 전문 보기 ↗Kill contact chaos. Keep every relationship.
ContactKiller is an experimental, open-source contact-reconciliation project for people whose address books have become accidental CRMs. The public tree combines a working SurrealDB-backed prototype, read-only local research tools, and an experimental ActiveGraph domain pack. Its target architecture preserves source evidence, proposes conservative identity matches, and keeps risky provider changes behind explicit human approval; the current web importer does not yet deliver those guarantees end to end.
Explore the open-source launch site
[!WARNING] ContactKiller is not a production-safe bulk deletion tool. Use synthetic data while developing. Never point an unreviewed build at a real address book or CRM.
One person can appear as five unrelated records:
Conventional sync chooses a winner and overwrites the rest. ContactKiller's target workflow treats the address book as a distributed system: capture every observation, keep account boundaries visible, explain how an identity proposal was assembled, and preview cleanup before touching a provider.
| Principle | Current public evidence and limitation |
|---|---|
| Evidence before mutation | The DuckDB forensic tool records manifests and observations, and the ActiveGraph pack models source evidence. The web prototype still writes mutable contacts directly and does not retain every raw provider observation. |
| Conservative identity | ActiveGraph proposes exact normalized email or E.164 matches. A complete identity engine is not connected to the web prototype. |
| Replayable decisions | The ActiveGraph pack includes event lifecycle and replay tests. The SurrealDB-backed prototype is not yet a projection of that history. |
| Approval at the boundary | Approval and mutation-plan objects are modeled. No production provider-write executor ships. |
| Account isolation | The prototype records provider links and ContactKiller tenant ownership, but cannot distinguish two accounts from the same provider for one user. Multi-account provenance and full tenant-isolation proof remain acceptance gates. |
The repository is intentionally candid about maturity:
| Area | Status | Notes |
|---|---|---|
| Contact explorer and CRUD API | Implemented prototype | SurrealDB-backed interface and routes; not production-proven. |
| Google Contacts | Experimental | Read-only OAuth scope and one-way import with exact-identifier matching; access tokens refresh from the stored refresh token (not yet verified against live Google); write-back is not implemented. |
| iCloud | Experimental | Manual vCard import under the same exact-match rules as Google (UID, email, valid phone); no CardDAV sync. |
| Mesh | Research connector | Bounded, read-only snapshot path into owner-only local storage. |
| ActiveGraph | Experimental foundation | Typed reconciliation objects, approval routing, replay, and runtime tests. Not the live production authority. |
| SurrealDB | Implemented prototype persistence | The web prototype stores users, contacts, conflicts, sync logs, and encrypted OAuth tokens in SurrealDB with owner-scoped permissions. The provenance, observation, and replay model remains a documented target. |
| FalkorDB | Community extension | No ContactKiller adapter ships today; disposable projection and benchmark contributions are welcome. |
| Provider mutations | Planned | The data model exists; no production-safe executor is available. |
See Capabilities and Integrations for the detailed matrix.
Apple / Google / CRM / Mesh / messaging evidence
│
▼
immutable source observations + manifests
│
▼
normalization with field-level provenance
│
▼
identity proposals and confidence rules
│
┌─────────┴─────────┐
▼ ▼
canonical projection review queue
│
▼
approval-gated change plan
│
▼
bounded provider mutation
The public tree does not implement this flow end to end. Today, Google and iCloud imports fill empty fields on an exactly matched contact and file conflicts for differences, rather than retaining a separate source observation. The diagram is an architecture contract and acceptance target, not a production-readiness claim.
The target architecture separates three responsibilities:
Read Architecture, ActiveGraph, SurrealDB, and the FalkorDB projection RFC.
activegraph-contactkiller/ ActiveGraph domain pack and tests
docs/ Public architecture, safety, and contributor guides
examples/synthetic/ Synthetic contact fixtures and failure cases
scripts/ Read-only snapshots and disposable forensic tooling
web/ Next.js reconciliation prototype
website/ Public open-source launch site
cd web
cp .env.local.example .env.local # placeholders only; set your own encryption key
cp compose.env.example compose.env # then set a local SurrealDB root password
bun install
docker compose --env-file compose.env up -d --wait # SurrealDB on 127.0.0.1:8000
# For the first account only: set CONTACTKILLER_ALLOW_SIGNUP=true in .env.local
bun run db:migrate # apply migrations, sync the sign-up switch
bun run dev
Open http://localhost:3000/login, create a local account, and import a synthetic vCard from Settings. .env.local needs CONTACTKILLER_TOKEN_ENCRYPTION_KEY; generate one with openssl rand -base64 32. To exercise Google import, create a development OAuth web client and register http://localhost:3000/api/auth/google/callback (or the matching NEXT_PUBLIC_APP_URL) as its redirect URI.
Sign-up is off by default and is enforced inside SurrealDB, not only in the app: the database's sign-up clause refuses to run unless setting:signup is on, and bun run db:migrate sets it from CONTACTKILLER_ALLOW_SIGNUP. To create the first user, set the variable to true, run bun run db:migrate, restart the dev server, sign up on /login, then set it back to false and run bun run db:migrate again. Accounts, sessions, and row-level ownership are likewise enforced by SurrealDB itself; the web app never holds database root credentials. Use synthetic fixtures and a development database; do not reuse production credentials or personal contact exports, and never expose the SurrealDB port beyond loopback. See Development for tests and troubleshooting.
cd activegraph-contactkiller
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[test]'
pytest
# Plan a bounded Mesh read without contacting the service.
bun scripts/mesh-mcp-snapshot.ts --name "Maya Chen"
# Initialize the ignored, disposable DuckDB forensic cache.
bun scripts/forensic-cache.ts init
bun scripts/forensic-cache.ts summary
Mesh execution requires your own authenticated connector. Raw snapshots are written under ignored .local/ storage with owner-only permissions. They must never be committed or attached to an issue.
Read Privacy and data safety before opening an issue or pull request.
Useful first contributions include:
Start with CONTRIBUTING.md, the development guide, and the testing guide. Community decisions follow GOVERNANCE.md.
Do not report vulnerabilities through a public issue. Follow SECURITY.md. Never include real contact exports, OAuth tokens, account identifiers, phone numbers, or customer data in a report.
Copyright 2026 ContactKiller contributors.
Licensed under the Apache License 2.0. See NOTICE and third-party notices for attribution and dependency-license boundaries.