라이프스타일
Skill 스크립트, 참조, 자료
반복 로직과 큰 자료를 지원 파일로 나누고 필요할 때 읽는 흐름과 상대 경로를 확인합니다.
읽는 데 약 15분 · 실습 30 분

이 글의 목차
Codex 학습 목차로 돌아가기Codex 학습 센터: 전체 튜토리얼 목차설치와 첫 작업부터 MD 지침과 고급 연동까지 60개 강의, 열 개 단원을 계획합니다. 수준, 환경, 목표, 명령으로 다음 글을 찾고 미게시 항목의 상태를 확인할 수 있습니다.전체 글 읽기
목표와 준비
이 단락의 학습 자료: Skills 기초Skills와 SKILL.mdSkill은 반복할 절차와 자료를 묶습니다. 최소 구조는 폴더와 SKILL.md이며 앞부분에 name과 description, 본문에 동작과 출력을 적습니다. 설치만으로 사용되었다고 판단하지 않습니다.전체 글 읽기
전체 실습 파일을 다운로드해 codex-skill-lab을 풀고 파일별 설명을 읽으세요. 다음 글의 skill.test.mjs도 포함하지만 전역 스킬을 설치하지 않습니다.
폴더 안의 모든 파일이 자동 실행되지는 않습니다. SKILL.md는 사용 범위와 순서, references는 필요할 때 읽는 규격, assets는 출력 양식, scripts는 실행 코드를 담습니다. 이번에는 JSON 읽기와 집계만 하며 사이트 수정, 네트워크 호출, 게시를 포함하지 않아 각 자원의 역할을 확인할 수 있습니다.
| 자원 | 내용 | 이번 확인 |
|---|---|---|
| SKILL.md | 범위와 순서 | 링크와 중단 조건 |
| references | 입력 계약 | 동명 허용, 중복 ID 거부 |
| assets | 빈 보고서 틀 | 이전 수치 대신 실제 결과 입력 |
| scripts | 실행 검사기 | 직접 실행 3/1/2 |
1단계: 스킬과 입력 만들기
Windows, macOS, Linux 모두 파일 관리자나 편집기에서 같은 이름의 구조를 만드세요. data는 스킬 밖 실습 루트에 두어 재사용할 절차와 작업마다 달라지는 입력을 분리합니다. SKILL.md.txt로 저장하거나 같은 이름의 폴더를 한 겹 더 만들지 않았는지 확인하고 사용자 전역 .agents로 복사하지 마세요.
codex-skill-lab/
data/tasks.json
.agents/skills/todo-summary/
SKILL.md
references/input-format.md
assets/report.md
scripts/count-tasks.mjs
data/tasks.json에 전체 입력을 붙이세요. a와 c는 제목이 Read로 같아도 서로 다른 작업이므로 제목을 중복 제거하지 않고 ID로 구분합니다. 잘못 합치는 동작을 드러내기 위한 사례입니다. completed는 따옴표 없는 JSON 불리언이며 마지막 레코드 뒤에 쉼표를 추가하지 마세요.
[
{"id":"a","title":"Read","completed":true},
{"id":"b","title":"Build","completed":false},
{"id":"c","title":"Read","completed":true}
]
2단계: 규격과 보고서 템플릿
references/input-format.md에 다음 규격을 씁니다. 이 실습의 데이터 계약이며 Codex가 모든 JSON에 요구하는 형식은 아닙니다. 필수 필드, 잘못된 입력 처리, 원본 보존 범위를 정의합니다. 우선순위를 추가할 때는 규격, 검사기, 테스트를 함께 수정해 동작이 일치하도록 하세요.
# Task input contract
- Input is a JSON array. An empty array is valid.
- Each record has a nonempty string id, a nonempty string title,
and a boolean completed value.
- IDs are unique. Repeated titles are allowed and remain separate.
- Extra fields may be present; the summary ignores them.
- Invalid input must fail; do not silently drop or repair records.
- Read input only. Do not change, sort or overwrite the source file.
- Report total, active and completed. total = active + completed.
다음으로 assets/report.md를 만듭니다. 고정 필드로 실행을 비교하며 꺾쇠괄호는 측정값이 아닌 입력할 자리입니다. 실행 전 종료 코드와 개수는 미확정 상태로 두세요. 양식이 완성되어 보여도 실행 보고서는 아닙니다. 이전 수치를 새 작업에 가져오지 않도록 완성 보고서와 템플릿을 분리하세요.
# Task summary
Input: <relative input path>
Command: <exact command>
Exit code: <observed exit code>
Total: <observed total>
Active: <observed active>
Completed: <observed completed>
Input preserved: <verification and result>
Not checked: <remaining checks>
3단계: 독립적으로 검증할 검사기
전체 코드를 scripts/count-tasks.mjs에 저장합니다. 인수로 받은 파일만 읽고 전체 입력을 검증한 뒤 집계합니다. JSON 오류, 중복 ID, 필드 타입 오류는 stderr에 이유를 출력하고 종료 코드 1, 성공은 stdout에 JSON만 출력하고 종료 코드 0입니다. scripts 폴더에 있다는 이유로 신뢰하지 말고 먼저 읽으세요.
import { readFileSync } from 'node:fs';
try {
if (process.argv.length !== 3) {
throw new Error('Usage: node count-tasks.mjs <input.json>');
}
const tasks = JSON.parse(readFileSync(process.argv[2], 'utf8'));
if (!Array.isArray(tasks)) throw new Error('Input must be an array');
const ids = new Set();
for (const [index, task] of tasks.entries()) {
if (!task || typeof task !== 'object'
|| typeof task.id !== 'string' || !task.id.trim()
|| typeof task.title !== 'string' || !task.title.trim()
|| typeof task.completed !== 'boolean') {
throw new Error(`Invalid task at index ${index}`);
}
if (ids.has(task.id)) throw new Error(`Duplicate id: ${task.id}`);
ids.add(task.id);
}
const completed = tasks.filter(task => task.completed).length;
const result = { total: tasks.length, active: tasks.length - completed, completed };
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
} catch (error) {
process.stderr.write((error instanceof Error ? error.message : String(error)) + '\n');
process.exitCode = 1;
}
Windows PowerShell, macOS Terminal, Linux 터미널에서 codex-skill-lab 루트로 이동하고 node --version을 확인한 뒤 같은 명령을 실행하세요. data/tasks.json은 스크립트 위치가 아니라 현재 작업 디렉터리를 기준으로 합니다. scripts 안으로 이동해서 그대로 실행하지 마세요. 스킬에도 이 기준을 명시해야 합니다.
node .agents/skills/todo-summary/scripts/count-tasks.mjs data/tasks.json
{
"total": 3,
"active": 1,
"completed": 2
}
숫자는 고정 입력의 예상값이므로 자신의 터미널 출력을 확인하세요. PowerShell은 $LASTEXITCODE, macOS/Linux는 echo $?를 쓰며 다른 명령이 상태를 바꾸기 전에 읽습니다. data/tasks.json을 다시 열어 세 레코드와 순서, completed 값이 그대로인지 확인하세요.
경로 반례: 스크립트는 있지만 입력 위치가 다름
codex-skill-lab에 있는지, 스킬 폴더 안에 별도 data/tasks.json이 없는지 확인한 뒤 아래 첫 두 줄을 하나씩 실행합니다. 스킬 루트로 이동하면 scripts/count-tasks.mjs는 찾지만 data/tasks.json을 잘못된 위치에서 찾으므로 ENOENT, 종료 1, 성공 JSON 없음이 예상됩니다. 종료 코드를 즉시 읽은 다음 마지막 줄로 연습 루트에 돌아와 앞의 전체 명령을 다시 실행하면 3/1/2로 복구됩니다. SKILL.md 링크와 스크립트 입력 인수는 상대 경로의 기준이 다릅니다.
cd .agents/skills/todo-summary
node scripts/count-tasks.mjs data/tasks.json
cd ../../..
4단계: SKILL.md에서 자원 연결
todo-summary/SKILL.md에 전체 내용을 씁니다. 자원 링크는 SKILL.md 기준이고 실행 명령은 실습 루트 기준입니다. 두 기준을 구분하세요. 이전 todo-acceptance는 유지하고 새 이름 todo-summary로 선택한 절차를 구분합니다.
---
name: todo-summary
description: Summarize a local task JSON array with verified counts. Use for task-count reports, not for editing tasks, website styling, or deployment.
---
# Todo summary
1. Confirm the practice root and the exact input path with the user request.
2. Read [the input contract](references/input-format.md).
If any required resource is missing or unreadable, stop and report it.
3. Read [the checker](scripts/count-tasks.mjs) before running it.
4. From the practice root, run:
```sh
node .agents/skills/todo-summary/scripts/count-tasks.mjs data/tasks.json
```
Replace the input argument only if the request names another input file.
5. If the command fails, report the actual error. Do not guess counts or repair input.
6. If it succeeds, use [the report template](assets/report.md) in the reply.
7. Include the actual command, exit code and input-preservation check.
Say which checks were not performed. Do not claim browser testing.
8. Do not edit source data, skill resources, or project code, and do not publish.
Codex는 이름과 설명으로 적합성을 판단하고 선택할 때 전체 지침을 읽습니다. 주 파일에는 안정적인 짧은 절차를 두고 긴 규격과 코드는 직접 연결하면 관리하기 쉽습니다. 매번 모든 자원이 필요하면 분리만으로 사용량이 줄어든다는 보장은 없습니다. 링크가 있다는 사실은 실행 증거가 아닙니다.
5단계: 사용과 결과 검증
실습 루트에서 새 작업을 시작하세요. 데스크톱은 Skills 진입점이나 @, CLI/IDE는 /skills 또는 $로 todo-summary를 선택하고 이름과 파일 위치를 확인합니다. 없다면 루트와 확장자를 점검하고 Codex를 재시작합니다. 다음은 에이전트에게 보내는 요청이며 PowerShell 명령이 아닙니다.
Use the selected todo-summary skill for data/tasks.json.
Read the skill and its linked resources. Run the checker from this practice root.
Return the report in your reply only. Do not write a report file or modify any input.
Include actual output, exit code, and what you verified about input preservation.
규격과 스크립트를 읽었는지, 실제 실행 기록이 있는지, 3/1/2인지, 원본 보존 확인 방법을 설명했는지 검사합니다. 스킬을 사용했다는 말만으로는 부족하며 실행 기록이 없으면 미확인으로 기록하세요. 보고서를 파일로 만들 필요 없이 응답과 직접 실행 결과를 비교하면 됩니다.
입력을 바꾸고 이전 숫자를 재사용하는지 확인
tasks.json은 보존하고 아래 내용을 data/tasks-next.json으로 저장합니다. 연습 루트에서 아래 명령을 실행하면 total 2, active 2, completed 0이 예상됩니다. 새 작업에서 앞의 스킬 요청은 입력 경로만 바꾸고 예상 숫자는 알려주지 않습니다. 새 보고서는 새 경로와 도구 출력을 제시해야 하며 3/1/2를 재사용하면 안 됩니다. 이전 경로로 다시 실행해 3/1/2인지 확인하면 두 입력이 덮어써지지 않았는지도 확인할 수 있습니다.
[
{"id":"next-a","title":"Plan","completed":false},
{"id":"next-b","title":"Check","completed":false}
]
node .agents/skills/todo-summary/scripts/count-tasks.mjs data/tasks-next.json
실패 사례, 복원과 다음 단계
input-format.md를 잠시 input-format.saved.md로 바꿉니다. 그다음 새 작업을 열고 작업 폴더가 codex-skill-lab인지 확인한 뒤 스킬을 명시적으로 선택하세요. 이전에 읽은 규격이나 보고서를 전달하지 않아야 과거 대화 내용이 누락을 가리지 않는 상태에서 관찰할 수 있습니다. 필요한 규격이 없다고 알리고 검증 완료 보고서 작성을 중단해야 하며 대체 규격을 지어내면 안 됩니다. 이름을 복구한 뒤 또 다른 새 작업에서 재검사하세요. 누락 상태에서도 수치를 출력했다면 미검증 표시를 확인하고 스킬 실패 사례로 기록합니다.
스크립트를 못 찾으면 스킬 루트와 작업 루트를 구분하고, 합계 2이면 같은 제목을 합쳤는지, 문자열 completed가 통과하면 실행한 검사기 버전을 확인하세요. 모든 스킬을 재설치하지 말고 원본을 보존한 채 누락 파일, 잘못된 데이터, 경로 오류를 하나씩 수정해 원인을 구분합니다.
이 글의 자료 검증은 Node.js 검사기의 재현 가능한 입출력입니다. 선택, 자동 활성화, 에이전트 준수는 자신의 환경에서 관찰해야 하며 스크립트 성공으로 대체하지 않습니다. 다음 스킬 검증과 수정Skill 선택과 결과 검증형식, 선택, 결과를 나누어 시험하고 맞는 요청과 맞지 않는 요청으로 설명을 개선합니다.전체 글 읽기은 빈 입력, 중복 ID, 타입 오류, 범위 밖 요청을 추가해 코드 정확성과 올바른 사용을 구분합니다. 그림 1은 입력/계약, 2는 실행, 3은 보고서 확인입니다.
Codex 학습 목차로 돌아가기Codex 학습 센터: 전체 튜토리얼 목차설치와 첫 작업부터 MD 지침과 고급 연동까지 60개 강의, 열 개 단원을 계획합니다. 수준, 환경, 목표, 명령으로 다음 글을 찾고 미게시 항목의 상태를 확인할 수 있습니다.전체 글 읽기
자세한 설명 보기
Three numbered stages: identify the starting point, perform the exercise, and verify the result. Original illustration, not a product screenshot.
같은 주제의 글
라이프스타일
Codex 학습 센터: 전체 튜토리얼 목차
설치와 첫 작업부터 MD 지침과 고급 연동까지 60개 강의, 열 개 단원을 계획합니다. 수준, 환경, 목표, 명령으로 다음 글을 찾고 미게시 항목의 상태를 확인할 수 있습니다.
라이프스타일
Worktree와 작업 격리
Worktree는 하나의 Git 저장소에 다른 브랜치의 작업 폴더를 만듭니다. 파일이 분리되어도 DB, 포트와 외부 서비스는 공유될 수 있습니다.
라이프스타일
실습: 작은 웹사이트 만들기
brief.md에서 Small Steps 할 일 사이트를 계획하고 추가·완료·삭제·필터·로컬 저장을 구현합니다. HTML·CSS·데이터 함수·화면 이벤트·시험을 분리하고 Node와 브라우저로 검증한 뒤 재시작·복원 인계 기록을 남깁니다.
라이프스타일
사용량과 효율: 재작업 줄이기
조건, 모델 선택, 시간, 결과를 기록해 불필요한 재시도와 과도한 문맥을 줄입니다.
이 글을 인용한 글
최신 여행 소식·가이드

