NoPlanB: 생산적 미루기(Productive Procrastination)를 치료하는 AI 실행 엔진
요약
NoPlanB는 생산적 미루기(Productive Procrastination) 문제를 해결하기 위해 개발된 오픈 소스 AI 실행 엔진입니다. 이 도구는 사용자가 계획 단계에 머무르지 않고 실질적인 행동으로 나아가도록 강제합니다. 로컬에서 구동되는 Gemma 모델을 활용하여 인지 왜곡을 지적하고 CBT 기반의 생존 계획을 생성하는 것이 특징입니다.
핵심 포인트
- 생산적 미루기 해결을 위한 AI 실행 엔진 NoPlanB 소개
- 전통적인 도구 대신 소크라테스 WOOP 질문 인터로게이터 사용
- 개인 정보 보호를 위해 로컬에서 Gemma 모델 구동 (Ollama)
- CBT 기반의 감정 분석 및 생존 계획 생성 기능 제공
Hacktoberfest 2026 주말 챌린지("Build for a Friend")를 위해 나는 오랜 친구의 발목을 잡고 있는 문제, 즉 **생산적 미루기(Productive Procrastination)**를 다루기로 결정했다.
내 친구는 믿을 수 없을 만큼 정교한 Obsidian 볼트를 가지고 있다. 그에게는 2026년 목표, 5개년 계획, 일일 습관에 대한 중첩된 폴더가 있다. 그는 이 노트를 정리하고, "최고의 백엔드 프레임워크"를 연구하며, 마크다운 파일을 재구성하는 데 몇 시간을 보낸다. 하지만 실제로 앉아서 코드를 작성해야 할 시간이 오면? 그는 멈춰버린다.
그는 계획을 실행에 대한 감정적 방패로 사용한다.
이를 해결하기 위해 나는 NoPlanB를 만들었다. 이는 개방형 소스(open-source)의, 에어갭(air-gapped) AI 실행 엔진으로, 당신을 계획 단계에서 강제로 실전 현장으로 밀어붙이도록 설계되었다.
작동 방식: 반(反)미루기 도가니 (The Anti-Procrastination Crucible)
Notion이나 Yeolpumta (YPT) 같은 전통적인 도구들은 종종 근본적으로 시작을 막는 '감정' 문제를 다루지 못하기 때문에 실패한다. NoPlanB는 수동적인 할 일 목록(to-do list)을 소크라테스 WOOP(Wish, Outcome, Obstacle, Plan: 희망, 결과, 장애물, 계획) 질문 인터로게이터로 대체한다.
과제를 시작하기 전에, 당신은 도가니(Crucible)를 거쳐야 한다:
- 감정 (The Emotion): 무엇이 당신을 회피하게 만드는 정확한 감정은 무엇인가? (예: 실패에 대한 두려움).
- 계획 함정 (The Planning Trap): 지금 어떻게 생산적으로 미루고 있는가? (예: API 문서를 하나 더 읽어야 한다고 계속 말한다).
- 원자적 행동 (Atomic Action): 절대적으로 가장 작은 물리적 단계는 무엇인가?
- 내부 장애물 (Internal Obstacle): 당신이 포기하게 만들 감정은 무엇인가?
- 생존 계획 (Survival Plan): 만약 그런 일이 발생한다면, 당신의 계획은 무엇인가?
개방형 소스 AI (로컬 Gemma)
나는 친구의 가장 깊은 불안감과 일지 기록이 제3자 서버로 전송되는 것을 원하지 않았다. 그래서 NoPlanB는 완전히 로컬에서 실행된다.
만약 감정적 장애물을 파악하기에 너무 압도당한다면, ✨ Ask AI 버튼을 클릭하세요. NoPlanB는 로컬 Google Gemma 모델 (Ollama를 통해)을 사용하여 현재 작성한 일기 항목을 읽고, 인지 왜곡(cognitive distortions)을 지적하며, 가혹하지만 공정한 CBT(인지 행동 치료) 생존 계획을 생성합니다.
강도 높은 실행 모드 (Intense Execution Mode)
'Crucible' 과정이 완료되면, 전체 계획 인터페이스가 사라집니다. 사용자는 '활성 작업(Active Task)' 위젯에 고정됩니다.
저는 YPT(Yeolpumta)에서 영감을 받아 거대한 네온 그린 디지털 카운트다운 타이머를 추가했습니다. 소크라테스식 계획은 **🚀 계획을 멈추고, 그냥 실행하세요 (STOP PLANNING. JUST EXECUTE.)**라는 직설적인 지시로 대체되었습니다.
기술 스택 (The Tech Stack)
제 친구가 구형 i3/i5 노트북을 사용하기 때문에, 이 앱이 로컬 LLM 추론(inference)을 실행할 때 매우 빠르고 충돌하지 않도록 해야 했습니다.
- 백엔드: 순수 Python / FastAPI. 매우 빠르고 가볍습니다.
- 프론트엔드: 바닐라 JS, CSS, HTML. 무거운 React 페이로드는 없습니다.
- 데이터 계층: 데이터베이스는 전혀 사용하지 않습니다. Python의
pathlib.rglob을 사용하여 로컬.md파일에 직접 읽고 씁니다. - 마크다운: Obsidian 스타일의
[[양방향 링크]]를 지원하기 위해marked.js를 연결하고 사용자 지정 정규 표현식 파서(regex parser)를 작성하여 친구가 편안함을 느끼도록 했습니다.
비하인드 스토리 (에이전트 세션)
저는 AI 에이전트와 협력하여 이 앱을 만들었습니다. 아래는 저희 세션에서 긁어온 내용으로, 나이브한 텍스트 파서를 제거하고, 엔터프라이즈급 마크다운 지원을 연결했으며, 동적인 YPT 스타일 카운트다운 타이머를 처음부터 구축하는 과정입니다.
NoPlanB 제작기: AI 실행 엔진
Agent
생성 시각: 2026-10-05T05:05:06+05:30
완료 시각: 2026-10-05T05:05:07+05:30
명령이 코드 0으로 종료되었습니다.
Stdout:
Stderr:
Agent
▸ unknown {"CommandLine": "cat README.md", "Cwd": "c:\Users\ADNAN\OneDrive\Projects...
Input
{
"CommandLine": "cat README.md",
"Cwd": "c:\Users\ADNAN\OneDrive\Projects\NoPlanB",
...
Output
Tool executed.
Agent
생성 시각: 2026-10-05T05:05:13+05:30
완료 시각: 2026-10-05T05:05:15+05:30
명령이 코드 0으로 종료되었습니다.
Output:
NoPlanB
NoPlanB는 '생산적 미루기(Productive Procrastination)'를 치료하기 위해 설계된 오픈 소스, 에어갭(air-gapped) AI 실행 엔진입니다. Obsidian에서 목표들을 끝없이 정리하는 대신, 로컬 Gemma 모델, Temporal 내구성 상태 기계(durable state machine), 그리고 행동 과학을 사용하여 사용자에게 직접 마주하도록 강제합니다.
**Hacktoberfest 2026 주말 챌린지: 친구를 위한 빌드(Build for a Friend)**를 위해 제작되었습니다.
존재 이유 (문제점)
Obsidian, Notion, Yeolpumta (YPT)와 같은 기존 도구들은 종종 '생산적 미루기'를 가능하게 하여 실패합니다. 2026년의 거대한 목표를 작성하는 것은 기분이 좋지만, 50개 항목으로 된 체크리스트를 응시하는 것은 인지 과부하(cognitive overwhelm)와 감정 회피(emotional avoidance)를 유발합니다. 시간 추적기는 실패를 기록할 뿐, 이를 예방하지는 못합니다.
NoPlanB는 수동적인 목록을 **소크라테스 WOOP 심문관(Socratic WOOP Interrogator)**과 **단일 작업 드립 엔진(Single-Task Drip Engine)**으로 대체하여 이 문제를 해결합니다.
아키텍처 및 기술 스택
- 로컬 AI 심문관 (Google Gemma via Ollama)
- NoPlanB는 Gemma를 사용하여 모호한 목표에 대해 질문을 던지고, 사용자가 시작하지 못하게 막는 구체적인 미세 행동(micro-action)과 그 근본적인 감정적 장애물(internal emotional obstacle)을 식별하도록 강제합니다.
- 이 기능은 로컬에서 실행되어 사용자의 원시 저널 기록 및 두려움이 100% 개인 정보로 유지되도록 보장합니다.
- 내구성 있는 상태 기계 (Temporal Python SDK)
- 작업이 정의되면 Temporal이 제어권을 가져옵니다. 한 번에 정확히 하나의 작업만 점진적으로(drip-feeds) 처리합니다.
- Temporal은 워크플로우가 상태를 잃거나 CPU를 소모하지 않으면서, 사용자의 신호(
Done,Stuck,Resist,Defer)를 기다리며 몇 시간 또는 며칠 동안 안전하게 일시 중지할 수 있도록 합니다.
- 행동 관측 가능성 (Sentry Agent Tracing)
- Sentry는 로컬 Gemma 호출을 측정하여 "인지적 마찰 지연 시간(cognitive friction latency)" (계획 실행에 전념하는 것을 미루는 시간)을 측정합니다.
- 모델 토큰 사용량과 워크플로우 타임아웃을 추적합니다.
- Obsidian 호환 볼트
- 데이터가 데이터베이스에 잠기지 않습니다. 모든 것은
vault/디렉터리에 YAML 프론트매터(front-matter)를 포함한 표준 Markdown 파일로 저장됩니다.
- 데이터가 데이터베이스에 잠기지 않습니다. 모든 것은
Hacktoberfest 2026 스폰서 카테고리
이 프로젝트는 다음 경품 트랙을 목표로 합니다:
- 친구를 위한 구축 (Build for a Friend, 종합): 자신의 2026년 일기장 목표를 실행으로 전환하는 데 어려움을 겪는 친구를 위해 직접 제작되었습니다.
- Temporal의 최적 사용: @workflow.signal 및 workflow.wait_condition을 사용하여 인간 개입형(human-in-the-loop) 다일 실행을 관리합니다.
- Gemma의 최적 사용: Gemma를 로컬에서 (Ollama를 통해) 소크라테스식 질문관 역할을 하도록 사용합니다.
- Sentry의 최적 사용: LLM 지연 시간과 사용자 마찰 지점을 모니터링하기 위해 Sentry Agent Tracing을 구현합니다.
설정 방법(Setup Instructions)
전제 조건 (Prerequisites)
- Python 3.11 이상
- Ollama: Ollama를 설치하고 Gemma 모델을 가져옵니다:
bash ollama pull gemma3:4b - Temporal: Temporal CLI를 설치하고 로컬 개발 서버를 시작합니다:
bash temporal server start-dev
설치 (Installation)
- 저장소(repository)를 복제하고 종속성(dependencies)을 설치합니다:
bash python -m venv .venv source .venv/bin/activate # 또는 Windows의 경우 .venv\Scripts\activate pip install -r requirements.txt # 선호하는 경우 hatch/poetry 사용 - 환경 템플릿(environment template)을 복사합니다:
bash cp .env.example .env관찰 가능성(observability)을 원한다면.env에 Sentry DSN을 추가하세요.
시스템 실행하기 (Running the System)
두 개의 터미널 창이 필요합니다.
터미널 1: 시간적 워커 (The Temporal Worker)
배경 상태 기계(background state machine)를 실행하고 Gemma 작업을 수행합니다.
bash python -m temporal_app.worker
터미널 2: API 서버 및 UI (The API Server & UI)
FastAPI 백엔드를 실행하고 최소한의 사용자 인터페이스(UI)를 제공합니다.
bash python -m api.server
브라우저에서 http://[REDACTED]:8000을 열어 첫 세션을 시작하세요.
라이선스 (License)
Apache 2.0
더 보기(Show more)
에이전트(Agent)
▸ 알 수 없음(unknown) {"AllowMultiple": false, "Description": "README.md를 fi..."
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기

