bama
BAMA: 모든 Mac 앱을 만들 수 있습니다
AI 에이전트가 Notion처럼 문서를 작성하도록 하며, 문서 구조와 시각 스타일을 고정하는 Codex·Claude Code 스킬입니다
Make your AI agent write documents like Notion — Codex & Claude Code skill that locks document structure & Notion visual style
스킬Python · HTMLGitHub @heyman333직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
설치형 프로젝트는 배포 도메인 없이도 확인할 수 있습니다. 개인 저장소는 GitHub 로그인으로, 조직 저장소는 위의 저장소 확인 파일로 직접 확인해 주세요.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Make your AI agent write documents like Notion — not like an AI.
Ask an AI agent to create a document and you'll often get the same kind of output: a purple gradient hero, emoji-heavy headings, cards with drop shadows.
notion-doc is an agent skill that gives those documents a Notion-like visual style.
It doesn't decide what goes into your document or how it's structured. Your agent still handles the content and outline. notion-doc only handles the presentation.
The skill provides a set of HTML blocks commonly used in Notion:README 전문 보기 ↗Make your AI agent write documents like Notion — not like an AI.
Ask an AI agent to create a document and you'll often get the same kind of output: a purple gradient hero, emoji-heavy headings, cards with drop shadows.
notion-doc is an agent skill that gives those documents a Notion-like visual style.
It doesn't decide what goes into your document or how it's structured. Your agent still handles the content and outline. notion-doc only handles the presentation.
| Without notion-doc | With notion-doc |
|---|---|
The skill provides a set of HTML blocks commonly used in Notion:
<details>), checklists with strikethrough, quotes, and bookmark cardsword-break: keep-all)@media printThe agent doesn't generate CSS for each document. It copies template.html and fills in the content.
The template defines a 720px content width, #2C2C2B text color, and Notion's light and dark color palettes as CSS tokens.
Dark mode follows the viewer's theme. When printed or exported to PDF, it switches back to the light palette.
| Light | Dark |
|---|---|
notion-doc ships as a portable Agent Plugin — one
plugin.json, one skills/ directory, one hook. Codex and Claude Code install
the same files.
Install it as a plugin:
codex plugin marketplace add heyman333/agent-notion-template-docs
Then pick notion-doc in the plugin browser:
/plugins
Or drop the skill in by hand — it is a directory, nothing to build:
# this repo only
mkdir -p .agents/skills && cp -r skills/notion-doc .agents/skills/
# every project
mkdir -p ~/.agents/skills && cp -r skills/notion-doc ~/.agents/skills/
Codex picks it up on the next session. Ask for a document and it applies on its
own; to force it, type $notion-doc.
If you install by hand rather than as a plugin, the lint hook does not come
along. Wire it up once in ~/.codex/hooks.json (or <repo>/.codex/hooks.json):
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit|apply_patch",
"hooks": [
{
"type": "command",
"command": "/path/to/agent-notion-template-docs/hooks/notion-doc-lint.py"
}
]
}
]
}
}
The script reads the tool payload on stdin and takes no arguments. It
understands both payload shapes — Claude Code's file_path and Codex's
apply_patch body.
/plugin marketplace add heyman333/agent-notion-template-docs
/plugin install notion-doc@agent-notion-template-docs
By default the plugin is installed at the user scope — it applies to all of your projects and never touches the repo, so teammates are unaffected.
To narrow or widen that, pass --scope on the CLI:
# just me, just this project (.claude/settings.local.json — auto-gitignored)
claude plugin marketplace add heyman333/agent-notion-template-docs --scope local
claude plugin install notion-doc@agent-notion-template-docs --scope local
# the whole team on this project (.claude/settings.json — commit it)
claude plugin marketplace add heyman333/agent-notion-template-docs --scope project
claude plugin install notion-doc@agent-notion-template-docs --scope project
With project scope, teammates get an install prompt on their next session after pulling. With local scope, nothing you install shows up in git.
New versions ship through this marketplace repo, so refresh the marketplace first, then update the plugin:
/plugin marketplace update agent-notion-template-docs
/plugin update notion-doc@agent-notion-template-docs
Or from the CLI, passing the scope you installed at:
claude plugin marketplace update agent-notion-template-docs
claude plugin update notion-doc@agent-notion-template-docs --scope user # or local / project
Restart Claude Code to apply. If you installed at more than one scope, update each one — in a project the narrower scope wins. claude plugin list shows what you currently have.
You can also copy the skill manually.
# this project only
cp -r skills/notion-doc <your-project>/.claude/skills/
# every project
cp -r skills/notion-doc ~/.claude/skills/
The skill is two plain files with no agent-specific dependencies. Any agent that can read instruction files can use it.
See Using with other agents for ready-to-paste snippets for AGENTS.md, .cursor/rules, and GEMINI.md.
Once installed, notion-doc is applied automatically when you ask the agent to create a document.
For example:
You can also invoke it explicitly:
| Agent | Invoke |
|---|---|
| Codex | $notion-doc |
| Claude Code | /notion-doc:notion-doc |
The skill is designed around a single HTML template. The agent should use the template rather than creating its own CSS.
lint.py checks generated documents against template.html:
python3 skills/notion-doc/lint.py mydoc.html
For example:
✗ mydoc.html
ERROR [css-drift] CSS differs from the canon (1 lines). Do not write new CSS — + box-shadow: 0 4px 12px ...
ERROR [unknown-class] Classes not in the template: hero-card. Do not invent classes — pick from the block dictionary
The linter catches:
style attributeslanguage-* classIt uses only the Python standard library, so it can run in any agent or CI environment.
When installed as a plugin, a PostToolUse hook runs after HTML files are written and reports what needs to be fixed. If the document was created without the skill, it gives a short reminder to use it. The same script serves both runtimes — it reads Codex's apply_patch payload and Claude Code's file_path payload.
The hook is limited to document files and skips apps, framework templates, and build output. See the gating tests.
Open the HTML files in a browser to see the actual output.
| File | Content | Blocks shown |
|---|---|---|
| sample.html | Campaign proposal (Korean) | Most of the available blocks: breadcrumb, TOC, 5 callout colors, tables, 2-column layout, toggle, checklist, bookmark, button |
| sample-tech.html | Incident analysis (Korean) | Syntax-highlighted code, red/yellow callouts |
| sample-en.html | Campaign proposal (English) | Same document as sample.html, in English |
| before.html | Without notion-doc | A typical default agent output |
plugin.json # portable manifest (Agent Plugins 1.0)
hooks.json # Codex PostToolUse hook
AGENTS.md # instructions for agents working on this repo
.codex-plugin/
plugin.json # Codex compatibility manifest
.agents/
plugins/marketplace.json # Codex marketplace catalog
skills/notion-doc # symlink → skills/notion-doc
.claude-plugin/
plugin.json # Claude Code manifest
marketplace.json # Claude Code marketplace catalog
skills/notion-doc/
SKILL.md # block dictionary and visual rules
template.html # HTML template and CSS
lint.py # checks documents against the template
hooks/
hooks.json # Claude Code PostToolUse hook
notion-doc-lint.py # the hook itself — reads both payload shapes
test_gating.py # tests hook behavior
examples/ # rendered example documents
scripts/ # screenshots, Notion sync, manifest consistency
docs/
using-with-other-agents.md
The skill lives in exactly one place. .agents/skills/notion-doc is a symlink,
so Codex and Claude Code can never drift apart.
Notion continues to add new block types and change its visual design. This repo periodically checks a public Notion reference page to see if the implementation has drifted.
The weekly CI job, notion-sync, checks the reference page in three ways:
The results are compared against the committed baselines in sync/notion-tokens.json and sync/notion-snapshot.json.
Reference page:
Notion Block Reference — All of Notion's Blocks
(Thomas Frank's public reference page.)
When the reference changes, the CI job reports the difference and opens an issue. The report also indicates whether a new block type is already supported by notion-doc.
The visual style in template.html is based on Notion's own design tokens rather than manually approximated values.
Notion declares its tokens right in its inline styles (background: var(--c-graBacPri)), so every value can be traced instead of sampled:
The weekly notion-sync job re-checks all of it, so the template can't silently drift from Notion.