synsema
KO 한국어

프로그래밍 언어 · AI 에이전트 프레임워크 · 기본적으로 안전

사람은 페이지를 읽습니다.
에이전트는 소스를 읽습니다.

하나의 URL, 콘텐츠 협상. Synsema는 에이전트 프레임워크가 내장된, 빠르고 기본적으로 안전한 AI 에이전트용 프로그래밍 언어입니다. 같은 라우트가 사람에게는 HTML을, 모델에게는 Markdown을 제공합니다. 패널을 전환해 LLM이 이 페이지에서 받는 Markdown을 그대로 확인해 보세요.

try.synsema.com에서 만들면서 배우기: 실제 샌드박스가 있는 강좌, 설치 불필요.

GET synsema.com/ko
200 OK · Content-Type: text/markdown
# Synsema
> AI 에이전트를 위한 프로그래밍 언어.

## 무엇인가
- 빠름. 47,200 req/s, Go와 Node를 앞섬.
- 기본적으로 안전. `require`가 없으면 접근도 없음.
- 에이전트 네이티브. 하나의 라우트, HTML 또는 Markdown.

## 설치
curl -fsSL synsema.com/install.sh | sh
에이전트 인덱스: /llms.txt

Synsema

AI 에이전트를 위한 프로그래밍 언어.

처리량
47,200req/s
vs Go (net/http)
+10%
기본적으로 안전
에이전트 네이티브

↑ 같은 리소스, 두 가지 표현 · curl -H "Accept: text/markdown" synsema.com/ko

빠름 · req/s (c=50)

47,200req/s

Go(42,800)와 Node(38,700)를 앞섭니다1. 네이티브 비동기, 진짜 멀티코어, 정적 바이너리 하나, 런타임 제로.

기본적으로 안전

-- require가 없으면 접근도 없음
require net("api.shop.com")
fetch("api.shop.com")  ✓ 허용
fetch("evil.com")      ⊘ 거부

require가 없으면 접근도 없습니다. 거부하는 것은 코드 리뷰가 아니라 인터프리터입니다. 인증, 검증, intent는 선언적입니다.

에이전트 네이티브

이 페이지가 바로 데모입니다. 모든 라우트가 사람에게는 HTML을, 에이전트에게는 Markdown/JSON을 제공하며, /llms.txt, /sitemap.xml, /openapi.json은 라우트 테이블에서 자동으로 만들어집니다.

문서 사이트는 MCP 서버를 제공합니다. 에이전트는 하나의 엔드포인트로 코드를 검색하고, 읽고, 실행하고, 테스트합니다.

1 · Linux VPS에서 측정, 6개 워크로드, c=50, 여러 번 실행한 중앙값(첫 실행 제외). 재현 가능한 하네스: synsema-arena.

이것으로 만드는 것

AI 에이전트 프레임워크와 프로그래밍 언어를 하나의 바이너리에.

에이전트 앱에 필요한 모든 것이 언어 안에 있습니다. 위에 덧붙인 프레임워크가 아니라: LLM 호출, 도구 사용, 메모리, 사람의 승인, 멀티 에이전트 오케스트레이션, 프로덕션 서버, 그리고 보안 모델. 그래서 같은 언어로 에이전트 주변의 API, 사이트, cron, CLI까지 만듭니다.

에이전트

AI 에이전트와 LLM 앱

reason, decide, analyze, generate는 기본 요소입니다: 검증된 답변, 재시도, 어떤 제공자든, 시크릿으로 봉인된 키.

docs ↗

오케스트레이션

멀티 에이전트 시스템

실제 스레드 위의 에이전트, 공유 블랙보드, 시그널, 이벤트 버스, 지속되는 메모리. 운영할 메시지 브로커가 없습니다.

docs ↗

사람의 개입

승인과 게이트

approve, confirm, ask는 실제 사람을 기다립니다. 터미널에서, 또는 일회용 링크 뒤의 대기열에서. 아무도 없으면 거부됩니다.

docs ↗

도구

MCP 서버

프로그램이 할 수 있는 일을 Claude Code, Cursor, Lampson에 노출하세요. 문서 사이트 자체의 MCP 서버도 이렇게 작성되었습니다.

docs ↗

백엔드

REST API와 CRUD

라우트, 선언적 인증과 검증, 페이지네이션, SQLite, Postgres, MySQL, Mongo 또는 Redis. 파일 하나에, 프로덕션 서버 내장.

docs ↗

실시간

에이전트 앱

인바운드 WebSocket, 한 줄씩 지켜보는 자식 프로세스, 전부를 아우르는 하나의 select, 취소와 순서 있는 종료.

docs ↗

웹사이트, SSR

템플릿, 레이아웃, 컴포넌트. 모든 페이지가 에이전트를 위해 협상되고 /llms.txt, 사이트맵, OpenAPI가 공짜로 따라옵니다. 이 사이트가 그 예입니다.

docs ↗

배포

자동 HTTPS

--tls-auto you@site.com: Let's Encrypt 인증서와 갱신, HTTP/2, www에서 apex로, 필요하면 리버스 프록시.

docs ↗

하나의 앱: 웹, 휴대폰, 데스크톱

synsema init --desktop: 같은 서버 렌더링 앱이 Android와 iOS에는 네이티브 푸시가 있는 PWA로 설치되고, 데스크톱 앱으로도 배포됩니다 — 단일 바이너리, 브라우저 앱 창, 내 아이콘, 콘솔 없음.

