diff --git a/web-ui/js/app/workshop-chat.js b/web-ui/js/app/workshop-chat.js
index 941a7f8..6a4af4f 100644
--- a/web-ui/js/app/workshop-chat.js
+++ b/web-ui/js/app/workshop-chat.js
@@ -52,6 +52,15 @@ function renderMd(text){
s=s.replace(/`([^`]+)`/g,'$1')
.replace(/\*\*(.+?)\*\*/g,'$1')
.replace(/^#{1,3}\s+(.+)$/gm,'
$1
');
+ // 링크 — [라벨](URL) → . 작업실 채팅엔 링크 지원이 아예 없어 모델이 표에 넣어준
+ // 출처 링크(Printables 바로가기 등)가 클릭 불가 평문이었다(2026-09-25 사용자 실측).
+ // 이스케이프(47행) 이후에 돌리므로 URL 속 & 는 & — href 속성값으로 그대로 맞다.
+ s=s.replace(/\[([^\]\n]+)\]\((https?:[^)\s]+)\)/g,
+ '$1');
+ // 남는 벌주 URL도 자동 링크. 이미 만든 안은 앞 글자가 "라 안 걸리고,
+ // 표/리스트 처리 전이라 셀 안에서도 살아난다.
+ s=s.replace(/(^|[\s>])(https?:\/\/[^\s<)"'\u0000]+)/g,(m,pre,url)=>
+ pre+''+url+'');
// 인라인 수식 $...$ — KaTeX가 실려 있으면 삽입 직후 renderKatexIn이 진짜 수식으로
// 그려주므로 그냥 둔다(09-24: 다른 앱들은 전부 KaTeX 실려 있었는데 작업실만 빠져 있었다).
// KaTeX가 없는 환경의 폴백으로만 이 유니코드 치환을 돌린다. 자주 나오는 LaTeX 기호를