아카이브 / 개발

workspace-data-collectors — 로컬퍼스트 워크스페이스 수집·증거 도구

유형개발
기간2026
구분개인 프로젝트
언어Python
최근 push2026-08-03

목차프로젝트 요약 · 담당 범위 · 문제와 구현 접근 · 이 작업에서 한 일 · 결과물과 원문 · 구현 상세

프로젝트 요약

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

PackagePurpose
wdc-coreShared status, redaction, retry, and atomic-write utilities
workspace-slack-clientMinimal Slack Web API client used by the collector
slack-archiveIncremental Slack archive
notion-archiveAccessible Notion page archive
gitlab-archiveGitLab activity metadata archive
calendar-archiveOptional Calendar metadata archive
wdc-indexerLocal SQLite/FTS evidence index and MCP read surface
wdc-data-apiRead-only data access layer
wdc-pipelineCollection and indexing orchestration
workspace-effectiveness-coreShared contracts for aggregate effectiveness reports
workspace-eemEngineering effectiveness report module
workspace-pemProduct effectiveness report module
workspace-demDesign 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-scope and 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.

GitHub에서 최신 문서 보기 ↗