docs ↗

자동화

Cron, 웹훅, 작업

예약 작업과 WebSocket 실시간 피드. 진짜 이벤트 루프 위에서 오래 도는 작업, 관측성 포함.

docs ↗

데이터

데이터와 차트

CSV, SQL, 통계, 숫자 배열, 그리고 에이전트는 데이터로, 사람은 그림으로 읽는 네이티브 SVG 차트. PNG와 PDF 내보내기.

docs ↗

배포판

단일 바이너리 또는 WASM

synsema build가 프로그램과 자산을 하나의 실행 파일로 봉인합니다. 인터프리터는 브라우저, 엣지, TEE에서도 돌아갑니다.

docs ↗

파일 하나

백엔드 전체, 권한은 맨 위에.

Synsema 프로그램은 무엇을 건드릴 수 있는지 선언하며 시작합니다. 그 줄 아래의 모든 것(라우트, 데이터베이스, 시크릿, 모델)이 그 안에서 실행됩니다. 아래 두 파일은 있는 그대로 파싱되고 실행됩니다.

api.synREST API 만들기 ↗
-- A bookshop API. The `require` lines are the whole permission
-- surface: a port, one database file, one secret. Nothing else.
intent: "public read API; writes need the staff token"

require serve(8080)
require db("./shop.db")
require secret("API_TOKEN")

task check_token(token)
    let want be hmac_sha256("staff", token)
    when verify_hmac("staff", want, secret("API_TOKEN"))
        give {"role": "staff"}
    give nothing

serve on 8080
    auth with check_token
    rate_limit 120 per minute

    route "GET /books"
        give paged("SELECT id, title, price FROM books")

    route "POST /books" requires auth
        expect body {title: text, price: number}
        let b be json of request
        sql_exec("INSERT INTO books (title, price) VALUES (?, ?)",
                 [b.title, b.price])
        give created(b)

    route "GET /about"
        let doc be page([heading(1, "Bookshop"),
                         prose("HTML or Markdown, one route.")],
                        {"title": "Bookshop"})
        give content(doc)
agent.synLLM 기본 요소 ↗
-- An agent that triages support tickets. The model decides;
-- a human approves refunds; the API key is a sealed secret.
intent: "triage open tickets; refunds wait for a human"

require llm
require net("api.example.com")
require secret("SUPPORT_TOKEN")

let api be "https://api.example.com"
let auth be {"Authorization": bearer(secret("SUPPORT_TOKEN"))}
let r be http_get(api + "/tickets?open=1", auth)
let tickets be json_decode(body of r)

each t in tickets
    let msg be t["text"]
    let kind be decide between ["bug", "billing", "other"] given msg
    when kind == "billing"
        let amount be analyze msg for "the amount to refund"
        let who be t["customer"]
        approve "Refund " + text(amount) + " to " + who + "?" within 1h
    otherwise
        let reply be generate "a short, kind answer" given msg
        let url be api + "/tickets/" + t["id"] + "/reply"
        http_post(url, {"text": reply}, auth)
  • require가 권한의 전부입니다. 포트 하나, 데이터베이스 파일 하나, 시크릿 하나. 다른 호스트로의 fetch는 인터프리터가 거부합니다.
  • 인증과 검증은 선언입니다. auth with는 토큰이 누구인지 판단하는 태스크를 지정하고, expect body는 잘못된 페이로드를 필드 이름이 담긴 400으로 거부합니다.
  • 하나의 라우트, 모든 독자. content()는 브라우저에 HTML을, 에이전트에 Markdown이나 JSON을 응답하고, paged()는 큰 결과를 대신 페이지로 나눕니다.
  • 모델은 기본 요소입니다. decide는 선택지 중 하나를 돌려주거나 재시도하고, analyzegenerate는 타입이 있습니다. 손으로 이어 붙인 프롬프트 문자열이 아닙니다.
  • 사람도 기본 요소입니다. approve … within 1h는 실제 사람을 기다리고, 아무도 없으면 거부합니다.
  • 시크릿은 절대 드러나지 않습니다. 키는 봉인된 채 소켓까지 이동하고, 모델은 자리표시자만 봅니다.

Synsema로 만든 것

오늘 바로 쓸 수 있는 세 가지.

코딩 에이전트

Lampson

터미널과 브라우저에서 쓰는 오픈소스 AI 코딩 에이전트, 전부 Synsema로 작성. 도구는 프로젝트 안에 갇히고, 권한은 당신이 통제하며, 서브 에이전트, 예약 작업, 플러그인을 갖췄습니다.

lampson.org ↗

에이전트의 능력

Lamps

이식 가능한 능력 단위: 매니페스트가 코드가 건드릴 수 있는 것을 선언하고, 런타임이 이를 강제하며 모든 호출을 감사합니다. lamp add 다음 lamp mcp로 Claude Code, Cursor, 어떤 MCP 에이전트에서든.

lamps.sh ↗

배우기

Try Synsema

브라우저에서 실제 비즈니스를 위한 소프트웨어를 만들며 배우세요: 강좌, 실제 샌드박스에서 검증되는 미션, XP와 레벨. 설치 불필요.

try.synsema.com ↗

블로그에서

벤치마크, 설계 결정, 실전 가이드.

모든 글 → · RSS