Profile img

Jaeyeol Lee

@kodingwarrior@hackers.pub · 697 following · 509 followers

Neovim Super villain. 풀스택 엔지니어 내지는 프로덕트 엔지니어라고 스스로를 소개하지만 사실상 잡부를 담당하는 사람. CLI 도구를 만드는 것에 관심이 많습니다.

Hackers' Pub에서는 자발적으로 바이럴을 담당하고 있는 사람. Hackers' Pub의 무궁무진한 발전 가능성을 믿습니다.

그 외에도 개발자 커뮤니티 생태계에 다양한 시도들을 합니다. 지금은 https://vim.kr / https://fedidev.kr 디스코드 운영 중

ImageBlog
kodingwarrior.github.io
Imagemastodon
@kodingwarrior@silicon.moe
ImageGithub
@malkoG
0
0
3

Dear FOSS maintainers,

here’s a list of funding programs currently accepting proposals for maintenance work:

Codeberg: codeberg.org/mechko/awesome-ma

GitHub: github.com/mechko/awesome-main

Thanks to everyone who helped crowdsource it! I’ll keep it updated, issues and PRs are very welcome :)

0
0
1
1
0

Claude Code Hook으로 영어 공부하기 https://torch.vision/posts/claude-english-lecturer-hook

좋은 글

profile image

Claude Code Hook으로 영어 공부하기