가이드도쿄
도쿄 어디에 묵을까? 신주쿠·우에노·도쿄역·시부야·아사쿠사·이케부쿠로·긴자 일곱 지역 비교: 공항 교통, 숙박세, 짐 배송까지
도쿄 어디에 묵을까? 신주쿠, 우에노, 도쿄역, 시부야, 아사쿠사, 이케부쿠로, 긴자 일곱 지역을 같은 기준으로 비교한다. 나리타·하네다 공항에서 오는 방법, 교통 노선, 주변의 볼거리, 동네 분위기, 적합한 여행자를 비교표와 야마노테선 안내도로 살펴보고, 2026년 9월에 확인한 도쿄도 숙박세(2027년 4월부터 3%)와 공항 택배로 짐을 보내는 규정도 정리했다.
- 예산
- 호텔

가이드도쿄
도쿄 교통패스 선택법: Suica/Welcome Suica, Tokyo Subway Ticket, JR Pass는 살 만할까?
도쿄를 처음 여행한다면 먼저 1인당 IC 카드 한 장으로 탈 때마다 결제한다(Welcome Suica는 보증금이 없고 28일간 유효). 하루에 지하철을 4번 이상 타면 2,000엔짜리 Tokyo Subway Ticket 72시간권을 추가하고, 간사이에 가지 않고 도쿄만 여행한다면 JR Pass는 반드시 손해다. TOURIST PASMO, iPhone의 Suica, 도쿄 Metro 하루권의 이용 가능·불가 범위를 결정도로 비교한다. 가격은 2026년 9월 확인.
- 교통
- 예산

가이드도쿄
도쿄 디즈니랜드·디즈니씨 가이드: 티켓 가격, 판타지 스프링스 Fantasy Springs, 디즈니 프리미어 액세스 DPA와 스탠바이 패스 이용법, 첫 방문에는 어느 파크가 좋을까
도쿄 디즈니 하루짜리 패스포트는 변동 가격제로, 2026년 9월에는 평일 대부분이 9,900엔, 주말이 10,900엔이다. 공식 홈페이지에서 매일 14:00에 두 달 뒤 같은 날짜의 티켓을 판매한다. 무료 프라이오리티 패스는 공식 서비스 목록에서 빠져 대기 시간을 줄이는 방법은 유료 디즈니 프리미어 액세스(한 사람당 한 번 1,000~3,500엔)뿐이다. 운영 시간, 25주년 행사, 스탠바이 패스, 엔트리 리퀘스트, 판타지 스프링스 이용법, 첫 방문 때 디즈니랜드와 디즈니씨 중 어디를 고를지도 담았다. 2026년 9월 공식 홈페이지에서 확인했다.
- 추천 일정
- 가족 여행