# GSD Task Manager: 내 할 일 목록을 에이전트에게도 열어 주기
# GSD Task Manager: a task list your agent can read too

- Site: https://select1.dev/2026-10-12 (English), https://select1.dev/ko/2026-10-12 (Korean)
- Entry: 002
- Published: 2026-10-12 (KST). Launch date: 2026-10-11
- Pick: GSD Task Manager <https://github.com/vscarpenter/gsd-task-manager> (source: Show HN)
- Verified: ran
- What: GSD Task Manager 는 할 일을 사분면으로 정리하는 오픈소스 프로덕트다. 브라우저 앱이 할 일을 긴급한가와 중요한가 두 축으로 나누고, MCP 서버로 에이전트도 같은 목록을 읽고 쓴다.
- What (en): GSD Task Manager is an open-source product that sorts tasks into an urgent-versus-important matrix in the browser. An agent reads and writes the same list through an MCP server.
- Why: 오늘의 픽으로 선정한 이유는 에이전트와 할 일 목록을 공유하려면 무엇을 포기해야 하는지를 구조가 그대로 보여 주어서다.
- Why (en): It is today's pick because its structure shows exactly what must be given up to share a task list with an agent.
- Verdict: 작동한다. 브라우저 앱은 명령 두 줄로 로컬에서 실행된다.
- Verdict (en): It runs. The browser app runs locally with two commands.
- Tags: agent, mcp, local-first, task-manager, ai-built

## Checked against the README

- [pass] PocketBase 없이 로컬에서 할 일을 만들고 지울 수 있다 — 계정 없이 할 일 네 개 생성, 새로고침 뒤 유지. 브라우저 요청 205건이 전부 localhost
- [pass] MCP 서버는 도구 19개를 제공하고 쓰기 도구는 dryRun 을 지원한다 — stdio 로 tools/list 19개. 쓰기 5개 스키마에 dryRun. 백엔드 없이 create_task dryRun 이 미리보기 반환. ADR 0005 의 20개 표기와는 다름
- [pass] 동기화를 켜기 전에는 데이터가 기기에 남아 있다 — Playwright 요청 로그의 호스트가 localhost:3000 하나. ADR 0017 에서 Sentry 제거 확인

## Measured

- 정적 내보내기 결과물 (out/): 4.3 MB, next build 38초 (npx next build 뒤 du -sh out)

## Progress (days after launch; full history https://select1.dev/2026-10-12/progress)

- day 3 (due 2026-10-14) [missed] Progress checks started on 2026.10.16. This date had already passed.
- day 7 (checked 2026-10-18) [active] commits since launch 12, stars 38, releases 18, contributors 8, last commit 2026-10-17
  - The matrix grid now fits the viewport, and each quadrant scrolls on its own.
  - Fixed the issues a Codex Security scan found (v13.9.4).
  - With sync in use, auto-archive runs only after changes are pulled from the server (v13.9.4).
  - Saving in the editor keeps the default reminder and an untouched due date, and clears a due date or estimate that was emptied (v13.9.3).
- day 15 (checked 2026-10-26) [active] commits since launch 40, stars 40, releases 19, contributors 8, last commit 2026-10-24
  - Dependencies with security advisories, including zod, body-parser and undici, were updated to patched releases.
  - With a larger browser text size, pages now reflow instead of scrolling sideways.
  - Keyboard, touch, dialog and contrast issues found in an accessibility audit were fixed (v13.9.9).
  - Tapping a field in the drawer or the palette no longer zooms the page in iPhone Safari (v13.9.9).

## 한국어

## 무엇이 문제인가

할 일 앱은 사용자가 화면에서 직접 쓰도록 만들어져 있다. 에이전트에게 할 일을 맡기고 싶으면 흔히 마크다운 파일을 만들어 에이전트가 고치게 한다. Show HN 스레드의 첫 댓글에도 같은 말이 있고, todo.txt 는 사용자에게도 로봇에게도 통한다는 답글도 있다. 파일은 간단하지만 구조가 없다. 어느 일이 긴급하고 어느 일이 중요한지는 사용자 머릿속에만 있고, 에이전트가 무엇을 바꿨는지는 바뀐 뒤에야 안다. 사용자는 앱을 사용하고 에이전트는 파일을 보니, 둘이 따로 논다.

## 어떻게 해결했나