배경 설명 평소에 영어로 프롬프트를 작성하면 모델이 더 좋은 성능을 보일 것이라고 생각하였고 겸사겸사 영어에 더 익숙해지기 위해서 되도록 Claude Code, Codex 등을 사용할 때는 영어로 prompt를 작성하였습니다. 그러나 이 경우에 부족한 영어 실력 때문에 의미나 뉘앙스가 잘못 전달되는 경우가 종종 있었습니다. 처음에는 prompt rewriter를 만들어서 기존 프롬프트를 자동으로 교정된 버전으로 대체하는 hook을 만들려고 했습니다. 하지만 Claude Code의 hook 시스템은 기존 프롬프트를 수정하는 것이 아니라 추가적인 프롬프트만 제공할 수 있었습니다. 또한 추가적인 프롬프트 제공도 완벽하지 않다는 이슈들이 있어 실제로 적용하는 데 어려움이 있었습니다. issue link 그러다 jiun.dev의 글에서 영어 공부용으로 hook을 활용하는 아이디어를 얻었고, 이를 참고해서 영어 공부용으로 수정해보기로 했습니다. 구현 저는 모델 성능 저하를 최소화하고 싶었기 때문에 메인 프롬프트에 context가 주입되지 않는 것이 이상적이었습니다. 이를 위하여 2가지 방법을 사용하였습니다. 메인 Claude Code 프로세스에서 영어 공부 프롬프트를 처리하지 않고 별도의 Claude Code 서브 프로세스에서 non-interactive모드와 structured output을 사용하여 처리하도록 하였습니다. hook의 output으로 systemMessage를 사용하여 유저에게만 메시지가 보일 수 있도록 하였습니다. (관련 claude code 문서) 이때 별도의 Claude Code 프로세스를 non-interactive 모드로 실행하더라도 hook이 주입되기 때문에 환경변수를 통해 아주 간단한 LOCK을 구현하였습니다. disableAllHooks 옵션을 통해 hook을 비활성화 할 수 있으나 이 경우에 structured output이 필요로하는 SDK hook이 동작하지 않아 structured output을 받을 수 없습니다. 설정 방법 1. 스크립트 설치 아래 스크립트를 ~/.claude/english-lecturer.sh로 저장합니다. ( 제 dotfiles 레포에서도 확인가능합니다 ) #!/bin/bash # acknowledge: https://github.com/crescent-stdio for prompt if [[ -n "$REWRITER_LOCK" ]]; then exit 0 fi INPUT_PROMPT="$(cat | jq '.prompt')" TARGET_LANGUAGE="Korean" JSON_SCHEMA=' { "type": "object", "properties": { "enhanced_prompt": { "type": "string", "description": "The improved prompt preserving original meaning" }, "has_corrections": { "type": "boolean", "description": "Whether the original prompt had any issues to improve" }, "corrections": { "type": "array", "items": { "type": "object", "properties": { "original": { "type": "string" }, "suggestion": { "type": "string" }, "category": { "type": "string", "enum": ["grammar", "vocabulary", "style", "spelling", "word_order"] }, "explanation": { "type": "string" } }, "required": ["original", "suggestion", "category", "explanation"] }, "description": "Gentle improvement suggestions, max 3 items" }, "tip": { "type": "string", "description": "One concise learning tip" } }, "required": ["enhanced_prompt", "has_corrections", "corrections", "tip"] } ' INPUT_PROMPT="\ You are a supportive, encouraging English coach for a $TARGET_LANGUAGE developer. Analyze the prompt below and return structured JSON. Rules: 1. enhanced_prompt: Rewrite to be clear, natural, professional English. Preserve the original intent exactly. If the prompt is code-only or already perfect English, return it unchanged. 2. has_corrections: true if you made any meaningful improvements, false if the prompt was already correct or is pure code/commands. 3. corrections: List up to 3 gentle improvement suggestions. Each must have: - original: the phrase from the original prompt - suggestion: the improved phrase - category: one of grammar, vocabulary, style, spelling, word_order - explanation: brief explanation in $TARGET_LANGUAGE (1 sentence, max 20 words). 4. tip: One memorable tip in $TARGET_LANGUAGE (1 sentence, max 30 words) about the most useful pattern. If no corrections, share a useful English expression tip. Focus on patterns $TARGET_LANGUAGE speakers commonly struggle with: articles (a/the), prepositions, singular/plural, tense consistency, word order. <PROMPT> $INPUT_PROMPT </PROMPT>\ " RESPONSE="$( \ REWRITER_LOCK=1 claude \ --no-session-persistence \ --model sonnet \ --output-format json \ --json-schema "$JSON_SCHEMA" \ -p "$INPUT_PROMPT" )" STRUCTURED_OUTPUT="$(echo "$RESPONSE" | jq -r '.structured_output')" # echo 'This is lesson message for user. Assistant should dismiss it.' if [[ -z "$STRUCTURED_OUTPUT" || "$STRUCTURED_OUTPUT" == "null" ]]; then OUTPUT_PROMPT="Failed to generate lesson." exit 0 fi ENHANCED="$(echo "$STRUCTURED_OUTPUT" | jq -r '.enhanced_prompt')" HAS_CORRECTIONS="$(echo "$STRUCTURED_OUTPUT" | jq -r '.has_corrections')" TIP="$(echo "$STRUCTURED_OUTPUT" | jq -r '.tip')" OUTPUT_PROMPT="$ENHANCED" if [[ "$HAS_CORRECTIONS" == "true" ]]; then CORRECTIONS_DISPLAY="$(echo "$STRUCTURED_OUTPUT" | jq -r ' .corrections[] | "- ✅ \(.category): \(.original) → \(.suggestion)\n - \(.explanation)\n" ')" OUTPUT_PROMPT="$OUTPUT_PROMPT $CORRECTIONS_DISPLAY" fi OUTPUT_PROMPT=" $OUTPUT_PROMPT ✨ $TIP" OUTPUT_PROMPT="$(echo -e "$OUTPUT_PROMPT")" # escape newlines OUTPUT_PROMPT="${OUTPUT_PROMPT//$'\n'/\\n}" # escape double quotes OUTPUT_PROMPT="${OUTPUT_PROMPT//\"/\\\"}" echo "{ \"suppressOutput\": false, \"systemMessage\": \"$OUTPUT_PROMPT\" }" exit 0 2. 설정 파일 수정 ~/.claude/settings.json에 다음 내용을 추가합니다. { "hooks": { "UserPromptSubmit": [ { "hooks": [ { "type": "command", "command": "~/.claude/english-lecturer.sh" } ] } ] } } 혹은 아래 명령어를 실행합니다. jq '.hooks.UserPromptSubmit = ((.hooks.UserPromptSubmit // []) + [{"hooks": [{"type": "command", "command": "~/.claude/english-lecturer.sh"}]}])' ~/.claude/settings.json > /tmp/settings.json && mv /tmp/settings.json ~/.claude/settings.json 3. 커스터마이징 스크립트 내의 다음 변수들을 수정해서 동작을 변경할 수 있습니다. TARGET_LANGUAGE: 문법 설명의 언어 (기본값: “Korean”) JSON_SCHEMA: Claude로부터 받을 응답의 구조 (프롬프트를 크게 변경하지 않는다면 수정이 필요하지 않습니다) 사용 모델 (기본값: “sonnet” / haiku의 경우 빠르긴 하나 성능이 떨어졌습니다) 이제 프롬프트를 제출할 때마다 자동으로 교정된 버전과 짧은 문법 설명을 받을 수 있습니다. Appendix: change log 2026/02/06: Claude Code에 추가된 systemMessage 기능 사용-history toggle 없이 표시, --no-session-persistence 옵션 추가 2026/02/02: 프롬프트 개선 2026/01/31: 포스트 첫 작성

