| name | tally-form |
| description | Build a Tally questionnaire/survey form from a checklist markdown โ parse the md, run a copy-voice + humanize pass, build blocks with theme presets, section dividers, paragraph-split intros, per-question choices with required + checkbox (multi-select), short-answer inputs (text/number/email/phone/link), native scheduling (matrix grid, date, time), and form images (logo/cover/inline, URL-hosted) plus redirect-on-completion, then create or idempotently publish via the Tally API and return the share URL. Reusable per project or client. Use when the user wants to '์ค๋ฌธ ํผ ๋ง๋ค์ด', 'Tally ํผ ๋ง๋ค์ด', 'questionnaire', '์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ํผ์ผ๋ก', '์๋ด ์ ์ฒญ ํผ', '์ผ์ ์กฐ์จ ์ค๋ฌธ', 'ํผ์ ๋ก๊ณ /์ด๋ฏธ์ง', 'ํ์/๋ณต์์ ํ/๋จ๋ต ๋ฌธํญ', 'dev survey form', or 'lecture consultation form'. |
| argument-hint | --md <checklist.md> [--update <formId>] [--theme neutral|hermes|none|<styles.json>] [--no-dividers] [--no-humanize] |
| allowed-tools | Bash(uv run *) Bash(curl *) Read AskUserQuestion |
Tally Form
์ฒดํฌ๋ฆฌ์คํธ markdown ์ Tally ์ค๋ฌธ ํผ์ผ๋ก ๋น๋ํด ์์ฑ/๊ฒ์ํ๊ณ ๊ณต์ URL ์ ๋๋ ค์ค๋ค. ๊ฐ๋ฐ ์ธํ
์ดํฌยท๊ฐ์ ์๋ด ๋ฑ ๋งค ํ๋ก์ ํธ/ํด๋ผ์ด์ธํธ๋ง๋ค ์ฌ์ฌ์ฉ. ๊ฒฐ์ ์ ยท๋ฌด์์กด์ฑ(stdlib-only urllib)ยทidempotent ๋น๋๋ค.
- ๊ฒ์ฆ๋ ๋ธ๋กยทํ
๋งยท๊ฒ์ ๊ท์น + Matrix/DIVIDER/INPUT_*/CHECKBOXยท๋ฌธํญ๋ณ๋ณด๊ธฐ/ํ์/๋จ๋ต ์คํค๋ง:
references/tally-blocks.md
- ์ ๋ค๋ฆญ ์นดํผ ํค:
references/form-copy-style.md
- ๋๋ฉ์ธ ๋ณด์ด์ค ํ๋ฆฌ์
:
references/preset-dev-survey.md, references/preset-lecture-consultation.md
- ํ
ํ๋ฆฟ ๋ ํผ๋ฐ์ค ์ธ๋ฑ์ค:
references/tally-templates.md
- ๋ฐ๋ก ๋น๋ ๊ฐ๋ฅํ ์์ md:
assets/example-{dev-survey,lecture-consultation,matrix-schedule,with-images,intake}.md
์ํฌํ๋ก์ฐ
- ์
๋ ฅ ํ์ธ โ
--md <checklist.md>(๊ธฐ๋ณธ) ๋๋ --json <spec.json>. ๊ธฐ์กด ํผ ๊ฐฑ์ ์ด๋ฉด --update <formId> ๋๋ frontmatter form_id. ์ ํผ์ด๋ฉด ๋๋ฉ์ธ์ ๋ง๋ ํ๋ฆฌ์
(preset-*.md)์ผ๋ก ๋ณด์ด์คยท์ต์
ยท์น์
๊ณจ๊ฒฉ์ ์ก๊ณ , ํ์ํ๋ฉด assets/example-*.md ๋ฅผ ๋ณต์ฌยทํธ์งํด ์์ํ๋ค.
- ์นดํผ ๋ณด์ด์ค + humanize ํจ์ค (md ์์ฑยท์์ ์) โ
references/form-copy-style.md ์ ์ฉ ํ, ๊ธฐ๋ณธ์ ์ผ๋ก ํ๊ธ ์นดํผ๋ฅผ /humanize-korean:humanize-korean(fast)์ ์ค๋ฌธ ์์. ์์ธ ๋ผ์ฐํ
์ ์๋ "humanize ๊ธฐ๋ณธ ๋ผ์ฐํ
".
- ๋น๋ + ๋ฏธ๋ฆฌ๋ณด๊ธฐ โ
--dry-run ์ผ๋ก ๋ธ๋ก ์ ๋จผ์ ํ์ธ(ํ์ฑ ๊ฒ์ฆ). ์ถ๋ ฅ built payload: N blocks (...) ์ ๋ถํด ํญ๋ชฉ ํฉ = N ์ด์ด์ผ ํ๋ค(references/tally-blocks.md ์นด์ดํธ ๊ณต์๊ณผ ์ผ์น).
- ์์ฑ/๊ฒ์ โ ํค๊ฐ ์์ผ๋ฉด
--update ์์ ๋ POST ์์ฑ, ์์ผ๋ฉด PATCH ๊ฒ์(๊ณต์ URL ์ ์ง).
- ๊ฒฐ๊ณผ ๋ฐํ โ EDIT/SHARE URL ์ถ๋ ฅ. ๊ฒ์ ํ
GET /forms/{id} ๋ก status=PUBLISHEDยทhasDraftBlocks=false ํ์ธ ๊ถ์ฅ.
์คํ
uv run <script> โ Claude Code ๋ ${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py(์ค์นยท๊ฐ๋ฐ ์ด๋ cwd ์์๋ ๋์). Codex 0.135 ๋ CLAUDE_PLUGIN_ROOT ๋ฅผ export ํ์ง ์๊ณ ํ๋ฌ๊ทธ์ธ์ ์บ์ ํธ๋ฆฌ(~/.codex/plugins/cache/<marketplace>/tally-form/<version>/)๋ก ๋ก๋ํ๋ฏ๋ก โ ๋ณ๋ ~/.agents/skills/tally-form ์ค์น๋ ๋ง๋ค์ด์ง์ง ์๋๋ค โ ์๋ resolver ๋ธ๋ก์ผ๋ก ์ค์ ์คํฌ๋ฆฝํธ ๊ฒฝ๋ก๋ฅผ ๋จผ์ ์ฐพ์ ๋ค uv run "$TALLY_SCRIPT" ํ๋ค(์ต์ข
์คํ์ ์ฌ์ ํ uv run). Hermes ๋ plugin/skill-level install ๊ฒฝ๋ก๋ฅผ additive ๋ก ํ์(unverified). stdlib-only ๋ผ uv run ์ด ์ํ๋ฉ๋ ํ๊ฒฝ์ผ๋ก ๊ทธ๋๋ก ์คํ.
uv run "${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py" --md <checklist.md> --dry-run
uv run "${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py" --md <checklist.md>
uv run "${CLAUDE_PLUGIN_ROOT}/skills/tally-form/scripts/build_tally_form.py" --md <checklist.md> --update <formId>
S="skills/tally-form/scripts/build_tally_form.py"
TALLY_SCRIPT=""
[ -n "${CLAUDE_PLUGIN_ROOT:-}" ] && [ -f "$CLAUDE_PLUGIN_ROOT/$S" ] && TALLY_SCRIPT="$CLAUDE_PLUGIN_ROOT/$S"
[ -z "$TALLY_SCRIPT" ] && [ -f "plugins/tally-form/$S" ] && TALLY_SCRIPT="plugins/tally-form/$S"
if [ -z "$TALLY_SCRIPT" ]; then
cache_root="${CODEX_PLUGIN_CACHE:-$HOME/.codex/plugins/cache}"
while IFS= read -r d; do
[ -f "$d/$S" ] && { TALLY_SCRIPT="$d/$S"; break; }
done < <(ls -1d "$cache_root"/*/tally-form/*/ 2>/dev/null | awk -F/ '{print $(NF-1)"\t"$0}' | sort -t. -k1,1rn -k2,2rn -k3,3rn | cut -f2- | sed 's#/$##')
fi
[ -z "$TALLY_SCRIPT" ] && [ -n "${HERMES_HOME:-}" ] && [ -f "$HERMES_HOME/plugins/tally-form/$S" ] && TALLY_SCRIPT="$HERMES_HOME/plugins/tally-form/$S"
[ -z "$TALLY_SCRIPT" ] && [ -n "${HERMES_HOME:-}" ] && [ -f "$HERMES_HOME/$S" ] && TALLY_SCRIPT="$HERMES_HOME/$S"
[ -n "$TALLY_SCRIPT" ] || { echo "tally-form: build script not resolved" >&2; exit 1; }
uv run "$TALLY_SCRIPT" --md <checklist.md> --dry-run
--theme neutral(๊ธฐ๋ณธ) | hermes | none(Tally ๊ธฐ๋ณธ ํ
๋ง) | <styles.json>(์ปค์คํ
settings.styles).
--dividers/--no-dividers โ ์น์
์ฌ์ด ๊ตฌ๋ถ์ (๊ธฐ๋ณธ on). --no-humanize โ humanize ํจ์ค skip(์๋ ์ฐธ์กฐ).
--out <path> โ payload ์ฌ์ด๋์นด ์์น(๊ธฐ๋ณธ: ์
๋ ฅ ์ <name>_tally_payload.json).
ํ๋ฆฌ์
/ ํ
๋ง
- ํ
๋ง ํ๋ฆฌ์
โ
neutral(๊ธฐ๋ณธ, ํด๋ฆฐ ๋ชจ๋
ธํฌ๋กฌ) / hermes(์ ์คํํ์ดํธ ๋ธ๋๋). ์ปค์คํ
์ <styles.json>.
- ๋๋ฉ์ธ ํ๋ฆฌ์
โ ์ ํผ์ ๋ณด์ด์คยท๊ธฐ๋ณธ ์ต์
ยท์น์
๊ณจ๊ฒฉ:
preset-dev-survey.md(๊ฐ๋ฐ/ํ๋ก์ ํธ ์ธํ
์ดํฌ), preset-lecture-consultation.md(๊ฐ์/์ฝ์นญ ์๋ด). ํ๋ฆฌ์
๋ง์ผ๋ก ๋น๋ ๋ถ๊ฐ(์ด ์คํฌ์ ์
๋ ฅ md ๊ธฐ๋ฐ) โ assets/example-*.md ๋ฅผ ์์์ ์ผ๋ก ํธ์งํ๋ค.
## ๊ฐ๊ด์ ๋ฌธํญ์ frontmatter options ํ๋๋ฅผ ๊ณต์ ํ๋ค. ๋ฌธํญ๋ง๋ค ๋ค๋ฅธ ๋ณด๊ธฐยทํ์ยท๋ณต์์ ํ์ด ํ์ํ๋ฉด %%choice directive ๋ก override(์๋ "๋ฌธํญ๋ณ ๋ณด๊ธฐ ยท ํ์ ยท ๋ณต์์ ํ ยท ๋จ๋ต"). ๋จ๋ต์ %%text/%%email ๋ฑ, ์์ ์์ ์ ### + - ๋ผ๋ฒจ: ___, ๋งคํธ๋ฆญ์ค/๋ ์ง/์๊ฐ์ ์ผ์ ์กฐ์จ ์ฐธ์กฐ.
๊ฐ๋
์ฑ
- ๋ฌธ๋จ ๋ถ๋ฆฌ โ ์ธํธ๋ก(์ ๋ชฉ ์งํ ์ฒซ blockquote run)๋ ๋น
> ์ค๋ก ๋ฌธ๋จ์ ๋๋๋ฉด ๋ฌธ๋จ๋น ๋ณ๋ TEXT ๋ธ๋ก์ผ๋ก ๋ ๋. <br> ๋น์์กด.
- ์น์
๊ตฌ๋ถ์ โ
## ์น์
์ฌ์ด์ DIVIDER ๋ธ๋ก ์๋ ์ฝ์
(๊ธฐ๋ณธ on, ์ฒซ ์น์
์์๋ ์์). frontmatter dividers: false ๋๋ --no-dividers ๋ก ๋.
๋ฌธํญ๋ณ ๋ณด๊ธฐ ยท ํ์ ยท ๋ณต์์ ํ ยท ๋จ๋ต (%%choice / ๋จ๋ต directive)
์ ์ญ options ๊ณต์ ๊ฐ๊ด์(## +- [ ])๊ณผ ๋ณ๊ฐ๋ก, ๋ฌธํญ๋ง๋ค ๋ค๋ฅธ ๋ณด๊ธฐ/ํ์/๋ณต์์ ํ/๋จ๋ต์ directive ๋ก ๋๋ค(์ ์ญ ๊ฒฝ๋ก ๋นํ๊ดด). ์์ธยท์ค์ธก ๊ทผ๊ฑฐ๋ references/tally-blocks.md.
%%choice
title: ๊ด์ฌ ๋ถ์ผ (๋ณต์ ์ ํ)
options: ๋ธ๋๋ฉ, ์น์ฌ์ดํธ, ๋ง์ผํ
, ๊ธฐํ # ์ด ๋ฌธํญ ์ ์ฉ ๋ณด๊ธฐ (์ ์ญ options override)
select: multi # single โ ๋จ์ผ์ ํ(๊ธฐ๋ณธ) | multi โ ์ฒดํฌ๋ฐ์ค
required: true # ๊ธฐ๋ณธ false
desc: ํด๋น ํญ๋ชฉ ๋ชจ๋ ์ ํ # (์ ํ) ์ ๋ชฉ ์๋ ๋ณด์กฐ ์ค(๋ฌธํญ ๊ฐํ)
%%
%%text label: ์ด๋ฆ (required) (placeholder: ํ๊ธธ๋)
%%email label: ์ด๋ฉ์ผ (required)
%%phone label: ์ฐ๋ฝ์ฒ (desc: 010-0000-0000 ํ์)
%%number label: ์ธ์์
%%link label: ํฌํธํด๋ฆฌ์ค URL
%%choice โ ๋ฌธํญ๋ณ ๋ณด๊ธฐ ๊ฐ๊ด์. select:multi = ์ฒดํฌ๋ฐ์ค(๋ณต์), required:true = ํ์, desc: = ์ ๋ชฉ ์งํ ๋ณด์กฐ ์ค.
- ๋จ๋ต
%%text/%%number/%%email/%%phone/%%link โ INPUT_* ํ ์ค ์
๋ ฅ. tail ์ label: + bare (required) + (placeholder: โฆ) + (desc: โฆ)(%%date/%%time ์ ๋ํ).
- directive ๋ฌธํญ์ ์๋ ๋ฒํธ ๋ฏธ๋ถ์ฌ(์ ๋ชฉ ๊ทธ๋๋ก). ์ ์ญ
- [ ] ๋ง {n}. ๋ฒํธ.
์ผ์ ์กฐ์จ (matrix / date / time)
์ธ๋ถ ์ค์ผ์ค๋ฌ ์๋ฒ ๋ ๋์ ๋ค์ดํฐ๋ธ ๋ธ๋ก์ผ๋ก ์ฒ๋ฆฌ(์ธ๋ถ ์ค์ผ์ค๋ฌ๋ oEmbed ๋น๋์ โ ๋งํฌ์์๋ง). 1:1 ์๋ด ์์ค(Lv1).
## ๊ฐ๋ฅํ ์๋ด ์๊ฐ
%%matrix
rows: ์์์ผ, ํ์์ผ, ์์์ผ, ๋ชฉ์์ผ, ๊ธ์์ผ
cols: ์ค์ , ์คํ, ์ ๋
select: single # single(ํ๋ง๋ค 1๊ฐ) | multi(์ฌ๋ฌ ๊ฐ)
%%
%%date label: ํฌ๋ง ์๋ด์ผ (format: yyyy/MM/dd)
%%time label: ํฌ๋ง ์๊ฐ
%%matrix โฆ %% โ MATRIX ๊ทธ๋ฆฌ๋ ํ ๋ฌธํญ. %%date/%%time โ INPUT_DATE/INPUT_TIME ํ ๋ฌธํญ.
select: single ์ ํ๋ง๋ค ์ด 1๊ฐ๋ก ์ ํ. format enum = MM/dd/yyyy | dd/MM/yyyy | yyyy/MM/dd. ์ธ๋ฐํ ๋ ์ง ์ ์ฝ(min-date)์ ํ์ฌ Tally ์คํค๋ง์ ๋จ์ผ ํ๋๊ฐ ์์ด v1 ๋ฒ์ ๋ฐ.
์ด๋ฏธ์ง & ์ ์ถ ํ ๋ฆฌ๋ค์ด๋ ํธ
Tally ๋ ๋ฏธ๋์ด ์
๋ก๋ API ๊ฐ ์์ด ์ด๋ฏธ์ง๋ ํธ์คํ
๋ ๊ณต๊ฐ URL ๋ง ๋ฐ๋๋ค. ๋น๋๋ ์ ์ฒด https:// URL ์ ๊ทธ๋๋ก ์ฐ๊ณ , owner/repo[@ref]:path ์ํธ๋๋ raw.githubusercontent.com URL ๋ก ๋ณํํ๋ค(public GitHub repo ์ assets/ ๊ฐ ๋ฌด์ธํ๋ผ ํธ์คํธ). .gif URL ๋ ๊ทธ๋๋ก ๋ค์ด๊ฐ๋ฉฐ ์ ๋๋ฉ์ด์
๋ ๋๋ ํผ์ ์ด์ด ์ก์ ํ์ธ.
---
logo: YoungjaeDev/my-claude-plugins@main:assets/logo.png # ์ํ 200x200 / ์ํธ๋ OR ์ ์ฒด URL
cover: https://example.com/cover.jpg # ์ ํญ 1500px+
redirect: https://yoursite.com/thanks # ์ ์ถ ํ ์ด๋ (๋ฌด๋ฃ)
---
# ์ ๋ชฉ
...
%%image url: owner/repo@main:assets/banner.png
caption: (์ ํ) ์บก์
%%
%%image https://example.com/inline.png # ๋จ์ผ ๋ผ์ธ ์ฝ์
logoยทcover โ FORM_TITLE payload. %%image โ ๋ณธ๋ฌธ IMAGE ๋ธ๋ก(caption/link ์ต์
). redirect โ settings.redirectOnCompletion.
- ํ๋ฉด์ ๋จ๋ thank-you ๋ฌธ๊ตฌ ์ปค์คํฐ๋ง์ด์ฆ๋ create API ์ ํ๋๊ฐ ์์(์๋ํฐ ์ ์ฉ) โ ๋์์
redirect. ์๋ต์ ํ์ธ ์ด๋ฉ์ผ์ Tally Pro.
humanize ๊ธฐ๋ณธ ๋ผ์ฐํ
- ์นดํผ๋ฅผ ์๋ก ์ฐ๊ฑฐ๋ ์์ ํ ๋: ๊ธฐ๋ณธ์ ์ผ๋ก ํ๊ธ ์นดํผ๋ฅผ
/humanize-korean:humanize-korean(fast)์ ์ค๋ฌธ ์์ ํ ๋น๋.
--update ์ฌ๋น๋(๋ฌธ๊ตฌ ๋ณํ ์์ด ๊ฒ์๋ง): humanize skip.
--no-humanize: ๋ช
์์ escape(์คํฌ๋ฆฝํธ ํจ์ค์ค๋ฃจ ํ๋๊ทธ โ ์ค๋ฌธ ํธ์ถ ์์ฒด๋ฅผ main ์ธ์
์์ ์๋ต). ์คํฌ๋ฆฝํธ๋ ์ค๋ฌธ์ ํธ์ถํ์ง ์๋๋ค.
humanize-korean ๋ฏธ์ค์น: graceful degrade โ form-copy-style.md ๊ท์น๋ง ์๋ ์ ์ฉํ๊ณ ๊ณ์ ์งํ.
ํค ์ฒ๋ฆฌ
- API ํค = env
TALLY_API_KEY โ ์์ผ๋ฉด repo .env(TALLY_API_KEY=...) ์๋ ํ์(CWD ๋ถํฐ ์์๋ก).
.env ๋ gitignore. ํค๋ฅผ ์ถ๋ ฅยท๋ก๊ทธยท์ปค๋ฐํ์ง ์๋๋ค.
- ํค๊ฐ ์์ผ๋ฉด ์คํฌ๋ฆฝํธ๋ payload ๋ง ๋ง๋ค๊ณ
NO_KEY ์ถ๋ ฅ(์์ ).
๊ฒ์ & idempotent ๊ฐฑ์ (์ค์)
- ๊ฒ์ =
PATCH /forms/{id} ์ status:"PUBLISHED" ํฌํจ. /forms/{id}/blocks ๋ง PATCH ํ๋ฉด draft ์๋ฅ โ ๊ณต์ URL ๋ฏธ๋ฐ์. (references/tally-blocks.md.)
--update <formId> ๋ ๊ฐ์ md ๋ก ์ฌ๋ฌ ๋ฒ ๋๋ ค๋ ๊ฐ์ ํผ์ ๋ฎ์ด์ฐ๋ฏ๋ก ์์ (idempotent). ๊ณต์ URL ๋ถ๋ณ.
์ฒดํฌ๋ฆฌ์คํธ md ๊ท์ฝ
---
options: # (์ ํ) ๊ธฐ๋ณธ = ๋ค, ํด์ฃผ์ธ์ / ๋์ค์ / ์ค๋ช
๋ฃ๊ณ ์ ํ ๊ฒ์
- ๋ค, ํด์ฃผ์ธ์
- ๋์ค์
- ์ค๋ช
๋ฃ๊ณ ์ ํ ๊ฒ์
theme: neutral # (์ ํ) neutral(๊ธฐ๋ณธ) | hermes | none | <styles.json>
dividers: true # (์ ํ) ์น์
๊ตฌ๋ถ์ , ๊ธฐ๋ณธ on
form_id: vGWGr0 # (์ ํ) ๊ธฐ์กด ํผ ๊ฐฑ์ ๋์ (= --update)
logo: owner/repo@main:assets/logo.png # (์ ํ) ๋ก๊ณ (์ํธ๋ OR ์ ์ฒด URL)
cover: https://example.com/cover.jpg # (์ ํ) ์ปค๋ฒ ์ด๋ฏธ์ง
redirect: https://example.com/thanks # (์ ํ) ์ ์ถ ํ ๋ฆฌ๋ค์ด๋ ํธ
---
# ํผ ์ ๋ชฉ โ FORM_TITLE
> ์ธํธ๋ก ๋ฌธ๋จ 1 โ ์ธํธ๋ก TEXT (์ ๋ชฉ ์งํ ์ฒซ blockquote run)
>
> ์ธํธ๋ก ๋ฌธ๋จ 2 โ ๋น `>` ์ค๋ก ๋ถ๋ฆฌ ์ ๋ณ๋ TEXT ๋ธ๋ก
## ์น์
์ ๋ชฉ โ HEADING_2 (์ดํ - [ ] ํญ๋ชฉ์ ๊ฐ๊ด์)
- [ ] ํญ๋ชฉ (์: โฆ) โ ๊ฐ๊ด์ ๋ฌธํญ (์ ์ญ ๋ฒํธ ์๋, ๊ณต์ options)
### ์์ ์๊ฒฌ โ HEADING_2 (์ดํ - ๋ผ๋ฒจ: ___ ์ ์์ )
- ๋ผ๋ฒจ: ___ โ ์์ (TEXTAREA) ๋ฌธํญ (๋ฒํธ ์์)
%%choice / %%text / %%number / %%email / %%phone / %%link โ ์ "๋ฌธํญ๋ณ ๋ณด๊ธฐ ยท ํ์ ยท ๋ณต์์ ํ ยท ๋จ๋ต" ์ฐธ์กฐ
%%matrix / %%date / %%time โ ์ "์ผ์ ์กฐ์จ" ์ฐธ์กฐ
- frontmatter ๊ฐ ๋ณธ๋ฌธ๋ณด๋ค ์ฐ์ (
title/intro ๋ override ๊ฐ๋ฅ). CLI --theme/--update/--dividers ๋ frontmatter ๋ณด๋ค ์ฐ์ .
- ์ ๋ชฉ ์งํ ์ฒซ blockquote run ๋ง ์ธํธ๋ก. ์ดํ ๋น ์ค๋ก ๋๊ธด ๋ณ๋ blockquote(์ต์
์๋ดยท๊ณต์ URLยท๋ด๋ถ ๋ฉ๋ชจ)๋ ๋ฌด์.
ํ
ํ๋ฆฟ ๋ ํผ๋ฐ์ค
์ ํผ ๊ตฌ์กฐ๋ฅผ ์ก์ ๋ references/tally-templates.md ์ 6์ข
๊ณต์ Tally ํ
ํ๋ฆฟ(์ธํ
์ดํฌยท์๊ฐ์ ์ฒญยท์ฝ์นญยท์จ๋ณด๋ฉ) URLยท๊ตฌ์กฐ ๋ฉ๋ชจ ์ฐธ๊ณ . ์ํฌํธ๋ ์ ํ๊ณ ํจํด๋ง ์ฐธ๊ณ ํ๋ค.
๋์: ๊ณต์ Tally MCP (์ฑํ X)
๋ํํ ํธ์ง์ด ํ์ํ๋ฉด ๊ณต์ Tally MCP(claude mcp add tally --transport http https://api.tally.so/mcp, beta)๋ ์์ผ๋ ์ด ์คํฌ์ ์ฑํํ์ง ์๋๋ค โ ๊ฒฐ์ ์ฑยทidempotentยท๋ฌด์์กด์ฑ ๋ณด์กด์ ์ํด urllib ๋น๋๋ฅผ ์ ์ง.
๋ฒ์ ๋ฐ
- GIF ์์ฑ(๋ณ๋ ํ๋ก์ ํธ โ ์ด๋ฏธ์ง ์ฐธ์กฐ๋ ์ง์, ์์ฑ์ ์ ํจ), ํ๋ฉด์ ๋จ๋ thank-you ๋ฌธ๊ตฌ(create API ๋ฏธ์ง์ โ
redirect ๋์), ์๋ต์ ํ์ธ ์ด๋ฉ์ผ(Tally Pro).
- ์ ์ถ(submission) ์์ ยท์ง๊ณ, ์ ์-๊ฒน์นจ ํํธ๋งต(when2meet Lv2+) โ 1:1 ์๋ด ๋ฒ์ ๋ฐ.
- ์ปค์คํ
CSSยทํฐํธ(Tally ์ ๋ฃ).