Files
kebab/tasks/p9/p9-fb-29-http-daemon.md
th-kim0823 2e8de14434 📝 docs: defer fb-29 HTTP daemon + fb-30 stdio-only
2026-05-07 brainstorm 결정 — fb-29 HTTP daemon defer.

근거:
- single-user local-first 환경에서 daemon 복잡도 (PID file / port lock /
  single-instance / lifecycle UX / loopback security) 가 비대.
- fb-30 stdio MCP 가 동일 사용자 가치 (agent integration + session 동안
  hot cache) 를 daemon 없이 제공 — agent host (Claude Code, Cursor 등)
  가 subprocess 띄우면 session 동안 process 유지 = 자연스러운 hot state.
- ask 의 dominant cost 는 Ollama LLM 추론 (수 초) 라 daemon 효과 제한적.
  search 만 의미 있는데 그 비용도 fastembed model load (~1s) 가 dominant —
  stdio MCP subprocess 가 동일하게 회피.

후속 fb-30 의 transport 는 stdio 단일. HTTP-SSE 옵션은 future task —
재개 trigger:
- browser agent / remote multi-host 시나리오 등장.
- TUI ↔ CLI 다중 인스턴스 state sharing 요구.
- fb-30 MCP HTTP-SSE 변형 도입 검토.

영향:
- fb-29 spec frontmatter `status: open` → `deferred`,
  `target_version: 0.3.0` → `P+`, `unblocks: [p9-fb-30]` → `[]`.
- fb-30 `depends_on: [p9-fb-27, p9-fb-29]` → `[p9-fb-27]`.
- INDEX.md 의 0.3.0 group + HANDOFF 의 release 그룹 표 갱신.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 13:58:02 +09:00

2.8 KiB
Raw Blame History

phase, component, task_id, title, status, target_version, depends_on, unblocks, contract_source, contract_sections, source_feedback
phase component task_id title status target_version depends_on unblocks contract_source contract_sections source_feedback
P9 kebab-cli + new crate (kebab-server) p9-fb-29 HTTP daemon (`kebab serve`) — subprocess overhead 제거 deferred P+
../../docs/superpowers/specs/2026-04-27-kebab-final-form-design.md
§7 RAG
§10 UX
사용자 도그푸딩 2026-05-06 — agent loop 가 kebab CLI 를 반복 호출 시 subprocess fork + Lance/SQLite cold start 비용 누적. local HTTP daemon 이 latency 해결.

p9-fb-29 — HTTP daemon (kebab serve)

🚫 Deferred (2026-05-07 brainstorm). fb-30 stdio MCP 가 동일 사용자 가치 (agent integration + session 동안 hot cache) 를 daemon 복잡도 (PID file / port lock / single-instance / lifecycle UX / loopback security) 없이 제공. single-user local-first 환경에서 HTTP transport 가치 미미 (cold start 의 dominant cost = fastembed model load 는 stdio MCP subprocess 가 session 동안 보유 시 동일하게 회피, ask 는 Ollama 추론 latency 가 dominant 라 daemon 효과 제한적). 본 task 는 다음 trigger 시 재개:

  • browser agent / remote multi-host 시나리오 등장 (현재 사용자 패턴 외).
  • TUI ↔ CLI 다중 인스턴스 state sharing 요구.
  • fb-30 MCP HTTP-SSE transport 옵션 도입 검토.

fb-30 의 prerequisite 였던 본 task 는 fb-30 stdio-only 결정으로 의존 제거. 본 spec 은 brainstorm 결정의 기록 보존용.

증상 / 동기

  • 현재 kebab search / kebab ask 가 매 호출 process fork — Lance / SQLite / fastembed 모델 로드 cold start.
  • agent 가 10 회 search 도는 loop 면 cold start × 10. local-first 단일 사용자라도 latency 누적.
  • daemon 으로 띄우면 hot — sub-100ms search 가능.

Goal (skeleton)

  • kebab serve --port <N> --bind 127.0.0.1 — local HTTP API.
  • endpoint: /search, /ask, /fetch, /ingest, /stats, /schema. wire schema v1 재사용.
  • auth: local bind 면 무인증 (외부 host 면 token).
  • streaming /ask (Server-Sent Events 또는 chunked).
  • lifecycle: 사용자 명시 실행 vs CLI 자동 spawn (XDG runtime path 의 socket).

후속 작업 — brainstorm 필요 항목

  • web framework: axum / hyper / actix — workspace 통일성 + binary size.
  • 단일 인스턴스 보장 (PID file / socket lock).
  • daemon ↔ CLI shim — CLI 가 daemon 살아있으면 HTTP 사용, 없으면 fork.
  • TUI 와 daemon 공존 — TUI 도 daemon 있으면 HTTP 통해 (현재는 in-process).
  • fb-30 (MCP) 와 transport 공유 — MCP-over-HTTP-SSE.

Risks / notes

  • 단일 사용자 local 환경 — daemon 없는 단순함 trade-off.
  • fb-30 와 강결합 — 함께 brainstorm 하면 architecture 일관.
  • security: bind 127.0.0.1 default 강제 — 0.0.0.0 은 명시 opt-in.