torch.vision · Lab of ryul99

2

일을 대하는 태도가 많이 바뀔수밖에 없다. 예전 같으면 코드를 직접 작성하는게 시간적으로 해결못할 일이니 그냥 그대로 두거나 넘어갔다.

이제 개념적으로 이해할 수 있는 일이라면 코딩 자체는 문제가 아니니 문제와 해결법에 더 집중 가능한 형태가 된듯

ㅋㅋㅋ 예전 같으면 넘어갔을 아주 사소한 변경을 오픈 소스에 기여하고 거창한 말을 해보았음ㅋㅋㅋ

결론적으론 뿌듯하다

https://github.com/SchemaStore/schemastore/pull/5332

1

팀에 Claude Code LSP 도대체 어떻게 쓸모있냐고 여러번 핑퐁 때려봤는데 결론은 지금 정도 프로젝트의 코드베이스에서는 find/grep으로 충분하다는 것....

이런 대답까지 받았다...

  Honest take: LSP in Claude Code is a nice-to-have, not a game-changer

  For most workflows, grep/glob is sufficient. Claude already navigates
  codebases well with text-based search. The token window is large enough
   that reading files directly works fine.

  Where to focus the demo

  Don't demo LSP as a standalone feature. Instead, frame it as:

  1. Automatic diagnostics after edits — this is the most valuable part.
  Claude edits a file → LSP catches type errors immediately → Claude
  fixes them without running tsc. This is invisible to the user but saves
   real time. Demo this.
  2. Precision in ambiguous situations — show a case where grep returns
  50+ matches for a common name like value or data, then LSP's
  findReferences returns only the 3 semantically correct ones. This is
  compelling visually.
  3. Call hierarchy is unique — incomingCalls/outgoingCalls genuinely
  can't be replicated by grep. Show tracing a function's impact through a
   large file. Good for "should I change this function?" scenarios.

  What NOT to emphasize

  - Don't position it as a replacement for grep — it's not
  - Don't show basic goToDefinition — grep does this fine
  - Don't focus on the prompting experience — it's awkward (file, line,
  character is unnatural)

  One-liner pitch

  "LSP gives Claude type-aware code understanding — it catches errors
  after edits automatically and provides semantic precision when text
  search isn't enough."
2

Opus가 말아주는 할루시네이션향이 살짝 들어간 Plan보다 더 퀄리티 높여서 사람이 수제로 생각해서 말아주는 Plan을 잘 작성하는 의도적인 수련을 하고 있음.

확실히 이러는 편이 생각을 좀 더 체계적으로 만드는데 도움이 되는 듯

3
1

:new_l:​ 한국 신규 가입 개방 안내 ​:new_r:

항상 Misskey.io를 이용해 주셔서 감사합니다.
오늘부터 한국에서도 Misskey.io 신규 가입이 가능해졌습니다!

기본 설정에서는,
일반 게시물은 언어에 관계없이 모든 언어 타임라인에 표시되고,
미디어가 포함된 게시물과 해시태그가 붙은 게시물만 언어에 따라 각각의 타임라인에 표시됩니다.

미디어/해시태그가 타임라인에 보이지 않게 하고 싶거나,
일본어 게시물까지 포함해 언어 구분 없이 전부 보고 싶은 경우에는
설정 > 타임라인과 노트 에서 각자 원하는 표시 방식으로 변경할 수 있습니다.

앞으로도 Misskey.io를 잘 부탁드립니다!


:new_l:​ 韓国への新規登録解放のお知らせ ​:new_r:

いつもMisskey.ioを利用いただきありがとうございます。
本日より韓国からの新規登録が可能になりました!

