본문으로 건너뛰기
cccskills
무료GitHub에 공개한국어 소개

Harvest

기사, 영상 등 단일 자료를 분석해 LifeOS에 반영할 만한 개선 아이디어를 정리하고, 자료를 분류해 출처 정보와 관련 링크가 포함된 노트로 Cortex에 저장할 수 있습니다.

원문원문 설명 보기

Mines one piece of content for LifeOS and/or ingests it into Cortex. USE WHEN harvest, harvest this, /harvest, /ha, mine this for the system, anything useful in this for us, what can LifeOS take from this, should we adopt anything from this, ingest to knowledge, save to knowledge, drop into knowledge, route to knowledge, add to the knowledge archive, archive this signal, capture this to knowledge, classify and route to knowledge. NOT FOR Cortex note ops, Upgrade / lu scans, Cortex recall, X PullBookmarks sweeps.

danielmiessler/LifeOS스타 19,635(GitHub 19,635 + cccskills 0)
연동 도구YouTubeGemini

실행 점수 미검증

설치 방법 보기

이럴 때 유용합니다

  • 기사에서 LifeOS에 참고할 아이디어 찾기
  • YouTube 영상을 Cortex에 저장하기
  • 붙여 넣은 글을 지식 자료에 추가하기
  • 자료가 이미 저장됐는지 확인하기

한국어 소개

할 수 있는 일

Harvest는 기사, 블로그, 뉴스, YouTube 영상, X 게시물, PDF, 이미지, 음성, 붙여 넣은 글 등 하나의 자료를 읽고 내용을 분석합니다. LifeOS에 반영할 만한 아이디어도 정리할 수 있습니다. 이 내용은 제안으로 보고될 뿐 LifeOS에 자동 적용되지 않습니다. Cortex에 저장하도록 요청하면 자료 유형을 판별하고 본문을 가져와 분류한 뒤, 출처 URL과 관련 링크, 감사 기록을 포함한 노트로 등록합니다. 같은 자료를 다시 가져오면 중복으로 처리합니다.

이럴 때 유용합니다

읽은 글에서 참고할 만한 생각을 찾거나, 영상이나 글을 나중에 볼 수 있도록 Cortex에 남길 때 사용할 수 있습니다. 분석과 저장을 함께 요청하거나 URL 또는 붙여 넣은 글만 저장하도록 요청할 수 있습니다.

사용 예시

  • “이 기사를 분석하고 LifeOS에 반영할 만한 점을 정리해 주세요.”
  • “이 YouTube 영상을 Cortex에 저장해 주세요.”
  • “아래 글을 지식 자료에 추가해 주세요.”

주의 사항

처음 사용할 때 Harvest 서비스를 구축하고 주소와 토큰을 설정해야 하며, 형식에 맞는 도구도 설치해야 합니다. YouTube 영상은 공개 URL을 Gemini가 시청하는 방식으로 처리하며, 영상에 따라 수집에 실패할 수 있습니다.

이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.

문서 점검

AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.

안전성전송·삭제·명령 실행 등을 명시하고 있는가
B일부 부족Workflows를 거쳐 노트를 기록하고 자료를 클라우드 서비스로 전송합니다.
도입의 용이성필요한 도구나 API 키가 적고 적혀 있는가
B일부 부족서비스, 주소, 토큰, 형식별 도구가 필요하며 절차는 Setup.md에 안내되어 있습니다.

점수에는 넣지 않았습니다. 2026년 10월 28일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.

평가가 다르다고 생각되면 재검토를 요청하기

어느 항목이 왜 다르다고 생각하는지 적어 주세요. 로그인은 필요 없습니다. SKILL.md와 대조해 평가를 다시 만들고 이곳에 반영합니다.

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

포함된 파일(7)

  • SKILL.md11.8 KB
  • Intents/HarvestText.md1.9 KB
  • Intents/HarvestUrl.md1.6 KB
  • Intents/HarvestYoutube.md1.9 KB
  • Intents/Mine.md7.0 KB
  • Setup.md6.7 KB
  • Tools/harvest.ts42.8 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Harvest

Contents: Ideal State · Intent Routing · Tool contract · Data & Config · Gotchas · Examples