GSD Task Manager 는 앱을 그대로 두고 에이전트도 같은 앱에 접근하게 한다. 브라우저 앱은 할 일을 긴급·중요 두 축의 사분면에 놓고, MCP 서버는 같은 목록을 도구 19개로 연다. 쓰기 도구 5개는 전부 dryRun 을 받아 적용 전에 결과를 미리 보여 준다. 에이전트가 할 일을 만들거나 옮기면 스키마로 검증되고, 사용자는 같은 사분면에서 그것을 본다. 에이전트에게 마크다운 파일 대신 검증되는 도구와 사분면 구조를 준다.

## 무엇이 다른가

단, 조건이 있다. 사용자와 에이전트가 서로 다른 저장소를 본다. 브라우저 앱은 모든 할 일을 IndexedDB에 저장하고 계정도 서버도 없이 작동한다. 그래서 화면 머리글에 "Saved locally" 가 표시된다. 반면 MCP 서버는 Node 프로세스라 브라우저의 IndexedDB 에 접근할 수 없고, PocketBase 동기화 서버에만 접속한다. PocketBase 는 백엔드이고 단일 바이너리로 배포된다. 동기화는 선택 사항이다. 설계 기록 ADR 0005 에 이 한계와 검토한 대안이 적혀 있다. 브라우저 확장, WASM 으로 IndexedDB 읽기, localhost 웹소켓 서버를 저울질했고, 세 가지 모두 버리고 별도 패키지로 만들어 stdio 로 통신하게 했다. 할 일 목록을 사용자는 앱으로, 에이전트는 도구로 함께 읽고 쓸 수 있다. 단, 할 일이 브라우저에만 머물지 않고, 동기화 서버도 운영해야 한다.

## 어떻게 만들었나

- 커밋 669개가 2025-10-04 부터 런칭 전날까지 이어진다.
- 커밋 188개의 Co-authored-by 트레일러에 Claude 가 적혀 있고, 표기는 Claude Opus 4.5 에서 4.6, 4.8, Fable 5.1 로 바뀌어 간다. Cursor Agent 17개, Copilot 12개, Devin 7개.
- 저장소 루트에 CLAUDE.md, AGENTS.md, .claude, .codex 디렉토리가 있고, 설계 결정은 ADR 17개로 기록돼 있다.
- README 에는 어떻게 만들었는지 적혀 있지 않다.

## 실행해 보니

설치한 뒤 아래 순서로 시험했다.

1. 설치와 실행. `bun install` 에 4.7초가 걸렸고, `bun dev` 로 바로 실행됐다.
2. 로컬 저장. 계정도 키도 없이 할 일 네 개를 만들었고, 새로고침 뒤에도 유지됐다. 그 사이 브라우저는 요청을 205개 보냈고, 전부 localhost 였다.
3. 빠른 입력. 할 일을 표시 없이 적으면 "Eliminate" 칸에 들어가고, 끝에 `*` 를 붙여야 "Schedule" 칸에 들어간다. 빠른 입력의 기본값이 "버릴 것"이라는 뜻이다.
4. MCP 서버. `tsc` 로 빌드한 뒤 stdio 로 연결해 도구 목록을 조회했다. 19개였고, 설계 기록의 20개와 다르다. list_devices 가 빠졌다.
5. 백엔드 없이 호출. create_task 를 dryRun 으로 호출하자 미리보기를 반환했고, get_sync_status 는 healthy false 를 반환했다. 즉 MCP 서버는 실행되지만, 동기화 서버와 OAuth 로그인 없이는 할 일 하나 읽지 못한다.
6. README 대조. README 에 적힌 세 가지는 모두 확인됐고, 도구 수만 README 에는 19개, ADR 에는 20개로 다르게 적혀 있다.
7. 정적 빌드. 38초가 걸렸고 결과물은 4.3 MB 였다.

```
connected in 274 ms; tools: 19
create_task dryRun -> DRY RUN - Task would be created (not saved)
get_sync_status -> "healthy": false, "authenticated": false
```

## 확인하지 못한 것

- PocketBase 연동. 확인하려면 PocketBase 를 설치해 실행하고 OAuth 로 로그인한 뒤 MCP 도구로 실제 할 일을 작성해야 한다.
- lib/sync/ 의 마지막 쓰기 우선 충돌 처리(ADR 0003). 에이전트와 사용자가 같은 할 일을 동시에 고치면 어느 쪽이 남는지 다음에 확인하자.

## 판정

