Communitygithub.com

Tekton — 에이전트와 함께 아키텍처 공동 설계

Tekton은 인간과 AI 에이전트가 하나의 YAML 모델 위에서 시스템, 데이터, 인프라, 의사결정, 품질 속성 등 6개 계층을 공동으로 설계할 수 있게 해주는 오픈소스 도구입니다. Mermaid 다이어그램과 HTML 뷰어를 함께 제공하여 설계의 가시성과 추적성을 높입니다.

Tekton — 에이전트와 함께 아키텍처 공동 설계란 무엇인가요?

Tekton은 인간 개발자와 AI 에이전트가 하나의 공유된 타입 기반 YAML 모델을 통해 시스템 아키텍처를 공동으로 설계할 수 있게 해주는 오픈소스 프레임워크입니다. 사람은 HTML 뷰어로 시각적으로 확인하고, 에이전트는 동일한 모델을 읽고 쓸 수 있어 양방향 협업이 가능합니다. 이 도구는 정적 다이어그램의 한계를 극복하기 위해 설계되었으며, 시스템, 사용자 여정/흐름, 데이터, 인프라, 의사결정(ADR), 품질 속성(NFR) 등 6개 계층(system/journey/data/infra/decisions/qualities)을 하나의 모델에서 표현합니다. 사용자는 6개의 미리 정의된 뷰로 설계를 탐색하거나, `tekton query`명령어로 계층 간 추적성을 질의할 수 있습니다(예: '이 사용자 여정 단계가 어떤 인프라에 닿는가?'). 에이전트와의 실제 설계 세션에서는 먼저 모델 파일(.arch.yaml)을 찾거나 생성하고, 대화 중에 새 노드와 엣지를 YAML에 직접 추가합니다. 각 편집 후에는 `validate`와 `lint` 명령어로 무결성과 피트니스 규칙을 확인하고, `render`로 뷰어를 생성한 뒤 시각적 감사(노드 겹침 감지)를 수행합니다. HTML 뷰어는 elkjs를 사용한 브라우저 내 레이아웃으로, 그룹 접기/펼치기, as-is/to-be 표시, 클릭 추적 등 고급 기능을 제공합니다. 현재는 내부 도구(v0) 단계이나, 3개 이상의 실제 시스템에 사용된 후 정식 출시될 예정입니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/broomva/skills/tree/HEAD/skills/design/tekton

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Tekton — 하나의 공유 모델을 통한 공동 설계 아키텍처

설명

인간↔에이전트 아키텍처 파트너십을 위한 기반입니다. 설계는 우리가 함께 편집하는 하나의 YAML 모델에 존재합니다. Git이 라운드트립을 담당합니다. 저는 모델을 봅니다 (HTML 뷰어). 에이전트는 동일한 모델을 읽고 씁니다. 우리는 동일한 컨텍스트에 대해 함께 생각합니다.

이 도구가 해결하는 문제점: 수작업으로 작성된 HTML/SVG 문서는 최종 렌더링 결과물로, 탐색, 쿼리, 또는 다시 편집할 수 없으며, 다이어그램에 어떤 의미도 포함되어 있지 않습니다. Tekton은 렌더링 결과물보다 상위에 있는 라이브 모델을 다룹니다.

엔진

scripts/tekton.py (Python 3, pyyaml). 온톨로지는 references/ontology.md에 있습니다.

python3 scripts/tekton.py validate <model.arch.yaml>       # 무결성 검사
python3 scripts/tekton.py lint     <model.arch.yaml>       # v0.2 — 적합성 함수; 위반 시 exit 1
python3 scripts/tekton.py stats    <model.arch.yaml>       # 노드/엣지/상태/규칙 개수
python3 scripts/tekton.py views                            # 6개 뷰 목록
python3 scripts/tekton.py mermaid  <model.arch.yaml> <view># 원시 mermaid (임베드/에이전트용)
python3 scripts/tekton.py render   <model.arch.yaml> [-o out.html]  # 브랜드에 맞는 HTML 뷰어
python3 scripts/tekton.py query    <model.arch.yaml> <from> <to>    # 계층 간 경로

v0.2 온톨로지 업그레이드 (아키텍처 검토 기반)

  • 포함 관계(Containment) — 모든 노드의 parent: + boundary 유형; 뷰어는 중첩 그룹을 렌더링하며, 더블 클릭으로 접기/펼치기 (C4 스타일 드릴다운).
  • 라이프사이클(Lifecycle) — 노드의 status: (current|target|deprecated; target은 점선으로 렌더링 = 단일 모델의 현재/목표 상태) 및 결정에 대한 전체 Nygard ADR 필드 (context, consequences, status, supersedes).
  • 품질(Qualities) — qualities: 블록; NFR은 요소를 constrains; 세부 정보 패널
    • 전용 뷰에 표시됩니다.
  • 적합성 함수(Fitness functions) — rules: 블록 (forbid-dep, no-cycle, layer-order); tekton lint는 CI 게이트로 사용 가능 (exit 1). 설계 루프의 독립적인 검증기입니다.