Two halves of one motion. Mine: read one piece of content and analyze it properly — what it is, where it is strong and weak — and, as one section of that report, what LifeOS should adopt from it (adoption report-only), with any further sections (such as the DA's own commentary) set by the install's preferences. Ingest: land the source in Cortex as a proper note — one CLI detects the source type, fetches the body or transcript, sends it through the Workflows classifier for TELOS-graded routing, then writes a schema-correct note with typed cross-links and a sidecar audit trail.

Saving signal by hand skips the cross-links, guesses the wrong folder and forgets the source URL, so capture is one command that routes through the same classifier and writer every time.

Ideal State

  • Every harvested source lands in Cortex as one schema-correct note with its source URL, typed cross-links and an audit trail, written only by the canonical pipeline.
  • A mined source's output carries analysis of the source ahead of its LifeOS adoption candidates, plus the sections the install's PREFERENCES.md asks for, and those candidates are recommended, never applied.
  • Failures, duplicates and thin fetches are reported as what they are; nothing is filed as a stub or garbage body that only looks like a capture.

Intent Routing

IntentTriggerFile
Mine (general analysis + LifeOS-upgrade pass, then ingest)harvest <input>, /ha, "mine this for the system", "anything useful in this for us"Intents/Mine.md
HarvestUrl (ingest an article, blog, LessWrong, Substack, news)"ingest <URL>", "save this <URL> to knowledge"Intents/HarvestUrl.md
HarvestYoutube (ingest any youtu.be / youtube.com link)"ingest <youtube URL>", "save this video to knowledge"Intents/HarvestYoutube.md
HarvestText (ingest raw paste, no URL)"ingest the following:", "save this text to knowledge"Intents/HarvestText.md

The bare word "harvest" routes to Mine (mine → then ingest). "Ingest"/"save to knowledge" routes straight to the matching ingestion intent. If the input is ambiguous (URL is a YouTube link), Tools/harvest.ts auto-detects host and routes itself.

References

FileRead when
Setup.mdfirst-time setup: build the harvest service, set the address and token, install the format tools

Tool contract

  • One CLI does the work: bun ~/.claude/skills/Harvest/Tools/harvest.ts <input> [--type auto|article|youtube|x|text|pdf|image|audio] [--url <url>] [--dry-run] [--body-out <file>] (the type list is harvest.ts --help's; --url names the canonical source for a text signal; --body-out writes the fetched title and full body to a file before any POST, so a caller analyzes the same text the note is built from)
  • The harvest classifier worker (cloud; built per Setup.md § 3. Build the service; URL in Config.md / HARVEST_API_BASE env) — accepts a normalized signal at /ingest-and-classify, persists it idempotently in its D1 database, and returns {id, classification, confidence, reasoning, routed_actions}.
  • LIFEOS/TOOLS/HarvestExecutor.ts (local) — polls Workflows' /items, dispatches routed_actions through typed handlers (create_knowledge_idea_entry, create_knowledge_source_entry, create_learning_queue_entry), and writes the actual KNOWLEDGE note with harvest_item_id linkage.
  • The skill never writes to MEMORY/KNOWLEDGE/ directly. It always routes through Workflows then the executor.
  • Idempotency: Workflows enforces UNIQUE(source, external_id) — re-harvesting the same URL returns output.status: "duplicate". The executor sidecar at MEMORY/STATE/harvest-executor-state.json makes the local write idempotent too. On a duplicate, look up the existing item with the source and external_id the summary block printed: curl -H "Authorization: Bearer $TOKEN" "$HARVEST_API/items?source=<source>&external_id=<id>". YouTube captures use source=web (the video id is the external id); articles, X posts, files and pasted text use source=manual.
  • Output: MEMORY/KNOWLEDGE/{Ideas,People,Companies,Research}/<slug>.md with source_url:, source_harvest_id:, ≥2 typed related: entries, and 1-3 body [[wikilinks]].

The summary block harvest.ts prints to stdout contains:

  • source — manual:lesswrong-<id> or similar canonical external_id
  • workflows.id — D1 row id (used to look up the harvest item later)
  • classification — knowledge / learning / blog_seed / etc.
  • confidence — Workflows' confidence score
  • routed_actions — the action verbs Workflows decided
  • executor.paths_written — actual file paths created in MEMORY/KNOWLEDGE/
  • executor.status — executed / backfilled / deferred

Data & Config

The USER extension lives at <configRoot>/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Harvest/ (configRoot is $CLAUDE_CONFIG_DIR when set, else ~/.claude; harvest.ts resolves its sibling tools from the same root):

  • Config.md — harvest_api_base:, the harvest worker URL. The HARVEST_API_BASE env var wins when set; with neither, harvest.ts stops and names the file and key.
  • PREFERENCES.md (optional) — report preferences the Mine intent applies on top of its default shape, including any section it adds.
  • History.md (optional) — the install's provenance behind generic credits in the intents, read on demand.

The bearer token is the auth_token: field of ~/.config/workflows/config.yaml, the same source HarvestExecutor uses (see Gotchas).

First-time setup (the harvest service, its address and token, and the format tools) is in Setup.md.

Gotchas

  • Name it Cortex. User-facing destination names, report labels, and completion messages use Cortex (for example, "Saved to Cortex"). MEMORY/KNOWLEDGE/ is a storage path, not the product name; "Knowledge Archive" and "knowledge system" are not names for Cortex. Preserve literal paths, API identifiers, source quotations, and accepted trigger phrases.
  • Don't skip the body fetch. Workflows' classifier needs real text, not just the URL. The tool fetches the page body locally before POSTing — if you bypass the tool and POST a URL with empty body, classification quality collapses.
  • YouTube comes from a Gemini watch pass on the public URL, never the captions or the page. harvest.ts sends the URL to LIFEOS/TOOLS/GeminiWatch.ts and the note body names the model that watched it. The title comes from YouTube's published oEmbed endpoint, and falls back to YouTube <id> when that answers nothing. Gemini refuses some livestream URLs ("caller does not have permission"); the capture then fails with that reason. Don't try to parse the YouTube page HTML directly — it's mostly nav and JS. An install may add its own transcript lane beside the tool; when one is present it runs first, the watch pass is its fallback, and the note body says which source was used.
  • Never re-implement the writer. The single canonical writer is HarvestExecutor.ts. If a write requirement isn't supported (new action verb, new entity type), extend the executor's handler set — don't fork the write logic into this skill.
  • Auth lives in YAML, not the env. The token is in ~/.config/workflows/config.yaml under auth_token: — not in ~/.claude/.env. Read the YAML; don't process.env.WORKFLOWS_TOKEN.
  • Content-type beats the URL path — arxiv.org/pdf/<id> has no .pdf on it. Routed by path alone, that link goes to the article path, which fetches the PDF bytes, HTML-strips them, and produces mojibake that passes the length check and would be filed as a real capture. The fetch now sniffs Content-Type and the %PDF- magic bytes and re-routes, with assertReadableText() as the backstop that fails any body over 2% control/replacement characters. Never loosen that guard to make a stubborn source "work" — a capture that stores garbage is worse than one that fails.
  • A real file with no handler must fail loudly, never fall through to text. Falling through files the path string itself as the note body — a stub wearing the shape of a successful capture. detectType throws on an unrecognized extension for exactly this reason (Synapse ISC-22). A relative path resolves against the working directory; before 2026-10-13 only absolute paths counted as files, so harvest.ts notes.md filed the string "notes.md" as raw text.
  • Type floors differ on purpose. An article needs 200 bytes, a YouTube transcript 500, a voice memo 80, an image 40. A one-sentence voice memo is a legitimate capture; applying the video threshold to it silently rejects real captures.
  • Vision description is skipped inside a nested Claude Code session. CLAUDECODE blocks the subprocess (OPERATIONAL_PREFERENCES), so describeImage returns null and OCR alone carries the capture rather than the whole harvest failing. Run image harvests from a plain shell when the description matters.
  • Source detection is host-based. youtu.be and youtube.com → YouTube; everything else with http(s):// → article. Raw text (no scheme) → text. An X/Twitter status URL → x: read through skills/X/Tools/read.ts, and a post carrying a video has the video downloaded and watched (GeminiWatch.ts watchFile); a failed watch fails the capture (Synapse ISC-32). Bluesky still goes as an article.
  • The note is written from the captured body. /items does not return the body, so harvest.ts hands it to the executor with --body-file. Before 2026-10-08 every note was written from the title and the classifier's one-line reasoning alone (Synapse ISC-33). Running HarvestExecutor.ts --item by hand without --body-file still gets the thin metadata-only note.
  • A JavaScript app shell fails the body floor; it is never filed as its loading text. A page that strips to under 200 bytes ends in "Body too short". When the page is one you can open, read it in a real browser through the Interceptor skill and harvest the text with --type text --url <page>. harvest.ts fetches only the page it was given and never calls endpoints the page did not ask for.
  • --dry-run doesn't touch Workflows. It runs source detection + body fetch and prints what would be POSTed. Useful when validating a new source type without burning a D1 row.

Examples

User: "harvest https://youtu.be/<video-id>"
→ Mine intent
→ A harvest report (analysis, any preference-added sections, LifeOS upgrades table, verdict) ending in a **Cortex:** line with the note path

User: "save this https://example.com/some-article to knowledge"
→ HarvestUrl intent
→ One readable block from the printed summary, including the Cortex note path, or the duplicate's existing path

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

AnnualReports

무료요약 있음

여러 업체와 공공기관의 사이버 보안 보고서를 검색하고 가져와 위협, 랜섬웨어, 침해 통계 등의 추세를 비교합니다. 분석에는 출처별 업체, 연도, 보고서를 표시하고 자료 간 차이도 따로 다룹니다.

  • 분류별 위협 보고서를 찾을 때
  • 특정 업체의 보고서를 가져올 때
  • 여러 업체의 랜섬웨어 동향을 비교할 때
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

ApertureOscillation

무료요약 있음

기능이나 구성 요소 자체의 설계 요구와 시스템 전체의 목표를 세 단계로 비교합니다. 설계상의 충돌과 적절한 구현 범위를 정리하고, 제안한 설계가 전체 방향과 맞는지 평가합니다.

  • 서비스나 라이브러리를 분리할지 판단하기
  • 기능 요구와 제품 방향 비교하기
  • 새 구성 요소와 기존 시스템의 정합성 확인하기
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

Aphorisms

무료요약 있음

글의 주제에 맞는 격언과 인용문을 찾아 저자와 선정 이유를 함께 제안합니다. 출처가 있는 인용문을 추가하고, 사상가의 말을 주제별로 조사하며, 사용 기록을 관리해 같은 인용문을 반복하지 않도록 돕습니다.

  • 뉴스레터에 어울리는 인용문 찾기
  • 출처와 함께 중복 없이 인용문 저장하기
  • 주제별로 사상가의 말 조사하기
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

Art

무료요약 있음

블로그 삽화, 기술 도표, 비교 그림, 만화, 아이콘 등을 용도에 맞는 절차로 제작합니다. 구도와 색상, 이미지 모델을 정하고 검토용 이미지를 출력합니다.

  • 블로그 제목 이미지를 만들 때
  • 시스템 구조를 그림으로 설명할 때
  • 비교나 연대표를 시각화할 때
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

ArtDirection

무료요약 있음

브리프와 제작 기준에 따라 이미지, 영상, 슬라이드, 사이트 화면 캡처의 시각 품질을 평가합니다. 두 비전 심사자가 점수와 결함 우선순위를 제시하고, 정해진 횟수 안에서 수정을 돕습니다. 평가를 통과한 결과물만 전달할 수 있으며, 사람의 점수와 의견은 별도 기록해 심사 보정에 활용합니다.

  • 이미지 수정 항목의 우선순위 정리
  • 기준에 따라 영상이나 슬라이드 평가
  • 공개 전 시각 품질 점검
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

ArXiv

무료요약 있음

주제, 연구 분야, 논문 ID로 arXiv 논문을 찾고 제목, 저자, 초록, 링크를 정리합니다. 새 논문을 확인하고, 제공되는 경우 AlphaXiv의 AI 생성 개요도 가져옵니다.

  • AI·머신러닝 분야의 새 논문 확인
  • 특정 주제의 논문 검색
  • 논문 ID나 arXiv 주소로 조회
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

danielmiessler의 스킬 모두 보기

이 스킬의 문제 신고