작동한다. 브라우저 앱은 명령 두 줄로 로컬에서 실행된다. 다만 에이전트가 같은 목록을 보려면 동기화 서버와 OAuth 로그인이 먼저 필요하다. 브라우저에서 할 일을 사분면에 배치해 우선순위를 정하고 싶고 에이전트 연결은 나중 문제인 경우에 써 볼 만하다. 에이전트에게 할 일을 맡기기만 하려면 마크다운 파일이 더 간단하다. PocketBase 동기화 서버를 직접 운영한다면 이 프로덕트가 더 좋은 선택이다.

## 얻어갈 것

- 사용자의 데이터를 에이전트도 읽고 쓰게 하려면 데이터를 어디에 저장할지부터 정하자. GSD 는 브라우저 저장소를 지키느라 에이전트에게는 동기화 서버가 따로 필요해졌다.
- 에이전트용 쓰기 도구에는 dryRun 을 넣어 적용 전 결과를 반환하게 하면 된다. 여기서는 쓰기 도구 5개 전부가 그렇게 돼 있다.
- 문서의 숫자와 코드의 숫자가 같은지 확인해 보자. README 는 도구 19개, 설계 기록은 20개였다.

### 용어

- Show HN: 개발자 커뮤니티 Hacker News 에서 자신이 만든 프로덕트를 소개하는 글. 제목이 "Show HN:"으로 시작한다.
- MCP: Model Context Protocol. AI 모델을 외부 도구와 데이터에 연결하는 방식을 정의한 규격이다.
- IndexedDB: 브라우저에 들어 있는 로컬 데이터베이스. 웹 앱이 서버 없이 자료를 저장할 때 쓴다.
- AGENTS.md: 저장소에 두는, AI 코딩 에이전트용 작업 규칙 파일.

## English

## The problem

The most common way to hand tasks to an agent is a markdown file that the agent edits. The first comment on the Show HN thread said as much. A reply added that todo.txt works for humans and robots alike. One file is simple, but it has no structure. Only the writer knows whether a task is urgent or important. The writer sees the agent's changes only after they happen. The user works in an app, and the agent reads a separate file.

## How it solves it

GSD Task Manager gives the agent access to the user's task list. The browser app places tasks in a matrix with urgent and important as its two axes. The MCP server exposes the same list through 19 tools. Its 5 write tools all take dryRun and show the outcome before applying it. Each task that the agent creates or moves is validated against a schema. The user sees the change in the same matrix.

## What is different

The user and the agent read different data stores. The browser app keeps every task in IndexedDB and works with no account and no server. That is why the header says "Saved locally". The MCP server is a Node process and cannot access the browser's IndexedDB. It connects only to the optional PocketBase sync server, a backend shipped as a single binary. The design record ADR 0005 states this limit and the alternatives it considered: a browser extension, reading IndexedDB through WASM, a localhost WebSocket server. The project rejected all three and chose a separate package that uses stdio transport. The user reads and writes the task list in the app, and the agent does the same through tools. The cost is that the tasks no longer stay only in the browser. You also have to run a sync server.

## How it was built

- The repository has 669 commits from 2025-10-04 to the day before launch.
- 188 commits have a Co-authored-by trailer for Claude. The model name changes from Claude Opus 4.5 through 4.6 and 4.8 to Fable 5.1. Cursor Agent appears in 17 commits, Copilot in 12 and Devin in 7.
- The repository root has CLAUDE.md, AGENTS.md and the .claude and .codex directories. The design decisions are recorded in 17 ADRs.
- The README does not describe how it was built.

## Running it

1. Install and run. `bun install` took 4.7 seconds, and `bun dev` started the app straight away.
2. Local storage. I created four tasks without an account or key. They were still there after a reload. In the meantime the browser sent 205 requests, all to localhost.
3. Quick capture. A task typed with no marker goes to "Eliminate". Only a trailing `*` sends it to "Schedule". So quick capture files a task under "discard" by default.
4. MCP server. I built it with `tsc` and connected over stdio. I then fetched the tool list. There were 19 tools. The design record lists 20, and list_devices is missing.
5. Calls with no backend. Calling create_task with dryRun returned a preview, and get_sync_status returned healthy false. So the MCP server starts, but without a sync server and an OAuth login it cannot read a single task.
6. Against the README. I confirmed all three claims in the README. The only discrepancy is the tool count. The README says 19, and the ADR says 20.
7. Static build. It took 38 seconds and produced 4.3 MB.

```
connected in 274 ms; tools: 19
create_task dryRun -> DRY RUN - Task would be created (not saved)
get_sync_status -> "healthy": false, "authenticated": false
```