デフォルト設定(日本ユーザー基準)では、
通常投稿は各言語のタイムラインに流れ、
メディア付き投稿とハッシュタグ投稿のみ言語に関係なく流れてきます。

メディアやハッシュタグを流したくない場合や、
韓国語の投稿も含めて言語を問わず全部見たい場合は、
設定 > タイムラインとノート から各自でお好みに合わせて変更できます。

今後ともMisskey.ioをよろしくお願いします。

10
0
1
0
0
7
0

I had thought about this, but I am not sure how to handle paid RSVP. Monetization matters. We can consider attaching external link, but, I think it is not complete solution

These are ideal and fit into my mental model.

https://event-us.kr/ (korean), https://connpass.com/ (japanese)

But I don't know how to complete implement paid RSVP for fediverse. That's bottleneck

2

antigravity를 잠깐 켜서 Solid 프로젝트 생성을 해봤습니다. 뭔가 외부 상태가 happy path에 있으면 깔끔하게 진행되는 거 같은데, 뭐가 잘 안되면 git user.name 세팅을 제멋대로 넣는다던가 node 버전이 낮다고 node를 업글하는 게 아니라 vite를 다운그레이드(...)하려고 하는 등 조금 당황스러웠습니다. 다행히 필요한 세팅을 다 해 놓고 처음부터 다시 돌리니 잘 됩니다.

2
0
0

해커스펍 기여에 대한 생각...

해커스펍 안드로이드 앱 개발을 바이브코딩의 힘으로 불도저처럼 파바박 진도나가고 있는데, 해커스펍 웹 리뉴얼 버전이 만들어지는 것보다 모바일 앱이 소셜 기능 개발 한정으로는 빨리 만들어지지 않을까 싶은 생각이 든다.

API 뚫고 프론트엔드 붙이는 PR 작업하는 흐름이면 API 뚫은거에 대해서도 리뷰해야하고 UI/UX 리뷰도 들어가야 해서 어떤 기능이 추가되기까지의 주기가 길어질 수 밖에 없다. 안드로이드 앱도 iOS 앱도 GraphQL query/mutation이 추가되기를 기다리는게 병목인데, 웹 UI가 만들어지기를 손빨고 기다리는건 더한 병목이 된다.

하지만, API만 뚫어놓는 PR도 들어갈 수 있다면? 웹 프론트엔드 쪽 UI가 들어가기도 전에 모바일 앱에 해당 API를 활용하는 기능이 들어갈 수 있다. 지금 당장에도 멘션 자동완성 기능을 웹 리뉴얼보다 먼저 안드로이드 앱에 넣어버렸고, 웹 UI는 병렬적으로 리뷰단계에 있다.

사실은 해커스펍 기여하는데 있어서도 어떤 부분이 병목이 되고 있는지도 투명하게 공유될 수 있으면 좋겠다.

해커스펍 안드로이드 클라이언트에서 멘션 자동완성 기능이 들어간 모습이다. kodingwarrior 계정을 멘션한 다음, hongminhee 계정 멘션이 자동완성이 되고 있다.
8

"빠른 RAG"가 아니라 "내 데이터를 내가 소유하는 RAG"를 만들고 싶었습니다.

기술과 프레임워크를 만드는 과정은 결코 쉽지 않습니다. 실제 현장의 피드백을 듣고 방향을 잡아가는 일이 때로는 힘들지만, 꼭 거쳐가야 할 관문이겠죠.

너도 나도 빠르게 돈을 태워 RAG를 구축해가는 상황 속에서, 빈자의 RAG, 정제된 RAG, 통제 가능한 RAG를 만들어보고 싶다는 생각으로 출발한 아이디어를 계속 다듬어 나가고 있습니다.

👉 https://github.com/rkttu/reconsidered_rag

2
0
0
1
2
3
5

"아무도 안 만드는 것 같아서 내가 해야지"하고 해커스펍 안드로이드 클라이언트를 Jetpack Compose로 바이브코딩했는데 내가 코어 메인테이너가 되어버린 건에 대하여

https://github.com/hackers-pub/android

1

"아무도 안 만드는 것 같아서 내가 해야지"하고 해커스펍 안드로이드 클라이언트를 Jetpack Compose로 바이브코딩했는데 내가 코어 메인테이너가 되어버린 건에 대하여

https://github.com/hackers-pub/android

6
0
0
0
4
0
0
2
3
0
1
2
0
0