에이전트가 설계 세션에서 이를 사용하는 방법

  1. 모델 찾기/생성하기: <project>/docs/design/<name>.arch.yaml (또는 임시 작업용 examples/).
  2. 생각하면서 변경하기 — 대화 중에 구성 요소, 흐름, 데이터, 인프라, ADR이 드러나면 YAML에 직접 노드, 엣지, 결정을 추가/조정합니다.
  3. 각 실질적인 편집 후 validate + lint 실행 (끊어진 참조, 잘못된 유형, 적합성 규칙 확인).
  4. render, 그리고 뷰어가 올바르다고 주장하기 전에 지오메트리 감사를 실행합니다: bash tests/visual-audit.sh <model.arch.yaml>. 이 스크립트는 모든 뷰를 헤드리스로 렌더링하고 노드 겹침이나 빈 캡처가 있으면 실패합니다. 이 감사 없이 "다이어그램이 정확합니다"라고 주장하는 것은 첫 번째 실제 사용에서 발견된 정확한 오류입니다 (연결되지 않은 그룹 내 엣지, 중복 노드 — DOM 개수 프로브로는 보이지 않고 지오메트리로만 발견됨). URL에 #<view>를 추가하여 뷰에 딥 링크합니다.
  5. **query**를 사용하여 추적 가능성 질문("이것이 무엇에 영향을 미치는가?")에 답하고 추측을 피합니다.
  6. 조정 → 반복. 사람이 YAML이나 뷰어 의도를 편집합니다. git diff가 전달 핸드오프입니다.

알려진 잔여 시각적 문제 (감사 실패 아님): 여정 루프백 엣지는 ELK가 임의의 단계에서 사이클을 끊게 만듭니다 (루프는 어딘가에서 끊어져야 함). 인접한 병렬 엣지 레이블은 밀집된 그룹에서 가깝게 위치할 수 있습니다.

규칙

  • 모델 파일: *.arch.yaml. 렌더링된 뷰어: *.view.html (gitignore 또는 커밋 — 선택 사항).
  • 경계가 있는 시스템당 하나의 모델. external 노드 + uses 엣지로 시스템 연결.
  • 결정(ADR)은 일급 노드입니다 — 결정이 govern하는 항목에 연결합니다.
  • 카테고리-C HTML 보고서는 모델의 다운스트림 내보내기가 되며, 진실의 근원이 아닙니다.

렌더링 — Mermaid를 사용하지 않는 이유

기본 뷰어는 사용자 정의 렌더러이며 Mermaid가 아닙니다. Mermaid의 테마 한계로는 Broomva 디자인 시스템(OKLCH 블루 축, 무광 카드, 조건부 유리, 혜성 광택)을 표현할 수 없고, 밀집된 그래프에서는 dagre 레이아웃 성능이 저하됩니다. 대신: elkjs가 브라우저 내에서 레이아웃을 계산하고(순수 JS → 출력은 단일 자체 포함 HTML 파일로 유지됨), 노드는 Broomva 무광 카드로 그려집니다(유리는 "조건부 유리" 규칙에 따라 떠다니는 세부 정보 패널에만 사용됨). 디자인 토큰은 Broomva 디자인 시스템에서 인라인됩니다. tekton mermaid는 일회성 임베드/에이전트가 읽을 수 있는 대상으로만 유지됩니다.

로드맵 (v0 → v2)

  • v0.2 (현재): YAML 모델 · validate + lint (적합성 함수) · 6개 뷰 · 브랜드에 맞는 elkjs 뷰어 (포함 관계 접기/펼치기, 현재/목표 상태, 클릭하여 추적, 유리 세부 정보 패널) · 계층 간 쿼리 · Mermaid 폴백 임베드.
  • v1: 양방향 라운드트립 (뷰어에서 끌어서 편집 → YAML로 직렬화); MCP 서버 (검증된 변경이므로 에이전트가 유효하지 않은 모델을 내보낼 수 없음); React-Flow 대화형 캔버스를 위한 전체 Broomva 디자인 시스템 벤더링.
  • v2: CRDT (loro) 실시간 인간↔에이전트 공동 편집; Prosopon에 라이브 동기화하여 표면으로 제공.

상태

v0 실제 사용 — 내부 설계 도구. 설계 루프가 3개 이상의 실제 시스템에서 사용된 후 (3의 법칙) Skillify(테스트 및 등록)됩니다.

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

