viruagent-cli 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/bin/index.js +26 -0
  2. package/package.json +1 -1
  3. package/skills/persona-blogger/SKILL.md +47 -0
  4. package/skills/persona-influencer-manager/SKILL.md +40 -0
  5. package/skills/persona-sns-marketer/SKILL.md +38 -0
  6. package/skills/recipe-blog-publish/SKILL.md +59 -0
  7. package/skills/recipe-cross-post/SKILL.md +41 -0
  8. package/skills/recipe-daily-engagement/SKILL.md +57 -0
  9. package/skills/recipe-engage-feed/SKILL.md +56 -0
  10. package/skills/recipe-grow-followers/SKILL.md +52 -0
  11. package/skills/va-insta/SKILL.md +64 -0
  12. package/skills/va-insta-comment/SKILL.md +59 -0
  13. package/skills/va-insta-dm/SKILL.md +51 -0
  14. package/skills/va-insta-feed/SKILL.md +72 -0
  15. package/skills/va-insta-follow/SKILL.md +42 -0
  16. package/skills/va-insta-like/SKILL.md +55 -0
  17. package/skills/va-insta-login/SKILL.md +57 -0
  18. package/skills/va-naver/SKILL.md +43 -0
  19. package/skills/va-naver-categories/SKILL.md +25 -0
  20. package/skills/va-naver-draft/SKILL.md +33 -0
  21. package/skills/va-naver-login/SKILL.md +58 -0
  22. package/skills/va-naver-posts/SKILL.md +38 -0
  23. package/skills/va-naver-publish/SKILL.md +97 -0
  24. package/skills/va-shared/SKILL.md +133 -0
  25. package/skills/va-tistory/SKILL.md +42 -0
  26. package/skills/va-tistory-categories/SKILL.md +37 -0
  27. package/skills/va-tistory-draft/SKILL.md +31 -0
  28. package/skills/va-tistory-login/SKILL.md +54 -0
  29. package/skills/va-tistory-posts/SKILL.md +38 -0
  30. package/skills/va-tistory-publish/SKILL.md +90 -0
  31. package/src/providers/insta/apiClient.js +38 -0
  32. package/src/providers/insta/index.js +223 -4
  33. package/src/runner.js +47 -16
  34. package/skills/viruagent-insta.md +0 -163
  35. package/skills/viruagent-naver.md +0 -122
  36. package/skills/viruagent-tistory.md +0 -117
  37. package/skills/viruagent.md +0 -77
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: va-insta-follow
3
+ version: 1.0.0
4
+ description: "Instagram: 사용자 팔로우/언팔로우"
5
+ metadata:
6
+ category: "command"
7
+ provider: "insta"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli follow --help"
11
+ ---
12
+
13
+ # va-insta-follow — 팔로우/언팔로우
14
+
15
+ ## 팔로우
16
+
17
+ ```bash
18
+ npx viruagent-cli follow --provider insta --username <username>
19
+ ```
20
+
21
+ ## 언팔로우
22
+
23
+ ```bash
24
+ npx viruagent-cli unfollow --provider insta --username <username>
25
+ ```
26
+
27
+ ## Rate Limit
28
+
29
+ | 액션 | 딜레이 | 시간당 | 일일 |
30
+ |------|--------|--------|------|
31
+ | Follow | 1~2min | 15 | 250 |
32
+ | Unfollow | 1~2min | 10 | 200 |
33
+
34
+ ## 워크플로우: 팔로우 + 인게이지먼트
35
+
36
+ 1. `follow --provider insta --username <user>`
37
+ 2. `list-posts --provider insta --username <user> --limit 20`
38
+ 3. 각 게시물에 좋아요 + 댓글 (va-insta-like, va-insta-comment 참조)
39
+
40
+ ## See Also
41
+
42
+ va-insta, va-insta-like, va-insta-comment
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: va-insta-like
3
+ version: 1.0.0
4
+ description: "Instagram: 게시물 좋아요/좋아요 취소, 댓글 좋아요"
5
+ metadata:
6
+ category: "command"
7
+ provider: "insta"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli like --help"
11
+ ---
12
+
13
+ # va-insta-like — 좋아요
14
+
15
+ ## 게시물 좋아요
16
+
17
+ ```bash
18
+ npx viruagent-cli like --provider insta --post-id <shortcode>
19
+ ```
20
+
21
+ ## 게시물 좋아요 취소
22
+
23
+ ```bash
24
+ npx viruagent-cli unlike --provider insta --post-id <shortcode>
25
+ ```
26
+
27
+ ## 댓글 좋아요
28
+
29
+ ```bash
30
+ npx viruagent-cli like-comment --provider insta --comment-id <id>
31
+ ```
32
+
33
+ ## 댓글 좋아요 취소
34
+
35
+ ```bash
36
+ npx viruagent-cli unlike-comment --provider insta --comment-id <id>
37
+ ```
38
+
39
+ ## Rate Limit
40
+
41
+ | 액션 | 딜레이 | 시간당 | 일일 |
42
+ |------|--------|--------|------|
43
+ | Like | 20~40s | 15 | 500 |
44
+
45
+ 딜레이는 자동 랜덤 적용.
46
+
47
+ ## 워크플로우: 사용자 게시물 모두 좋아요
48
+
49
+ 1. `list-posts --provider insta --username <user> --limit 20`
50
+ 2. 각 게시물: `like --provider insta --post-id <shortcode>`
51
+ 3. 레이트리밋 딜레이 자동 적용 (20~40초)
52
+
53
+ ## See Also
54
+
55
+ va-insta, va-insta-comment, va-insta-feed
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: va-insta-login
3
+ version: 1.0.0
4
+ description: "Instagram: 로그인 및 챌린지(본인 인증) 해결"
5
+ metadata:
6
+ category: "command"
7
+ provider: "insta"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli login --help"
11
+ ---
12
+
13
+ # va-insta-login — Instagram 로그인
14
+
15
+ ## 인증 상태 확인
16
+
17
+ ```bash
18
+ npx viruagent-cli status --provider insta
19
+ ```
20
+
21
+ ## 로그인
22
+
23
+ ```bash
24
+ npx viruagent-cli login --provider insta --username <user> --password <pass>
25
+ ```
26
+
27
+ ### 옵션
28
+
29
+ | 플래그 | 설명 | 기본값 |
30
+ |--------|------|--------|
31
+ | `--username` | 인스타그램 아이디 | - |
32
+ | `--password` | 인스타그램 비밀번호 | - |
33
+
34
+ ### 환경변수
35
+
36
+ `INSTA_USERNAME` / `INSTA_PASSWORD` 설정 시 자동 사용.
37
+
38
+ ## 챌린지 해결
39
+
40
+ 로그인 시 `challenge` 에러 (302 redirect to /challenge/) 발생 시:
41
+
42
+ ```bash
43
+ npx viruagent-cli resolve-challenge --provider insta
44
+ ```
45
+
46
+ 브라우저에서 본인 인증이 필요할 수 있습니다.
47
+
48
+ ## 에러 처리
49
+
50
+ | 에러 | 조치 |
51
+ |------|------|
52
+ | `challenge` | `resolve-challenge` 실행 또는 브라우저 인증 |
53
+ | `SESSION_EXPIRED` | `login` 재실행 |
54
+
55
+ ## See Also
56
+
57
+ va-insta, va-shared
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: va-naver
3
+ version: 1.0.0
4
+ description: "Naver 블로그: 명령 개요 및 플랫폼 특화 규칙"
5
+ metadata:
6
+ category: "overview"
7
+ provider: "naver"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ ---
11
+
12
+ # va-naver — Naver 블로그 개요
13
+
14
+ Naver 블로그 퍼블리싱을 위한 viruagent-cli 가이드. 항상 `--provider naver` 사용.
15
+
16
+ ## 명령 목록
17
+
18
+ | 명령 | 스킬 | 설명 |
19
+ |------|------|------|
20
+ | login | va-naver-login | 네이버 로그인 (manual 모드 포함) |
21
+ | publish | va-naver-publish | 글 발행 |
22
+ | save-draft | va-naver-draft | 임시저장 (private 포스트) |
23
+ | list-categories | va-naver-categories | 카테고리 조회 |
24
+ | list-posts, read-post | va-naver-posts | 글 목록/읽기 |
25
+
26
+ ## Naver HTML 규칙
27
+
28
+ Naver SE Editor는 `data-ke-*` 속성을 무시합니다:
29
+ - 본문: 일반 `<p>` 태그 사용
30
+ - 여백: `<p>&nbsp;</p>`
31
+ - 인용: 일반 `<blockquote>` — 서버에서 자동 변환
32
+ - HTML → SE Editor 컴포넌트 서버 자동 변환
33
+
34
+ ## 환경변수
35
+
36
+ ```
37
+ NAVER_USERNAME=
38
+ NAVER_PASSWORD=
39
+ ```
40
+
41
+ ## See Also
42
+
43
+ va-shared, va-naver-login, va-naver-publish, va-naver-draft, va-naver-categories, va-naver-posts
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: va-naver-categories
3
+ version: 1.0.0
4
+ description: "Naver: 블로그 카테고리 목록 조회"
5
+ metadata:
6
+ category: "command"
7
+ provider: "naver"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli list-categories --help"
11
+ ---
12
+
13
+ # va-naver-categories — 카테고리 조회
14
+
15
+ ## 사용법
16
+
17
+ ```bash
18
+ npx viruagent-cli list-categories --provider naver
19
+ ```
20
+
21
+ 카테고리가 지정되지 않은 경우, 사용자에게 어떤 카테고리를 사용할지 질문.
22
+
23
+ ## See Also
24
+
25
+ va-naver, va-naver-publish
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: va-naver-draft
3
+ version: 1.0.0
4
+ description: "Naver: 블로그 글 임시저장 (private 포스트로 저장)"
5
+ metadata:
6
+ category: "command"
7
+ provider: "naver"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli save-draft --help"
11
+ ---
12
+
13
+ # va-naver-draft — Naver 임시저장
14
+
15
+ ## 사용법
16
+
17
+ ```bash
18
+ npx viruagent-cli save-draft \
19
+ --provider naver \
20
+ --title "Draft Title" \
21
+ --content "<h2>...</h2><p>...</p>" \
22
+ --category <id> \
23
+ --tags "tag1,tag2,tag3,tag4,tag5" \
24
+ --related-image-keywords "keyword1,keyword2"
25
+ ```
26
+
27
+ `publish` 대신 `save-draft` 사용. 옵션은 동일.
28
+
29
+ **참고**: Naver는 실제 임시저장 API가 없습니다. `save-draft`는 `--visibility private`로 비공개 글을 생성합니다.
30
+
31
+ ## See Also
32
+
33
+ va-naver-publish, va-naver, va-shared
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: va-naver-login
3
+ version: 1.0.0
4
+ description: "Naver: 네이버 계정 로그인 (manual 브라우저 모드 지원)"
5
+ metadata:
6
+ category: "command"
7
+ provider: "naver"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli login --help"
11
+ ---
12
+
13
+ # va-naver-login — Naver 로그인
14
+
15
+ ## 인증 상태 확인
16
+
17
+ ```bash
18
+ npx viruagent-cli status --provider naver
19
+ ```
20
+
21
+ ## 자동 로그인
22
+
23
+ ```bash
24
+ npx viruagent-cli login --provider naver --username <naver_id> --password <pass>
25
+ ```
26
+
27
+ ## 수동 로그인 (브라우저)
28
+
29
+ ```bash
30
+ npx viruagent-cli login --provider naver --manual
31
+ ```
32
+
33
+ ### 옵션
34
+
35
+ | 플래그 | 설명 | 기본값 |
36
+ |--------|------|--------|
37
+ | `--username` | 네이버 아이디 | - |
38
+ | `--password` | 네이버 비밀번호 | - |
39
+ | `--manual` | 수동 로그인 모드 | false |
40
+ | `--headless` | 헤드리스 모드 | false |
41
+
42
+ ### 봇 감지 대응
43
+
44
+ 네이버는 봇 감지가 강력합니다. 자동 로그인 실패 시 `--manual` 모드로 브라우저에서 직접 로그인하세요.
45
+
46
+ ### 환경변수
47
+
48
+ `NAVER_USERNAME` / `NAVER_PASSWORD` 설정 시 자동 사용.
49
+
50
+ ## 로그아웃
51
+
52
+ ```bash
53
+ npx viruagent-cli logout --provider naver
54
+ ```
55
+
56
+ ## See Also
57
+
58
+ va-naver, va-shared
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: va-naver-posts
3
+ version: 1.0.0
4
+ description: "Naver: 글 목록 조회 및 개별 글 읽기"
5
+ metadata:
6
+ category: "command"
7
+ provider: "naver"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli list-posts --help"
11
+ ---
12
+
13
+ # va-naver-posts — 글 목록 & 읽기
14
+
15
+ ## 글 목록
16
+
17
+ ```bash
18
+ npx viruagent-cli list-posts --provider naver --limit 10
19
+ ```
20
+
21
+ | 플래그 | 설명 | 기본값 |
22
+ |--------|------|--------|
23
+ | `--limit` | 조회할 글 수 | 20 |
24
+
25
+ ## 글 읽기
26
+
27
+ ```bash
28
+ npx viruagent-cli read-post --provider naver --post-id <id>
29
+ ```
30
+
31
+ | 플래그 | 설명 |
32
+ |--------|------|
33
+ | `--post-id` | 글 ID |
34
+ | `--include-draft` | 임시저장 포함 |
35
+
36
+ ## See Also
37
+
38
+ va-naver, va-shared
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: va-naver-publish
3
+ version: 1.0.0
4
+ description: "Naver: 블로그 글 발행 (plain HTML + SE Editor 변환)"
5
+ metadata:
6
+ category: "command"
7
+ provider: "naver"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli publish --help"
11
+ ---
12
+
13
+ # va-naver-publish — Naver 글 발행
14
+
15
+ ## 사용법
16
+
17
+ ```bash
18
+ npx viruagent-cli publish \
19
+ --provider naver \
20
+ --title "Post Title" \
21
+ --content "<h2>...</h2><p>...</p>" \
22
+ --category <id> \
23
+ --tags "tag1,tag2,tag3,tag4,tag5" \
24
+ --visibility public \
25
+ --related-image-keywords "keyword1,keyword2" \
26
+ --image-upload-limit 1 \
27
+ --minimum-image-count 1
28
+ ```
29
+
30
+ ### 옵션
31
+
32
+ | 플래그 | 설명 | 기본값 |
33
+ |--------|------|--------|
34
+ | `--title` | 글 제목 | (필수) |
35
+ | `--content` | HTML 콘텐츠 | - |
36
+ | `--content-file` | HTML 파일 경로 (절대) | - |
37
+ | `--category` | 카테고리 ID | - |
38
+ | `--tags` | 쉼표 구분 태그 (5개) | - |
39
+ | `--visibility` | public / private | public |
40
+ | `--related-image-keywords` | 이미지 검색 키워드 (영어) | - |
41
+ | `--image-upload-limit` | 최대 이미지 수 | 1 |
42
+ | `--minimum-image-count` | 최소 이미지 수 | 1 |
43
+ | `--dry-run` | 파라미터만 검증 | false |
44
+
45
+ ## HTML 템플릿
46
+
47
+ ```html
48
+ <!-- 1. Hook -->
49
+ <blockquote>[한 문장 임팩트]</blockquote>
50
+ <p>&nbsp;</p>
51
+
52
+ <!-- 2. 서론 (2~3단락) -->
53
+ <p>[맥락과 공감, 3~5문장]</p>
54
+ <p>[이 글에서 다룰 내용]</p>
55
+ <p>&nbsp;</p>
56
+
57
+ <!-- 3. 본문 (3~4 섹션) -->
58
+ <h2>[섹션 제목]</h2>
59
+ <p>[3~5문장, 근거 포함]</p>
60
+ <p>[분석과 시사점]</p>
61
+ <p>&nbsp;</p>
62
+
63
+ <!-- 4. 핵심 정리 -->
64
+ <h2>핵심 정리</h2>
65
+ <ul>
66
+ <li>[핵심 1]</li>
67
+ <li>[핵심 2]</li>
68
+ <li>[핵심 3]</li>
69
+ </ul>
70
+ <p>&nbsp;</p>
71
+
72
+ <!-- 5. 마무리 -->
73
+ <p>[구체적 실행 제안]</p>
74
+ ```
75
+
76
+ ### Naver 전용 규칙
77
+
78
+ - 일반 `<p>` 태그 사용 — `data-ke-*` 속성 사용 금지
79
+ - `<p>&nbsp;</p>`로 여백 처리
80
+ - 일반 `<blockquote>` 사용 — Naver가 인용 컴포넌트로 자동 변환
81
+ - HTML은 SE Editor 컴포넌트로 서버에서 자동 변환
82
+
83
+ ## 이미지 규칙
84
+
85
+ - `--related-image-keywords`에 영어 키워드 2~3개 항상 포함
86
+ - `--image-upload-limit 1`, `--minimum-image-count 1` 설정
87
+ - `--no-auto-upload-images`는 사용자 명시 요청 시만
88
+
89
+ ## 발행 후 검증
90
+
91
+ ```bash
92
+ npx viruagent-cli list-posts --provider naver --limit 1
93
+ ```
94
+
95
+ ## See Also
96
+
97
+ va-naver, va-naver-draft, va-shared
@@ -0,0 +1,133 @@
1
+ ---
2
+ name: viruagent
3
+ version: 1.0.0
4
+ description: "viruagent-cli — 블로그/SNS 자동화 에이전트. 플랫폼 라우팅, 글쓰기 규칙, 에러 처리."
5
+ triggers:
6
+ - viruagent
7
+ - 블로그
8
+ - blog
9
+ - 인스타
10
+ - instagram
11
+ - 티스토리
12
+ - 네이버
13
+ - 좋아요
14
+ - 댓글
15
+ - 팔로우
16
+ metadata:
17
+ category: "router"
18
+ requires:
19
+ bins: ["viruagent-cli"]
20
+ ---
21
+
22
+ # viruagent — 블로그/SNS 자동화 에이전트
23
+
24
+ viruagent-cli를 사용하는 블로그/SNS 자동화 에이전트입니다.
25
+ 사용자 요청에 따라 적절한 스킬 파일을 읽고 실행합니다.
26
+
27
+ ## Platform Router
28
+
29
+ | 트리거 | 스킬 파일 |
30
+ |--------|-----------|
31
+ | 티스토리, tistory | `va-tistory/SKILL.md` |
32
+ | 네이버, naver | `va-naver/SKILL.md` |
33
+ | 인스타, instagram, 좋아요, 댓글, 팔로우 | `va-insta/SKILL.md` |
34
+ | 블로그 써줘 (플랫폼 미지정) | 사용자에게 플랫폼 질문 |
35
+ | 블로거 역할 | `persona-blogger/SKILL.md` |
36
+ | 인플루언서 관리 | `persona-influencer-manager/SKILL.md` |
37
+ | SNS 마케팅 | `persona-sns-marketer/SKILL.md` |
38
+
39
+ ## 스킬 파일 위치
40
+
41
+ 모든 하위 스킬은 viruagent-cli 패키지 내 `skills/` 디렉토리에 있습니다:
42
+
43
+ ```
44
+ SKILLS_DIR: <viruagent-cli 설치 경로>/skills/
45
+ ```
46
+
47
+ 사용자의 요청을 분석한 뒤, 해당 스킬 파일을 Read 도구로 읽어서 지침을 따르세요.
48
+
49
+ ### 단일 명령 스킬
50
+
51
+ | 스킬 | 파일 | 설명 |
52
+ |------|------|------|
53
+ | va-tistory | `va-tistory/SKILL.md` | Tistory 개요 |
54
+ | va-tistory-login | `va-tistory-login/SKILL.md` | 로그인 (2FA) |
55
+ | va-tistory-publish | `va-tistory-publish/SKILL.md` | 글 발행 |
56
+ | va-tistory-draft | `va-tistory-draft/SKILL.md` | 임시저장 |
57
+ | va-tistory-categories | `va-tistory-categories/SKILL.md` | 카테고리 조회 |
58
+ | va-tistory-posts | `va-tistory-posts/SKILL.md` | 글 목록/읽기 |
59
+ | va-naver | `va-naver/SKILL.md` | Naver 개요 |
60
+ | va-naver-login | `va-naver-login/SKILL.md` | 로그인 (manual) |
61
+ | va-naver-publish | `va-naver-publish/SKILL.md` | 글 발행 |
62
+ | va-naver-draft | `va-naver-draft/SKILL.md` | 임시저장 |
63
+ | va-naver-categories | `va-naver-categories/SKILL.md` | 카테고리 조회 |
64
+ | va-naver-posts | `va-naver-posts/SKILL.md` | 글 목록/읽기 |
65
+ | va-insta | `va-insta/SKILL.md` | Instagram 개요 + 레이트리밋 |
66
+ | va-insta-login | `va-insta-login/SKILL.md` | 로그인 + 챌린지 |
67
+ | va-insta-like | `va-insta-like/SKILL.md` | 좋아요 |
68
+ | va-insta-comment | `va-insta-comment/SKILL.md` | 댓글 |
69
+ | va-insta-follow | `va-insta-follow/SKILL.md` | 팔로우/언팔 |
70
+ | va-insta-dm | `va-insta-dm/SKILL.md` | DM |
71
+ | va-insta-feed | `va-insta-feed/SKILL.md` | 피드/프로필/분석 |
72
+
73
+ ### 페르소나 스킬
74
+
75
+ | 스킬 | 파일 | 설명 |
76
+ |------|------|------|
77
+ | persona-blogger | `persona-blogger/SKILL.md` | 블로거 역할 |
78
+ | persona-influencer-manager | `persona-influencer-manager/SKILL.md` | 인플루언서 매니저 |
79
+ | persona-sns-marketer | `persona-sns-marketer/SKILL.md` | SNS 마케터 |
80
+
81
+ ### 레시피 스킬
82
+
83
+ | 스킬 | 파일 | 설명 |
84
+ |------|------|------|
85
+ | recipe-blog-publish | `recipe-blog-publish/SKILL.md` | 블로그 발행 워크플로우 |
86
+ | recipe-cross-post | `recipe-cross-post/SKILL.md` | 블로그 → 인스타 홍보 |
87
+ | recipe-engage-feed | `recipe-engage-feed/SKILL.md` | 피드 인게이지먼트 |
88
+ | recipe-daily-engagement | `recipe-daily-engagement/SKILL.md` | 일일 루틴 |
89
+ | recipe-grow-followers | `recipe-grow-followers/SKILL.md` | 팔로워 성장 |
90
+
91
+ ## Quick Reference
92
+
93
+ ```bash
94
+ npx viruagent-cli list-providers
95
+ npx viruagent-cli --spec
96
+ npx viruagent-cli --spec <command>
97
+ ```
98
+
99
+ 모든 응답은 JSON: `{ "ok": true, "data": {...} }` 성공, `{ "ok": false, "error": "...", "message": "...", "hint": "..." }` 실패.
100
+
101
+ ## 글쓰기 규칙 (블로그 공통)
102
+
103
+ - **제목**: 핵심 키워드 포함. 10~20자. 짧고 임팩트 있게.
104
+ - **분량**: 3000~4000자. 깊이 있게, 양 채우기 아닌 실질 내용.
105
+ - **단락**: 3~5문장씩. 1~2문장 단락 반복 금지.
106
+ - **서론**: 2~3개 단락으로 맥락과 독자 공감 형성.
107
+ - **본문 섹션**: 각 h2 섹션에 2~3개 실질 단락. 바로 목록 나열 금지.
108
+ - **목록**: 3개 이상 구체적 항목일 때만 사용.
109
+ - **근거**: 본문 섹션마다 전문가 인용, 데이터, 실제 사례 중 하나 포함.
110
+ - **관점 전환**: 독자 생각을 리프레이밍하는 포인트 최소 1곳.
111
+ - **전환**: 섹션 간 브릿지 문장으로 연결.
112
+ - **강조**: `<strong>`으로 핵심 용어 (섹션당 2~3개 max).
113
+ - **소제목**: `<h2>` 사용. `<h3>` 사용 금지.
114
+ - **톤**: 대화체이되 실질적 내용.
115
+ - **마무리**: 구체적이고 실행 가능한 제안으로 끝.
116
+ - **SEO**: 제목, 첫 단락, h2 최소 1곳에 핵심 키워드 배치.
117
+ - **태그**: 정확히 5개, 쉼표 구분, 글 언어와 일치.
118
+
119
+ ## 공통 에러 처리
120
+
121
+ | 에러 | 조치 |
122
+ |------|------|
123
+ | `NOT_LOGGED_IN` / `SESSION_EXPIRED` | `login` 재실행 |
124
+ | `MISSING_CONTENT` | `--content` 또는 `--content-file` 확인 |
125
+ | `PROVIDER_NOT_FOUND` | `list-providers`로 확인 |
126
+ | `INVALID_POST_ID` | `list-posts`로 ID 확인 |
127
+
128
+ ## 중요 사항
129
+
130
+ - 실제 발행 전 `--dry-run`으로 파라미터 검증
131
+ - 콘텐츠는 유효한 HTML이어야 함
132
+ - 기본 프로바이더는 `tistory`
133
+ - `--content-file`은 절대 경로 사용
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: va-tistory
3
+ version: 1.0.0
4
+ description: "Tistory 블로그: 명령 개요 및 플랫폼 특화 규칙"
5
+ metadata:
6
+ category: "overview"
7
+ provider: "tistory"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ ---
11
+
12
+ # va-tistory — Tistory 블로그 개요
13
+
14
+ Tistory 블로그 퍼블리싱을 위한 viruagent-cli 가이드. 항상 `--provider tistory` 사용.
15
+
16
+ ## 명령 목록
17
+
18
+ | 명령 | 스킬 | 설명 |
19
+ |------|------|------|
20
+ | login | va-tistory-login | 카카오 로그인 (2FA 포함) |
21
+ | publish | va-tistory-publish | 글 발행 |
22
+ | save-draft | va-tistory-draft | 임시저장 |
23
+ | list-categories | va-tistory-categories | 카테고리 조회 |
24
+ | list-posts, read-post | va-tistory-posts | 글 목록/읽기 |
25
+
26
+ ## Tistory HTML 규칙
27
+
28
+ Tistory는 `data-ke-*` 속성을 사용합니다:
29
+ - 본문: `<p data-ke-size="size18">`
30
+ - 여백: `<p data-ke-size="size16">&nbsp;</p>`
31
+ - 인용: `<blockquote data-ke-style="style2">`
32
+
33
+ ## 환경변수
34
+
35
+ ```
36
+ TISTORY_USERNAME=
37
+ TISTORY_PASSWORD=
38
+ ```
39
+
40
+ ## See Also
41
+
42
+ va-shared, va-tistory-login, va-tistory-publish, va-tistory-draft, va-tistory-categories, va-tistory-posts
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: va-tistory-categories
3
+ version: 1.0.0
4
+ description: "Tistory: 블로그 카테고리 목록 조회"
5
+ metadata:
6
+ category: "command"
7
+ provider: "tistory"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli list-categories --help"
11
+ ---
12
+
13
+ # va-tistory-categories — 카테고리 조회
14
+
15
+ ## 사용법
16
+
17
+ ```bash
18
+ npx viruagent-cli list-categories --provider tistory
19
+ ```
20
+
21
+ 카테고리가 지정되지 않은 경우, 사용자에게 어떤 카테고리를 사용할지 질문.
22
+
23
+ ## 응답 예시
24
+
25
+ ```json
26
+ {
27
+ "ok": true,
28
+ "data": [
29
+ { "id": "123", "name": "개발" },
30
+ { "id": "456", "name": "일상" }
31
+ ]
32
+ }
33
+ ```
34
+
35
+ ## See Also
36
+
37
+ va-tistory, va-tistory-publish
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: va-tistory-draft
3
+ version: 1.0.0
4
+ description: "Tistory: 블로그 글 임시저장"
5
+ metadata:
6
+ category: "command"
7
+ provider: "tistory"
8
+ requires:
9
+ bins: ["viruagent-cli"]
10
+ cliHelp: "viruagent-cli save-draft --help"
11
+ ---
12
+
13
+ # va-tistory-draft — Tistory 임시저장
14
+
15
+ ## 사용법
16
+
17
+ ```bash
18
+ npx viruagent-cli save-draft \
19
+ --provider tistory \
20
+ --title "Draft Title" \
21
+ --content "<h2>...</h2><p>...</p>" \
22
+ --category <id> \
23
+ --tags "tag1,tag2,tag3,tag4,tag5" \
24
+ --related-image-keywords "keyword1,keyword2"
25
+ ```
26
+
27
+ `publish` 대신 `save-draft` 사용. 옵션은 동일.
28
+
29
+ ## See Also
30
+
31
+ va-tistory-publish, va-tistory, va-shared