아카이브 / 개발
workspace-data-collectors — 로컬퍼스트 워크스페이스 수집·증거 도구
목차 — 프로젝트 요약 · 담당 범위 · 문제와 구현 접근 · 이 작업에서 한 일 · 결과물과 원문 · 구현 상세
프로젝트 요약
Slack·Notion·GitLab·Google Calendar를 로컬 SQLite/FTS 인덱스로 수집해 증거 기반 분석을 제공하는 도구. 집계 전용을 기본값으로 못박았다.
담당 범위
기획·설계·개발을 맡은 개인 프로젝트다. 공개 저장소에서 코드와 사용 방법을 확인할 수 있다.
문제와 구현 접근
Slack 채널·Canvas·파일 메타데이터, Notion 페이지, GitLab 활동, Google Calendar를 증분 수집해 로컬 SQLite/FTS 인덱스와 읽기 전용 API로 제공한다. 자격증명과 수집 콘텐츠는 Git·릴리스 산출물에서 의도적으로 배제한다.
README에 '직원 감시나 개인 랭킹 시스템이 아니다'를 명시했다. 리포트는 기본적으로 집계만 보여 주며, 개인 단위 자료는 별도 설정 없이는 만들지 않는다. 실제 쓰기는 사용자가 켜야만 동작하도록 했다.
데이터 접근 권한과 보안·품질 원칙을 설명에만 두지 않고 코드의 기본 안전장치로 넣었다.
이 작업에서 한 일
아이디어를 실제로 작동하는 코드로 만들고, 다른 사람이 설치하고 사용할 수 있도록 설명서를 함께 작성했다.
결과물과 원문
관련 등록공보·논문·저장소는 아래 링크에서 볼 수 있다.
구현 상세
README공개 저장소의 구조·기능·실행 문서
Workspace Data Collectors
Local-first collectors and evidence tooling for Slack, Notion, GitLab, and Google Calendar workspaces.
The project stores source data on infrastructure controlled by the operator, builds a local SQLite/FTS evidence index, and provides read-only analysis and API surfaces. Credentials and collected content are deliberately excluded from Git and release artifacts.
What is included
- Incremental Slack channel, Canvas, and file metadata collection
- Accessible Notion page archiving
- GitLab activity metadata collection
- Optional Google Calendar metadata collection
- Local SQLite/FTS indexing and a read-only data API
- A pipeline runner with dry-run defaults and explicit write gates
- macOS bootstrap, diagnostics, and LaunchAgent templates
This project is not an employee surveillance or individual ranking system. Reports are aggregate-only by default; optional person-level derived rows require an explicit flag and additional governance. Public examples use synthetic organizations and identities. Operators are responsible for access control, retention, consent, and applicable law.
Quick start
Prerequisites: macOS or Linux, Python 3.13, and uv.
git clone https://github.com/seokmogu/workspace-data-collectors.git
cd workspace-data-collectors
uv sync --all-packages --locked
bash scripts/wdc_doctor.sh --profile minimal --json
uv run --package wdc-pipeline wdc-pipeline run daily --dry-run
Copy .env.example to an ignored local file and populate only the integrations you intend to use. Do not paste tokens into issues, pull requests, or agent conversations.
Packages
| Package | Purpose |
|---|---|
wdc-core | Shared status, redaction, retry, and atomic-write utilities |
workspace-slack-client | Minimal Slack Web API client used by the collector |
slack-archive | Incremental Slack archive |
notion-archive | Accessible Notion page archive |
gitlab-archive | GitLab activity metadata archive |
calendar-archive | Optional Calendar metadata archive |
wdc-indexer | Local SQLite/FTS evidence index and MCP read surface |
wdc-data-api | Read-only data access layer |
wdc-pipeline | Collection and indexing orchestration |
workspace-effectiveness-core | Shared contracts for aggregate effectiveness reports |
workspace-eem | Engineering effectiveness report module |
workspace-pem | Product effectiveness report module |
workspace-dem | Design effectiveness report module |
Safe defaults
- Collectors operate only with credentials supplied by the operator.
- External writes and local service installation require explicit apply flags.
- Runtime data belongs under ignored local state directories, never in Git.
- Example configuration uses placeholder domains and identifiers.
- Release validation reports paths only and suppresses matching secret values.
- Person-level report rows require
--include-person-scopeand are never a
performance, compensation, or employment-decision input.
See PRIVACY.md, SECURITY.md, CONTRIBUTING.md, and docs/agent-onboarding.md before enabling live integrations. The current publication gaps are tracked in docs/public-readiness-audit.md.
Validation
uv lock --check
uv run ruff check .
uv run pytest -q
python3 scripts/verify_repository_quality.py
bash scripts/verify_public_release.sh
License
MIT. See LICENSE and THIRD_PARTY_NOTICES.md.