## Not checked

- The PocketBase integration. I need to install and run PocketBase, log in with OAuth, and write real tasks through the MCP tools to check it.
- The last-write-wins conflict handling in lib/sync/ (ADR 0003). Next time, check which side survives when an agent and a user edit the same task at once.

## Verdict

It runs. The browser app runs locally with two commands. But an agent needs a sync server and an OAuth login to see the same list. It suits users who want to prioritize tasks in a browser matrix and can wait to connect an agent. If you want an agent to manage your tasks, a markdown file does it with less setup. This product beats that only if you are willing to run the PocketBase sync server yourself.

## What to take away

- Decide where a user's data lives before you let an agent read and write it. GSD kept it in the browser, so the agent needed a separate sync server.
- Give every write tool for agents a dryRun option that returns the outcome before applying it. Here all five write tools do.
- Check that the numbers in the docs match the code. The README listed 19 tools. The design record listed 20.

### Terms

- Show HN: A post on Hacker News, a developer community, in which someone presents what they made. Its title starts with "Show HN:".
- MCP: Model Context Protocol: a standard for how AI models connect to outside tools and data.
- IndexedDB: The database built into the browser, which web apps use to keep data locally without a server.
- AGENTS.md: A file in a repository that gives AI coding agents their working rules.

## Launches the same day

- BetterWispr <https://betterwispr.com/> (Show HN, 116): 무료 오픈소스 받아쓰기. 맥에서 Option+Space 를 누르고 말하면 로컬 모델이 받아 적는다.
- Littleguys <https://littleguys.hervalicio.us> (Show HN, 15): 맥 메뉴 막대 앱. Claude Code, Codex, OpenClaw 에이전트들을 지켜본다.
- Titan <https://titan-ai.co/> (Show HN, 7): 맥용 AI 에이전트 팀. 열네 살 창업자가 만들었고, 음성이나 데스크톱 앱으로 조사, 메일, 계획을 맡긴다.
- GSD Task Manager <https://github.com/vscarpenter/gsd-task-manager> (Show HN, 7): 사분면 할 일 앱. 에이전트도 MCP 서버로 같은 목록을 읽고 쓴다.
- Galahad <https://github.com/corbenicai/galahad> (Show HN, 4): AI 장기 기억 레이어. 5천만 토큰 창을 내세우고 무료 체험을 제공한다.
- hermes-official-plugins <https://github.com/NousResearch/hermes-official-plugins> (GitHub, 163): Hermes Agent 공식 플러그인 모음. Nous Research 가 직접 관리한다.
- mcd-budget-meal <https://github.com/Sam-Hui-dot/mcd-budget-meal> (GitHub, 71): 중국어 스킬. 맥도날드 MCP 로 예산 안의 주문을 찾아 준다.
- ai-writer <https://github.com/csadigital/ai-writer> (GitHub, 47): 웹 앱. 상품 사진에서 다국어 상품 설명을 만든다.
- HireKey <https://www.producthunt.com/products/hirekey> (Product Hunt, 242): 기술직 구직용 AI 코파일럿. 채용 담당자의 관점을 반영한다.
- kōdlo <https://www.producthunt.com/products/kodlo> (Product Hunt, 193): 영업용 AI 워크스페이스. 고객 맥락을 한곳에 모은다.
- Zaemit AI <https://disquiet.io/products/zaemit-ai> (Disquiet): 플랫폼. 말로 웹사이트를 만들고 운영까지 맡긴다. MCP 로 ChatGPT 와 Claude 에 연결된다.
- 디냅스 (Dynapse) <https://disquiet.io/products/dynapse> (Disquiet): AI 구독료를 이미 지불하고 있다면, 그 구독으로 카드뉴스와 제안서를 만든다.

## Getting started

- Steps: git clone https://github.com/vscarpenter/gsd-task-manager.git ; bun install ; bun dev
- Needs: Bun 1.3, Node.js 22.22 이상, MCP 서버를 쓰려면 PocketBase 동기화 서버와 Google 또는 GitHub OAuth 로그인
- Cost: MIT 라이선스, 무료. 동기화는 PocketBase 를 직접 운영해야 하고 저장소의 docker/ 에 구성이 있다. 호스팅판 gsd.vinny.dev 의 가격 표기는 찾지 못했다.
- Note: MCP 서버는 npm install --global gsd-mcp-server@1.3.0 뒤 gsd-mcp-server --setup 으로 Claude Desktop 설정 파일을 만든다.