broomva/skills

Local TTS, voice cloning, voice design, and video dubbing via the OmniVoice Studio MCP server (open-source ElevenLabs alternative; nothing leaves the machine, runs on MPS/CUDA/CPU). Use when: (1) generating speech from text in any of 646 languages, (2) cloning a voice from a 3-second reference clip, (3) designing a voice by gender/age/accent/pitch/style, (4) dubbing a video into another language, (5) listing voice profiles or personality presets, (6) producing narration where privacy, cost, or absent API keys matter, (7) non-English narration where Edge TTS/kokoro fall short, (8) batch audio for blog posts or content pipelines. Triggers: 'omnivoice', 'voice clone', 'clone this voice', 'tts', 'narrate', 'generate speech', 'voice synthesis', 'dub video', 'voice design', 'local tts', 'multilingual voice', 'narrate this post', 'elevenlabs alternative'.

broomva/skills

>- Speak an explanation out loud while working in any project — tiered text-to-speech with a pluggable backend (ElevenLabs by default and quota-guarded, macOS `say` via `--fast` for free instant local speech, local OmniVoice as an unlimited private tier). Markdown-aware, so code fences, URLs and deep paths collapse to short spoken placeholders instead of being dictated character by character, while snake_case identifiers survive intact so the listener can still search for them. Every utterance is saved to disk for later replay. Also carries a **talk mode** toggle: turn it on and the agent speaks a full readback of every turn, for as long as that session lasts — the whole response, not a summary of it, with `brief` and `marker` levels for when you want less. Talk mode is off by default and scoped to the single session that enabled it, so parallel agents in other worktrees stay silent. Use when the user asks to hear something rather than read it — an explanation of a change, a walkthrough of what just happen...

broomva/skills

Shop Tiendas D1 (Colombia, d1.com.co) from the command line — search the catalogue, resolve your nearest physical store, price a basket against that store's real stock, and quote delivery. D1 runs VTEX IO (account `d1tiendas`), so this drives its public storefront API with no admin key at all — catalogue and cart work fully anonymously, and a one-time emailed code unlocks order history. Handles the two traps that make naive D1 automation wrong — availability is regionalized (an unregioned query reports a national catalogue nobody can actually buy from) and prices arrive in two different units (search reports whole pesos, checkout reports hundredths, a silent 100x). Builds and prices baskets; it deliberately cannot pay, handing a checkout URL to a human instead. USE WHEN the user wants to find D1 products or prices, check whether D1 delivers somewhere, build or cost a D1 grocery basket, compare D1 items, or review their D1 orders. NOT FOR other Colombian retailers (Éxito, Jumbo, Ara, Alkosto), and not for c...

broomva/skills

Stateful, local-first household toxics inventory + swap engine. Identify the items in a home that carry endocrine disruptors and persistent chemicals (BPA/BPS, phthalates, PFAS/PTFE, parabens, flame retardants, VOCs, microplastics), score each by *real* exposure (severity x presence x how it's used x condition), and track the swap to a safer alternative from "flagged" -> "sourced" -> "swapped". Ships a grounded, cited knowledge graph of ~20 hazards, ~40 item-classes, and ~40 alternatives. Hands sourcing off to the `procurer` skill. The skill's state is the source of truth — the agent is the app.

broomva/skills

Generate a polished Remotion video and X thread showcasing the full agent skills inventory. Use when creating social media content about skills, rendering category-based skill visualizations, or producing animated showcases of agent capabilities. Triggers on "skills video", "showcase skills", "skills thread", "render skills", "social content for skills", or requests to visualize the skills inventory.

broomva/skills

OpenCaptions extension for Content Engine — adds intent-driven CWI (Caption With Intent) captions to the post-production pipeline. Hooks into the grade → caption → final stage. Generates captions that understand video intent (pitch, volume, emotion, emphasis) and style themselves accordingly with variable font weight, size, and color. Uses the OpenCaptions CLI or MCP server. Triggers on: 'add captions', 'opencaptions', 'CWI captions', 'intent captions'.

broomva/skills

Produce polished product launch videos using the Liquid Glass aesthetic — dark void backgrounds, 3D perspective floating UI panels, particle effects, spring animations, and cinematic pacing. Built on Remotion with Imagen 4.0 for frames and Veo 3.1 for B-roll. Use when: (1) creating a product demo or launch video, (2) showcasing a UI/app/tool with cinematic polish, (3) building a social-ready video from screenshots and renders, (4) applying the liquid glass floating panel style, (5) composing Remotion videos with 3D transforms and spring animations. Triggers on: 'launch video', 'product video', 'liquid glass video', 'demo video', 'showcase video', 'remotion video', 'floating panel', 'glass aesthetic'.

관련 스킬