Aleph
๐ License: MIT
๐ Python 3.10+
๐ PyPI version
Aleph๋ **์ฌ๊ท์ ์ธ์ด ๋ชจ๋ธ(RLM)**์ ์ํ MCP ์๋ฒ์ด์ ๊ธฐ์ (skill)์ ๋๋ค. ๊ฒ์ ์ธ๋ฑ์ค, ์ฝ๋ ์คํ, ์ฆ๊ฑฐ, ์ฌ๊ท์ ๊ฐ์ ์์ ์ํ๋ฅผ ํ๋กฌํํธ ์ฐฝ ์ธ๋ถ์ Python ํ๋ก์ธ์ค์์ ์ ์งํ๋ฏ๋ก, LLM์ ์์ ์ฝํ ์ธ ๋ก ์ปจํ ์คํธ๋ฅผ ๋ญ๋นํ์ง ์๊ณ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค, ์ฅ๊ธฐ ํ๋ก์ ํธ, ๋ก๊ทธ, ๋ฌธ์ ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ถ๋ก ํ ์ ์์ต๋๋ค.
+-----------------+ tool calls +-----------------------------+
| LLM client | ---------------> | Aleph (Python process) |
| (context budget)| <--------------- | search / peek / exec / sub |
+-----------------+ small results +-----------------------------+Aleph๋ฅผ ์ฌ์ฉํ๋ ์ด์ :
ํ ๋ฒ ๋ก๋ํ๊ณ ์ฌ๋ฌ ๋ฒ ์ถ๋ก . ๋ฐ์ดํฐ๋ ํ๋กฌํํธ๊ฐ ์๋ Aleph ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํฉ๋๋ค.
์๋ฒ ์ธก ์ปดํจํ .
exec_python์ ์ ์ฒด ์ปจํ ์คํธ์ ๋ํด ์ฝ๋๋ฅผ ์คํํ๊ณ ํ์๋ ๊ฒฐ๊ณผ๋ง ๋ฐํํฉ๋๋ค. JS/TS ์ ์ฅ์์ ๊ฒฝ์ฐexec_javascript์exec_typescript๊ฐ ๋์ผํctx์์์ ์ง์์ ์ธ Node.js ๋ฐํ์์ ์ ๊ณตํฉ๋๋ค.์ฌ๊ท. ํ์ ์ฟผ๋ฆฌ์ ๋ ์ํผ๋ ๋ณต์กํ ์์ ์ ์ฌ๋ฌ ์ถ๋ก ๋จ๊ณ๋ก ๋ถํ ํฉ๋๋ค.
์์ ๊ณต๊ฐ ์ ์ง. ์ปจํ ์คํธ๋ฅผ ํ์ผ์ด๋ ์์ฑ๋ ์์ ๊ณต๊ฐ ๋งค๋ํ์คํธ์ ๋ค์ ๋ฐ์ธ๋ฉํ๊ณ , ์ด๋ฅผ ์๋ก ๊ณ ์น๋ฉฐ, ๋์ค์ ๊ธด ์กฐ์ฌ๋ฅผ ์ฌ๊ฐํ ์ ์์ต๋๋ค.
๋น ๋ฅธ ์์
pip install "aleph-rlm[mcp]"
aleph-rlm install --profile claude # or: codex, portable, api
aleph-rlm doctor # verify everything is wired up๊ทธ๋ฐ ๋ค์ MCP ํด๋ผ์ด์ธํธ๋ฅผ ๋ค์ ์์ํ๊ณ Aleph๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํฉ๋๋ค:
get_status()
list_contexts()์ ํ ์ฌํญ์ธ /aleph(Claude Code) ๋๋ $aleph(Codex) ๊ธฐ์ ๋ฐ๋ก๊ฐ๊ธฐ๋ ๊ตฌ์กฐํ๋ RLM ์ํฌํ๋ก์ฐ๋ฅผ ์์ํฉ๋๋ค. ํด๋ผ์ด์ธํธ์ ๋ช
๋ น/๊ธฐ์ ํด๋์ docs/prompts/aleph.md๋ฅผ ์ค์นํ์ธ์. ์ ํํ ๊ฒฝ๋ก๋ MCP_SETUP.md๋ฅผ ์ฐธ์กฐํ์ธ์.
์ค์ ์ ์ฅ์์์ ์์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ์์ ํ ๊ธฐ๋ณธ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
aleph --enable-actions --action-policy read-onlyCursor
--workspace-mode any๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ ์ญ MCP(aleph-rlm install cursor)๋ฅผ ์ฌ์ฉํ๊ณ , ${workspaceFolder} + --workspace-mode fixed๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ก์ ํธ MCP(aleph-rlm install cursor-project ์ ์ฅ์์์ ์คํ)๋ฅผ ์ฌ์ฉํ์ธ์. ์ฑํ
, Composer ๋ฐ Cursor CLI๋ ํด๋น MCP ๊ตฌ์ฑ์ ๊ณต์ ํฉ๋๋ค. Cursor ํ์ฅ์ ์ ํ ์ฌํญ์ด๋ฉฐ Aleph์ ํ์๋ ์๋๋๋ค. MCP_SETUP.md๋ฅผ ์ฐธ์กฐํ์ธ์.
Related MCP server: BigContext MCP
์ง์ ์
๋ช ๋ น | ๋ชจ๋ | ๊ธฐ๋ฅ |
|
| MCP ์๋ฒ. MCP ํด๋ผ์ด์ธํธ๊ฐ ์คํํ๋ ์๋ฒ์ ๋๋ค. ์ปจํ ์คํธ ๊ด๋ฆฌ, ๊ฒ์, ์ฝ๋ ์คํ, ์ถ๋ก , ์ฌ๊ท ๋ฐ ์์ ๋๊ตฌ๋ฅผ ์ํ 30๊ฐ ์ด์์ ๋๊ตฌ๋ฅผ ๋ ธ์ถํฉ๋๋ค. |
|
| ์ค์น ํ๋ก๊ทธ๋จ ๋ฐ CLI. MCP ํด๋ผ์ด์ธํธ ์ค์ ์ ์ํ |
์ค์น ํ๋กํ
aleph-rlm install์ ์ฌ์ฉํ ํ์ ์ฟผ๋ฆฌ ํ๋กํ์ ๋ฌป์ต๋๋ค. ํ๋กํ์ ์ฌ๊ท์ ์ถ๋ก ์ ์ํด sub_query ๋ฐ sub_query_batch๊ฐ ์์ฑํ๋ ์ค์ฒฉ๋ ๋ฐฑ์๋๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
ํ๋กํ | ๊ณ ์ ๋์ |
| ์ค์ฒฉ๋ ๋ฐฑ์๋ ์์ โ ๋์ค์ ์ ํํ๊ฑฐ๋ ์๋ ๊ฐ์ง์ ์์กด |
| Claude CLI: |
| Codex MCP: |
| OpenAI ํธํ API โ |
aleph-rlm install claude-code --profile claude
aleph-rlm configure --profile codex # overwrite existing config๋ชจ๋ ํ๊ฒฝ ๋ณ์, CLI ํ๋๊ทธ ๋ฐ ๋ฐํ์ configure(...) ์ต์
์ docs/CONFIGURATION.md๋ฅผ ์ฐธ์กฐํ์ธ์.
๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค ์ํฌํ๋ก์ฐ
์ฃผ์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์ ์ฅ์๋ ๋ค์ค ํด๋ ํ๋ก์ ํธ์ธ ๊ฒฝ์ฐ, ์์ ์์ค ํ์ผ์ ๋ชจ๋ธ ์ฐฝ์ ๋์ง๋ ๋์ ์์ถ๋ ์์ ๊ณต๊ฐ ๋งค๋ํ์คํธ๋ฅผ ๋ก๋ํ๋ ๊ฒ๋ถํฐ ์์ํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ธ์ ํ๋ก์ ํธ ์ง๋๊ฐ ์ ๊ณต๋์ด ์ ๊ทน์ ์ผ๋ก ๊ฒ์ํ ์ ์์ผ๋ฉฐ, ์ ์ฅ์๊ฐ ๋ณ๊ฒฝ๋ ๋ ์ธ์ ์ ์๋ก ๊ณ ์น ์ ์์ต๋๋ค.
load_workspace_manifest(paths=["src", "tests"], context_id="repo")
rg_search(pattern="FastAPI|APIRouter|router\\.", paths=["src", "tests"], load_context_id="routes")
load_file(path="pyproject.toml", context_id="pyproject")
exec_python(code="""
files = [line for line in ctx.splitlines() if line.startswith("- ")]
summary = {
"indexed_entries": len(files),
"top_python_files": [line for line in files if "| python |" in line][:10],
}
""", context_id="repo")
get_variable(name="summary", context_id="repo")
refresh_context(context_id="repo")๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค ๋ฐ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ์ง์
์ ์ผ๋ก load_workspace_manifest๋ฅผ ์ฌ์ฉํ์ธ์. ๊ทธ๋ฐ ๋ค์ load_file๋ก ํน์ ํ์ผ์ ๊ฐ์ ธ์ค๊ณ , rg_search๋ก ์ ์ฅ์๋ฅผ ๊ฒ์ํ๋ฉฐ, ์์
๊ณต๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ฐ์ธ๋ฉ๋ ์ปจํ
์คํธ๋ฅผ ์๋ก ๊ณ ์น์ธ์. ์๋ก ๊ณ ์นจ์ ์ธ์
์ ์ถ๋ก ์ํ, ์ฆ๊ฑฐ ๋ก๊ทธ ๋ฐ ์ถ์ ๋ ์์
์ ๋ณด์กดํฉ๋๋ค.
๋จ์ผ ํ์ผ ์ํฌํ๋ก์ฐ
Aleph๋ ํ๋์ ํฐ ํ์ผ์ ํ ๋ฒ ๋ก๋ํ๊ณ , Aleph ๋ด๋ถ์์ ๋ฌด๊ฑฐ์ด ์์ ์ ์ํํ ๋ค์, ์์ถ๋ ๋ต๋ณ๋ง ๊ฐ์ ธ์ฌ ๋๋ ๊ฐ๋ ฅํฉ๋๋ค.
load_file(path="/absolute/path/to/large_file.log", context_id="doc")
search_context(pattern="ERROR|WARN", context_id="doc")
peek_context(start=1, end=60, unit="lines", context_id="doc")
exec_python(code="""
errors = [line for line in ctx.splitlines() if "error" in line.lower()]
result = {
"error_count": len(errors),
"first_error": errors[0] if errors else None,
}
""", context_id="doc")
get_variable(name="result", context_id="doc")
save_session(context_id="doc", path=".aleph/doc.json")์ค์ํ ์ต๊ด์ ์๋ฒ ์ธก์์ ๊ณ์ฐํ๋ ๊ฒ์
๋๋ค. get_variable("ctx")๋ฅผ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ก ์ทจ๊ธํ์ง ๋ง์ธ์. ๋จผ์ ๊ฒ์, ํํฐ๋ง, ์ฒญํฌ ์ฒ๋ฆฌ ๋๋ ์์ฝํ ๋ค์ ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ํ์ธ์.
MCP ๋์ ํฐ๋ฏธ๋ ์ ์ฉ ๋ชจ๋๋ฅผ ์ํ๋ฉด ๋ค์์ ์ฌ์ฉํ์ธ์:
aleph run "Summarize this log" --provider cli --model codex --context-file app.log๋ก์ปฌ ๋ชจ๋ธ (llama.cpp)
Aleph๋ ํด๋ผ์ฐ๋ API ๋์ ๋ก์ปฌ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ์, ์ฝ๋ ์คํ, ์๋ ด์ด๋ผ๋ ์ ์ฒด RLM ๋ฃจํ๋ฅผ API ๋น์ฉ ์์ด ์์ ํ ๋ก์ปฌ ๋จธ์ ์์ ์คํํฉ๋๋ค.
์ ์ ์กฐ๊ฑด: llama.cpp ๋ฐ GGUF ๋ชจ๋ธ ํ์ผ.
# Install llama.cpp
brew install llama.cpp # Mac
winget install ggml.LlamaCpp # Windows
# Start the server with your model
llama-server -m /path/to/model.gguf -c 16384 -ngl 99 --port 8080์คํ ์ค์ธ ์๋ฒ๋ฅผ Aleph์ ์ง์ ํ์ธ์:
export ALEPH_PROVIDER=llamacpp
export ALEPH_LLAMACPP_URL=http://127.0.0.1:8080
export ALEPH_MODEL=local
aleph๋๋ Aleph๊ฐ ์๋์ผ๋ก ์๋ฒ๋ฅผ ์์ํ๋๋ก ํ์ธ์:
export ALEPH_PROVIDER=llamacpp
export ALEPH_LLAMACPP_MODEL=/path/to/model.gguf
export ALEPH_LLAMACPP_CTX=16384
export ALEPH_MODEL=local
alephQwen 3.5 9B (Q8_0, ~9 GB)๋ก ํ
์คํธ๋์์ต๋๋ค. ๋ชจ๋ GGUF ๋ชจ๋ธ์ด ์๋ํ๋ฉฐ, ๋ ํฐ ๋ชจ๋ธ์ผ์๋ก RLM ๋ฃจํ์์ ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ถ๋ก /์ฌ๊ณ ๋ฅผ ์ง์ํ๋ ๋ชจ๋ธ(Qwen 3.5, QwQ ๋ฑ)์ ์๋์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๋ชจ๋ ALEPH_LLAMACPP_* ๋ณ์๋ CONFIGURATION.md๋ฅผ ์ฐธ์กฐํ์ธ์.
์ผ๋ฐ์ ์ธ ์ํฌ๋ก๋
์๋๋ฆฌ์ค | Aleph์ ์ฅ์ |
๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค / ํ๋ก์ ํธ ๋ถ์ | ์์ ๊ณต๊ฐ ๋งต ๊ตฌ์ถ, ๋น ๋ฅธ ๊ฒ์, ์ค์ํ ํ์ผ๋ง ๋ก๋, ์ธ์ ์๋ก ๊ณ ์นจ ๊ฐ๋ฅ |
๋๊ท๋ชจ ๋ก๊ทธ ๋ถ์ | ๋์ฉ๋ ํ์ผ ๋ก๋, ํจํด ์ถ์ , ์ด๋ฒคํธ ์๊ด๊ด๊ณ ๋ถ์ |
์ฝ๋๋ฒ ์ด์ค ํ์ | ์ฌ๋ณผ ๊ฒ์, ๊ฒฝ๋ก ๊ฒ์ฌ, ๋์ ์ถ์ |
๋ฐ์ดํฐ ํ์ | Python ๋์ฐ๋ฏธ๋ฅผ ์ฌ์ฉํ์ฌ JSON, CSV ๋ฐ ํผํฉ ํ ์คํธ ๋ถ์ |
๊ธด ๋ฌธ์ ๊ฒํ | PDF, Word ๋ฌธ์, HTML ๋ฐ ์์ถ ๋ก๊ทธ ๋ก๋ |
์ฌ๊ท์ ์กฐ์ฌ | ํ๋์ ๊ฑฐ๋ํ ํ๋กฌํํธ ๋์ ํ์ ์ฟผ๋ฆฌ๋ก ์์ ๋ถํ |
์ฅ๊ธฐ ์คํ ์ธ์ | ์ธ์ ๊ฐ ๋ฉ๋ชจ๋ฆฌ ํฉ ์ ์ฅ ๋ฐ ์ฌ๊ฐ |
ํต์ฌ ๋๊ตฌ
์นดํ ๊ณ ๋ฆฌ | ์ฃผ์ ๋๊ตฌ | ๊ธฐ๋ฅ |
์ปจํ ์คํธ ๋ก๋ |
| ๋ฐ์ดํฐ๋ฅผ Aleph ๋ฉ๋ชจ๋ฆฌ์ ๋ฃ๊ณ , ์์ ๊ณต๊ฐ ์์ฐ์ ๋ค์ ๋ฐ์ธ๋ฉํ๋ฉฐ, ๋ก๋๋ ํญ๋ชฉ ๊ฒ์ฌ |
ํ์ |
| ๋ต๋ณ์ ์์ฒญํ๊ธฐ ์ ์ ๊ด๋ จ ์กฐ๊ฐ ์ฐพ๊ธฐ |
์ปดํจํ |
| ์ ์ฒด ์ปจํ ์คํธ์ ๋ํด Python ๋๋ JS/TS๋ฅผ ์คํํ๊ณ ํ์๋ ๊ฒฐ๊ณผ๋ง ๊ฒ์ |
์ถ๋ก |
| ์งํ ์ํฉ์ ๊ตฌ์กฐํํ๊ณ ์ฆ๊ฑฐ์ ํจ๊ป ๋ง๋ฌด๋ฆฌ |
์ค์ผ์คํธ๋ ์ด์ |
| ๋ฐฑ์๋ ์ ํ ๋ฐ ๋ฐ๋ณต์ ์ธ ์ถ๋ก ํจํด ์๋ํ |
์ง์์ฑ |
| ํ๋กฌํํธ ์ฐฝ ์ธ๋ถ์์ ๊ธด ์กฐ์ฌ ์ ์ง |
Python vs JS/TS REPL
Aleph์ ๊ธฐ๋ณธ ์ ์ด ๊ณ์ธต์ ์ฌ์ ํ Python์
๋๋ค. exec_python์ ๋ฒ์ฉ ๋ถ์, ๋ ์ํผ ๋ฐ ์ค์ผ์คํธ๋ ์ด์
์ ์ํ ๊ธฐ๋ณธ REPL๋ก ์ ์ง๋ฉ๋๋ค.
์ ์ฒด Aleph ํ๋ฉด์ ์ด ํ์ํ ๋
exec_python์ ์ฌ์ฉํ์ธ์: Python ์ฐ์ ํ๋กฌํํธ, Python์ ์์น/๊ธฐํธ ์คํ(cmath,mpmath,decimal,fractions,statistics,numpy,scipy,sympy,networkx) ๋๋run_recipe_code๋ฅผ ํตํ ๋ ์ํผ ์คํ.๋์ ์ ์ฅ์๋ ๋ถ์์ด ์์ฐ์ค๋ฝ๊ฒ JS/TS ํํ์ด๊ณ ์ง์์ ์ธ Node ์ํ, JS ๋ค์ดํฐ๋ธ ๋ฐฐ์ด/๊ฐ์ฒด ์กฐ์ ๋๋
await๋ฅผ ์ฌ์ฉํ ๋น๋๊ธฐ ์ฌ๊ท๋ฅผ ์ํ ๋exec_javascript/exec_typescript๋ฅผ ์ฌ์ฉํ์ธ์.exec_python๋ ์ํผ DSL ๋์ฐ๋ฏธ, ๋๊ธฐ์sub_query(...)/sub_aleph(...)๋ฅผ ํฌํจํ ์ ์ฒด Aleph ๋์ฐ๋ฏธ ํ๋ฉด์ , ๊ธฐ์กด ํ๋กฌํํธ ๋ฐ ์ํฌํ๋ก์ฐ์์ ๊ฐ์ฅ ๋์ ํธํ์ฑ.exec_javascript/exec_typescriptJS/TS๊ฐ ๋ง์ ์ ์ฅ์๋ฅผ ์ํ ์ปจํ ์คํธ๋น ์ง์์ ์ธ Node.js ๋ฐํ์. ๋์ผํctx๋ฅผ ๊ณต์ ํ๊ณ , ์ต์์await๋ฅผ ์ง์ํ๋ฉฐ, ๋น๋๊ธฐawait sub_query(...),await sub_query_batch(...),await sub_query_map(...),await sub_query_strict(...)๋ฐawait sub_aleph(...)๋ก ์ฌ๊ทํ ์ ์์ต๋๋ค. ๋ํ JS/TS์์ ๋ ์ํผ ํ์ด๋ก๋๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๋ ์ํผ DSL(Recipe,Search,Take๋ฑ)์ ํฌํจํฉ๋๋ค.
JS/TS ๋ฐํ์์ ์ฒซ ๋ฒ์งธ ํธ๋์คํ ์กฐ๊ฐ๋ณด๋ค ๋ ๊ด๋ฒ์ํ ๋ก์ปฌ ๋์ฐ๋ฏธ ์ธํธ์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค: ๊ฒ์/์ฟ๋ณด๊ธฐ/๋ผ์ธ/์ฒญํฌ, ์ถ์ถ ๋์ฐ๋ฏธ(extract_emails, extract_todos, extract_routes ๋ฑ), ํ
์คํธ ์ ํธ๋ฆฌํฐ(number_lines, grep_v, sort_lines, normalize_whitespace ๋ฑ), ํ
์คํธ ๋น๊ต ๋์ฐ๋ฏธ(diff, similarity, common_lines, diff_lines), ์ปฌ๋ ์
๋์ฐ๋ฏธ(flatten, group_by, frequency, sample_items, shuffle_items ๋ฑ), ์ ํจ์ฑ ๊ฒ์ฌ ๋์ฐ๋ฏธ(is_json, is_email, is_uuid ๋ฑ), CSV/JSON ๋ณํ๊ธฐ ๋ฐ semantic_search.
JS/TS ๋ฐํ์์๋ ์ด์ ๋ ์ํผ DSL๋ ํฌํจ๋ฉ๋๋ค: RecipeStep, RecipeBuilder ๋ฐ ๋ชจ๋ ๋จ๊ณ ์์ฑ์(Recipe, Search, Peek, Lines, Take, Chunk, Filter, MapSubQuery, SubQuery, Aggregate, Assign, Load, Finalize, as_recipe). ์ ์ฐฝํ ์ฒด์ด๋์ด๋ ํ์ดํ ์คํ์ผ๋ก ๋ ์ํผ๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค:
// Fluent style
Recipe("doc").search("ERROR").take(5).finalize().compile()
// Pipe style
Recipe("doc").pipe(Search("ERROR")).pipe(Take(5)).pipe(Finalize()).compile()compile_recipe ๋ฐ run_recipe_code MCP ๋๊ตฌ๋ ํด๋น ๋ฐํ์์์ ๋ ์ํผ DSL ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ธฐ ์ํด language ๋งค๊ฐ๋ณ์("python", "javascript", "typescript")๋ฅผ ํ์ฉํฉ๋๋ค.
Python๊ณผ ์ฌ์ ํ ๋ค๋ฅธ ์ :
Python์ ์ฌ์ ํ ๊ธฐ๋ณธ์ด๋ฉฐ ๊ฐ์ฅ ์ ์ง์๋๋ Aleph REPL์ ๋๋ค.
JS/TS ์ฌ๊ท ๋์ฐ๋ฏธ๋ ๋น๋๊ธฐ์ด๋ฉฐ
await๊ฐ ํ์ํฉ๋๋ค.๋ ์ํผ ์คํ(
run_recipe)์ ํญ์ Python ๋ฐํ์์ ์ฌ์ฉํฉ๋๋ค. JS/TS ๊ฒฝ๋ก๋ ๋ ์ํผ ๊ตฌ์ถ ๋ฐ ์ปดํ์ผ๋ง ๋ค๋ฃน๋๋ค.JS๋ Python์
|์ฐ์ฐ์ ๋์RecipeBuilder.pipe()/ ์ ์ฐฝํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค(JS์|๋ ๋นํธ ๋จ์ OR์ด๋ฉฐ ์ด ๋ชฉ์ ์ผ๋ก ์ค๋ฒ๋ก๋ํ ์ ์์).Python์ ๊ฐ์ ธ์ค๊ธฐ ์ํ๊ณ๋ ์ฌ์ ํ Python ์ ์ฉ์ ๋๋ค. Node ๋ฐํ์์ ๋์ฐ๋ฏธ ์ค์ฌ์ ๋๋ค: ์๋๋ฐ์ค ๋ด๋ถ์์
require,process,module๋ฐ npm ํจํค์ง ๋ก๋ฉ์ด ์์ต๋๋ค.exec_typescript๋ ์คํ์ ์ํด ํ์ ๊ตฌ๋ฌธ์ ์ ๊ฑฐํฉ๋๋ค. ์์ ํ TS ์ปดํ์ผ๋ฌ, ํ์ ์ฒด์ปค ๋๋ts-nodeํ๊ฒฝ์ด ์๋๋๋ค.์ ๊ท์ ํ๋๊ทธ ๋์์ ๊ฐ ๋ฐํ์์ ๋ฐ๋ฆ ๋๋ค: Python ๋์ฐ๋ฏธ๋ Python
reํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๊ณ , JS/TS ๋์ฐ๋ฏธ๋ JavaScript ์ ๊ท์ ํ๋๊ทธ ๋ฌธ์์ด์ ์ฌ์ฉํฉ๋๋ค.
JS/TS ์ํฌํ๋ก์ฐ ์์:
exec_typescript(code=`
const routes: string[] = extract_routes('javascript').map((item) => item.value);
const routeKinds = frequency(
routes.map((route) => (route.includes('.post(') ? 'write' : 'read')),
2,
);
const notes = await sub_query_map(
routes.map((route) => `Explain ${route}`),
routes,
);
({ routeCount: routes.length, routeKinds, notes })
`, context_id="repo")์์ ๋ชจ๋ธ
Aleph๋ ๋ช ์์ ์ผ๋ก ๊ฐ์ ธ์ค์ง ์๋ ํ ์์ ์ปจํ ์คํธ๋ฅผ ๋ชจ๋ธ ์ฐฝ ๋ฐ์ผ๋ก ์ ์งํ๋๋ก ๊ตฌ์ถ๋์์ต๋๋ค:
๋๊ตฌ ์๋ต์ ์ ํ๋๊ณ ์๋ฆฝ๋๋ค.
get_variable("ctx")๋ ์ ์ฑ ์ ์ธ์ํ๋ฉฐ ๊ธฐ๋ณธ ๊ฒฝ๋ก๊ฐ ๋์ด์๋ ์ ๋ฉ๋๋ค.exec_pythonstdout, stderr ๋ฐ ๋ฐํ ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ํ๋ฉ๋๋ค.ALEPH_CONTEXT_POLICY=isolated๋ ๋ ์๊ฒฉํ ์ธ์ ๋ด๋ณด๋ด๊ธฐ/๊ฐ์ ธ์ค๊ธฐ ๊ท์น๊ณผ ๋ ๋ฐฉ์ด์ ์ธ ๊ธฐ๋ณธ๊ฐ์ ์ถ๊ฐํฉ๋๋ค.ALEPH_ACTION_POLICY=read-only(๋๋--action-policy read-only)๋ ์์ ๋๊ตฌ๋ฅผ ์ฝ๊ธฐ ์ ์ฉ ๋ชจ๋๋ก ์ ์งํฉ๋๋ค: ๊ฒ์ ๋ฐ ํ์ผ ๋ก๋๋ ์ฌ์ ํ ์๋ํ์ง๋ง ์ฐ๊ธฐ ๋ฐ ํ์ ํ๋ก์ธ์ค ์คํ์ ์ฐจ๋จ๋ฉ๋๋ค.
๊ฐ์ฅ ์์ ํ ํจํด์ ํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋๊ท๋ชจ ์ปจํ ์คํธ๋ฅผ Aleph ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํฉ๋๋ค.
Aleph ๋ด๋ถ์์ ๊ฒ์ํ๊ฑฐ๋ ๊ณ์ฐํฉ๋๋ค.
ํ์ํ ์์ ๊ฒฐ๊ณผ๋ง ๊ฒ์ํฉ๋๋ค.
๋ฌธ์ ๋งต
docs/prompts/aleph.md:
/aleph๋ฐ$aleph์ํฌํ๋ก์ฐ์ ๋๊ตฌ ํจํด.docs/CONFIGURATION.md: ํ๋๊ทธ, ํ๊ฒฝ ๋ณ์, ์ ํ ๋ฐ ์์ ์ค์ .
docs/langgraph-rlm-default.md: Aleph ์คํ์ผ ๋๊ตฌ ์ฌ์ฉ๊ณผ LangGraph ํตํฉ.
examples/langgraph_rlm_repo_improver.py: ์ ํ์ LangSmith ์ถ์ ์ ํฌํจํ ์ ์ฅ์ ๊ฐ์ ์์.
CHANGELOG.md: ๋ฆด๋ฆฌ์ค ๊ธฐ๋ก.
DEVELOPMENT.md: ๊ธฐ์ฌ์ ๊ฐ์ด๋.
๊ฐ๋ฐ
git clone https://github.com/Hmbown/aleph.git
cd aleph
pip install -e ".[dev,mcp]"
# Optional extras:
# .[docs] -> MarkItDown-backed document conversion
# .[observability] -> OpenTelemetry spans
pytest tests/ -v
ruff check aleph/ tests/์ฐธ์กฐ
Zhang, A. L., Kraska, T., Khattab, O. (2025) Recursive Language Models (arXiv:2512.24601)
๋ผ์ด์ ์ค
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Hmbown/aleph'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
