Junê (june-mcp)

ทางการ

มอบความทรงจำให้เอเจนต์ของคุณ: ความทรงจำกราฟความรู้ที่ใช้ร่วมกัน มีการอ้างอิง และแยกตามผู้เช่า สำหรับโฮสต์ MCP ใดๆ คำตอบที่มีพื้นฐานจากเอนด์พอยต์ June แบบ local-first — งดตอบแทนที่จะเดา

GitHub
1
ลองใช้ MCP นี้ผู้สนับสนุน

คุณทำอะไรได้บ้างด้วย Junê (june MCP?

  • การอ้างอิงคำตอบจากหน่วยความจำ — ให้ผู้ช่วยของคุณตอบคำถามโดยอ้างอิงจากกราฟความรู้เดือนมิถุนายนของคุณ พร้อมแหล่งที่มาที่ตรวจสอบได้
  • การค้นหาและการประกอบบริบท — ให้ผู้ช่วยของคุณค้นหาหลักฐานที่จัดอันดับสำหรับคำค้นหา หรือสร้างชุดบริบทตามงบประมาณโทเค็นผ่าน june_search หรือ june_context
  • การจดบันทึกแบบถาวร — บอกให้ผู้ช่วยของคุณจดจำข้อเท็จจริงหรือบันทึกลงในกราฟ เพื่อให้สามารถเรียกค้นและอ้างอิงได้ในภายหลังด้วย june_remember
  • การจัดการคำสั่งถาวร — สั่งให้ผู้ช่วยของคุณบันทึกกฎหรือทักษะที่ยั่งยืนเป็นเอกสาร หรือเพิ่มบทเรียนที่มีวันที่กำกับ โดยใช้ june_doc_save หรือ june_learn
  • การสำรวจกราฟ — ขอให้ผู้ช่วยของคุณแมปบริเวณรอบโหนด ส่งออกกราฟย่อยที่มีขอบเขตจำกัด หรือแสดงรายการสิ่งที่เชื่อมโยงไปยังหน้าเพจ ผ่าน june_graph
  • การซิงโครไนซ์พื้นที่เก็บข้อมูล — สั่งให้ผู้ช่วยของคุณมิเรอร์เอกสารหรือหน้าเพจของ June ลงในพื้นที่เก็บข้อมูลของคุณ หรือนำเข้าไฟล์ที่แก้ไขกลับมา ด้วย june_docs_export หรือ june_page_import

เอกสาร

june-mcp

ให้เอเจนต์ของคุณมีความจำ june-mcp คือเซิร์ฟเวอร์ MCP อย่างเป็นทางการ สำหรับ Junê — มันเชื่อมต่อโฮสต์ MCP ใดๆ (Claude Desktop, Claude Code และอื่นๆ) เข้ากับ knowledge graph ของ June เพื่อให้เอเจนต์ของคุณสามารถ ถาม, ค้นหา, และ จดจำ กับหน่วยความจำที่ใช้ร่วมกัน มีการอ้างอิง และแยกตามผู้เช่า

แพ็กเกจนี้เป็นตัวเชื่อมต่อแบบบาง ไม่มีตรรกะ: การดึงข้อมูล การประกอบกราฟ และการตอบคำถามทั้งหมด เกิดขึ้นที่ปลายทาง June ที่คุณชี้ไป ไม่มีโค้ดเอนจินอยู่ที่นี่ — ซึ่งเป็นเหตุผลว่าทำไมมันเล็กพอ ที่จะอ่านจบได้ในครั้งเดียว

Claude Desktop / Claude Code  ──stdio──▶  june-mcp  ──HTTPS──▶  your June endpoint
                                                                 (graph · retrieval · answers)

การติดตั้ง

pip install june-mcp          # just the connector   (or: pipx install june-mcp)
pip install june-ai           # umbrella: june-mcp + june-bench (the benchmark suite)
pip install "june-bench[mcp]" # the bench, with the connector as an extra

ชี้ไปที่ปลายทาง June

june-mcp พูดกับบริการ June ใดก็ได้ สามวิธีที่จะมีหนึ่ง:

  1. แอปเดสก์ท็อป Junê (local-first) รัน แอป Junê และเชื่อมต่อกับเอนจินในเครื่อง — ไฟล์ กราฟ และคีย์ของคุณจะอยู่บนเครื่องของคุณ
  2. บริการ June ของคุณเอง ลูกค้า Pro/Team ที่รันแพ็กเกจเอนจิน june-local ชี้ JUNE_BASE_URL ไปที่เซิร์ฟเวอร์ของตนเอง
  3. โฮสต์ (Team) ชี้ไปที่ปลายทาง workspace June ที่โฮสต์ของคุณด้วยคีย์ API จาก คอนโซลของคุณ

การกำหนดค่า

เซิร์ฟเวอร์เป็นแบบ fail-closed: มันปฏิเสธที่จะเริ่มทำงานเว้นแต่จะรู้ว่าจะเชื่อมต่อที่ไหนและในฐานะใคร และบอกคุณ ทุกอย่าง ที่ขาดหายไปในข้อความเดียว (ไม่ใช่ทีละข้อผิดพลาด)

envจำเป็นความหมาย
JUNE_BASE_URL✅ปลายทาง June ของคุณ เช่น http://localhost:8000
JUNE_CANVAS✅canvas (workspace) ที่จะผูกการเชื่อมต่อนี้ — ชื่อ (work) หรือ canvas id ชื่อจะถูกแปลงเป็น id ตอนเริ่มต้น; ชื่อที่กำกวมจะ fail-closed
JUNE_CANVAS_CREATEไม่บังคับ1 สร้าง canvas ที่ระบุชื่อในการรันครั้งแรกหากยังไม่มี (ปฏิเสธในโหมดอ่านอย่างเดียว)
JUNE_API_KEY✅คีย์ API June ของคุณ (JUNE_ALLOW_ANON=1 เลือกไม่ใช้อย่างชัดเจนสำหรับการตั้งค่าในเครื่องแบบไม่มีคีย์)
JUNE_LLM_KEYไม่บังคับนำคีย์ LLM ของคุณเอง สำหรับคำตอบที่มีการอ้างอิง — ส่งต่อต่อคำขอเป็น header ไม่มีการบันทึก ไม่มีการเก็บบนบริการ
JUNE_READONLYไม่บังคับ1 ซ่อนและปฏิเสธเครื่องมือเขียนทั้งหมด (หน่วยความจำกลายเป็นอ่านอย่างเดียว)
JUNE_TOOL_PROFILEไม่บังคับcompact (ค่าเริ่มต้น), full, หรือ lean compact รวมเครื่องมือที่เกี่ยวข้อง 17 รายการเป็นเครื่องมือตระกูลเจ็ดรายการที่รับอาร์กิวเมนต์ op — แสดงเครื่องมือ 20 รายการแทน 37 รายการ, 11,359 prompt tokens แทน 13,236 บนการเชื่อมต่อ Pro แบบอ่าน-เขียน ทุกการเรียกถูกส่งไปยังโค้ดเดียวกันเหมือนเดิม ดังนั้น gates, canvas rules, receipts และ two-phase confirms ไม่เปลี่ยนแปลง วัดบนสี่โฮสต์ก่อนที่จะกลายเป็นค่าเริ่มต้น: Claude Code 1.000 task success (baseline 0.987), GPT-5.4 direct 0.983 (0.957), Codex 0.922 (0.763), ไม่มีการลบที่ไม่ปลอดภัยในทุกแขน full แสดงสมาชิก 37 รายการภายใต้ชื่อของตนเอง — โค้ดเดียวกัน หนึ่งชื่อต่อหนึ่ง lean เปิดเผยเฉพาะหกคำกริยาที่เอเจนต์เขียนโค้ดใช้ (june_answer / june_context / june_search / june_remember / june_learn / june_usage) พร้อม handshake หนึ่งย่อหน้า ~2.5k tokens — สำหรับเซสชันที่ต้องการแค่ถามและจดจำ
JUNE_FILES_ROOTไม่บังคับไดเรกทอรีที่เอเจนต์เลือกเข้าร่วมสามารถอัปโหลดไฟล์ผ่าน june_ingest_file — ไม่ตั้งค่า ⇒ เครื่องมือนั้นไม่มีอยู่
JUNE_TIMEOUT_READ / JUNE_TIMEOUT_RETRIEVAL / JUNE_TIMEOUT_ANSWERไม่บังคับงบเวลาในแต่ละคลาสของคำกริยา (ค่าเริ่มต้น 15 วินาที / 90 วินาที / 120 วินาที): การอ่านเร็ว; june_context, ซึ่งจัดอันดับผู้สมัครใหม่ทั้งหมด; คำตอบ ซึ่งมีการเรียกโมเดล
JUNE_TOOL_CONCURRENCYไม่บังคับจำนวนการเรียกเครื่องมือสูงสุดที่ทำงานพร้อมกันบนการเชื่อมต่อนี้ (ค่าเริ่มต้น 8) โฮสต์ทำ pipeline คำขอบนสตรีมเดียว นี่คือเพดานที่ชัดเจน — การเรียกเกินจะเข้าคิว ไม่มีการเบียดกัน
JUNE_DOCS_CANVASไม่บังคับCanvas ที่เก็บ เอกสารเอเจนต์ (คำสั่งประจำ/ทักษะ — ดู หน่วยความจำเอเจนต์ ด้านล่าง) ค่าเริ่มต้น agent_docs; สร้างเมื่อ june_doc_save ครั้งแรก
JUNE_DOCS_REFRESHไม่บังคับ0 ปิดการย่อย standing_docs เป็นระยะ (ค่าเริ่มต้น เปิด — เป็นตาข่ายนิรภัยป้องกันการลืม)
JUNE_DOCS_REFRESH_CALLS / JUNE_DOCS_REFRESH_MINUTESไม่บังคับจังหวะการย่อย: ครบกำหนดทุก N การเรียกเครื่องมือ (ค่าเริ่มต้น 12) หรือ M นาที (ค่าเริ่มต้น 10) แล้วแต่อย่างใดถึงก่อน
JUNE_DOCS_DIGEST_CHARSไม่บังคับขีดจำกัดขนาดการย่อยแบบอนุกรม (ค่าเริ่มต้น 2000)
JUNE_EXPORT_ROOTไม่บังคับไดเรกทอรี repo ที่เอเจนต์เลือกเข้าร่วมสามารถ ส่งออก หน้า/เอกสาร June เป็นไฟล์ (ดู Repo sync ด้านล่าง) — ไม่ตั้งค่า ⇒ เครื่องมือ repo-sync สามรายการไม่มีอยู่
JUNE_EXPORT_GITไม่บังคับ1 commit เฉพาะไฟล์ที่การส่งออกแต่ละครั้งเขียน (จำกัดด้วย pathspec, ไม่ push)
JUNE_EXPORT_DIRไม่บังคับซับทรีเอกสารเอเจนต์ภายใน root (ค่าเริ่มต้น docs/agent)
JUNE_LOG_LEVELไม่บังคับการบันทึกเป็น stderr-only โดยการออกแบบ — stdout คือสาย MCP

ตรวจสอบก่อนที่เอเจนต์ของคุณจะทำ

JUNE_BASE_URL=http://localhost:8000 JUNE_API_KEY=... JUNE_CANVAS=work june-mcp --doctor

doctor ตรวจสอบตามลำดับ: การกำหนดค่า → บริการเข้าถึงได้ → การแก้ไข canvas (canvas ชื่อ ของคุณ → id ของมัน เช่น name "work" → 9147bee6-…) → ความสมบูรณ์ของ seam การค้นหา → manifest เครื่องมือ และ พิมพ์ PASS/FAIL ต่อการตรวจสอบพร้อมคำแนะนำที่แมปไว้ (เช่น ชื่อที่ขาดหายไปจะแสดงรายการ canvas ที่มี อยู่และชี้ไปที่ JUNE_CANVAS_CREATE=1) doctor ออก 0 เฉพาะเมื่อการตรวจสอบทั้งหมดผ่าน (1 มิฉะนั้น); เซิร์ฟเวอร์เองออก 2 เมื่อมีข้อผิดพลาดการกำหนดค่าแทนที่จะเริ่มแบบครึ่งๆ กลางๆ รัน doctor ก่อน; มันจับข้อผิดพลาดการกำหนดค่าทั่วไปทั้งหมดก่อนที่เอเจนต์ของคุณจะเห็นเซิร์ฟเวอร์

เชื่อมต่อกับ Claude

Claude Desktop — รวมเข้ากับ claude_desktop_config.json (Settings → Developer):

{
  "mcpServers": {
    "june": {
      "command": "june-mcp",
      "env": {
        "JUNE_BASE_URL": "http://localhost:8000",
        "JUNE_API_KEY": "your-key",
        "JUNE_CANVAS": "work",
        "JUNE_LLM_KEY": "your-llm-provider-key"
      }
    }
  }
}

Claude Code:

claude mcp add june -e JUNE_BASE_URL=http://localhost:8000 \
  -e JUNE_API_KEY=your-key -e JUNE_CANVAS=work \
  -e JUNE_LLM_KEY=your-llm-provider-key -- june-mcp

รีสตาร์ทโฮสต์ทั้งหมด (Cmd+Q บน macOS) จากนั้นตรวจสอบว่าเซิร์ฟเวอร์แสดง 20 เครื่องมือ — พื้นผิว compact ซึ่งเป็นค่าเริ่มต้นตั้งแต่ 0.4.2 JUNE_TOOL_PROFILE=full แสดงรายการ ความสามารถเดียวกันกับเครื่องมือ 37 รายการที่ตั้งชื่อแยกกันแทน (38 เมื่อคุณเลือกใช้ june_ingest_file ผ่าน JUNE_FILES_ROOT)

เครื่องมือ

พื้นผิวค่าเริ่มต้นคือ compact: 20 เครื่องมือ เจ็ดรายการจัดกลุ่มการดำเนินการที่เกี่ยวข้องไว้ด้านหลัง อาร์กิวเมนต์ op JUNE_TOOL_PROFILE=full แสดงสมาชิก 37 รายการภายใต้ชื่อของตนเองแทน — ความสามารถ เดียวกัน gates เดียวกัน พฤติกรรมเดียวกัน

เครื่องมือตระกูลการดำเนินการรวม
june_graphneighborhood, subgraph, backlinksjune_neighborhood, june_subgraph, june_backlinks
june_maintainenrich, resolvejune_enrich, june_resolve
june_page_readlist, get, removed, grammarjune_page_list, june_page_get, june_page_removed (+ ไวยากรณ์บล็อกตามความต้องการ)
june_page_editcreate, append, update, insert, move, rename, meta, restorejune_page_create, june_page_append, june_page_update, june_page_insert, june_page_move, june_page_rename, june_page_meta, june_page_restore
june_canvas_readlist, current, usejune_canvas_list, june_canvas_current, june_canvas_use
june_canvas_eraseclear, deletejune_canvas_clear, june_canvas_delete
june_docs_readrefresh, list, getjune_docs_refresh, june_doc_list, june_doc_get

ทุกอย่างอื่นคงชื่อของตัวเอง: june_answer, june_search, june_enumerate, june_context, june_usage, june_remember, june_ingest, june_page_write, june_page_delete, june_canvas_create, june_doc_save, june_doc_delete, june_learn คำกริยาที่ ลบ บางสิ่งได้จะไม่ถูกรวมกับคำกริยาที่ลบไม่ได้ — ดังนั้น june_page_write และ june_page_delete แยกจาก june_page_edit และแต่ละตระกูลมี destructiveHint ที่ตรงไปตรงมาหนึ่งรายการ

ชื่อเก่ายังทำงานในเอกสารเอเจนต์ที่บันทึกไว้: handshake แบบ compact นำแผนที่ ชื่อเก่า → ชื่อใหม่ และการเรียกชื่อที่ถูกรวมจะถูกปฏิเสธพร้อมตัวแทนที่แน่นอน (june_page_get is not a tool on this surface (compact): call june_page_read with op='get')

แต่ละการดำเนินการทำอะไร:

เครื่องมือสิ่งที่เอเจนต์ของคุณได้รับ
june_answerคำตอบที่มีการอ้างอิงและ อ้างอิงแหล่งที่มา จากกราฟ — งดตอบแทนการเดา
june_searchหลักฐานที่จัดอันดับสำหรับคำถาม (รองรับ multi-hop)
june_contextชุดบริบทที่ประกอบขึ้นภายใต้งบ token
june_neighborhoodกราฟรอบโหนดหนึ่ง
june_subgraphการส่งออกซับกราฟแบบจำกัดขอบเขต
june_backlinksสิ่งที่เชื่อม ไปยัง โหนดหนึ่ง (ขอบขาเข้า)
june_rememberเขียนข้อเท็จจริง/บันทึกลงในกราฟ (ค้นหาได้ + อ้างอิงได้ทันที) ข้อความยาวรันเป็นงานเอนจิน: ผลลัพธ์ของ {state: running, job_id} ถูกรวบรวมด้วย june_remember(job_id=…) — อย่าส่งข้อความซ้ำ ข้อความที่วางถูกระบุเนื้อหาบนเอนจิน (v0.0.13) ดังนั้นการส่งข้อความเดียวกันซ้ำจะ upsert โหนดเดียวกัน; ไม่สามารถทำซ้ำได้
june_ingestการนำเข้าโหนด/ขอบแบบมีโครงสร้าง
june_enumerateโหนดที่ตรงกับ predicate สำหรับคำถาม "แสดง ALL X" (ไม่ใช่ top-k) เฉพาะ exhaustive: true พิสูจน์ว่ารายการสมบูรณ์; ผลลัพธ์สั้นหรือว่างโดยไม่มีมันไม่ได้พิสูจน์ว่าไม่มีอย่างอื่นตรง
june_ingest_fileอัปโหลดไฟล์ท้องถิ่นหนึ่งไฟล์ (pdf/docx/xlsx/csv/html/md/รูปภาพ/เสียง) จากโฟลเดอร์ที่ผู้ปฏิบัติงานอนุมัติ — มีอยู่เฉพาะเมื่อคุณตั้ง JUNE_FILES_ROOT
june_enrichPro: การสกัดใหม่เบื้องหลังของ canvas ด้วยเอนจินที่สมบูรณ์กว่า (idempotent; งาน + poll; 403 บนฟรี)
june_resolveการบำรุงรักษา: รวมเอนทิตีที่ซ้ำกันผ่านขอบ same_as ที่ย้อนกลับได้ (รันฝั่งเซิร์ฟเวอร์; strong_only=false ปลดล็อกชั้นความหมายบน Pro)
june_docs_refresh / june_doc_list / june_doc_getอ่าน เอกสารประจำ ของเอเจนต์ — การย่อยเต็ม, รายการทะเบียน, เนื้อหาของเอกสารหนึ่ง
june_doc_save / june_doc_delete / june_learnเขียนเอกสาร — สร้าง/แทนที่เอกสารหรือทักษะ, การลบสองเฟส, เพิ่มบทเรียนหนึ่งรายการพร้อมวันที่
june_page_insert / june_page_moveวางบล็อกใหม่หลังบล็อกที่ระบุชื่อ หรือจัดลำดับบล็อกใหม่ด้วย id — โดยไม่ต้องส่งหน้าซ้ำ (ต้องใช้เอนจินที่มีฟีเจอร์หน้า positions)
june_page_rename / june_page_metaเปลี่ยนชื่อหน้า หรือปักหมุด / ตั้งกลุ่มในรายการหน้าของคุณ — บล็อกไม่ถูกแตะ
june_page_removed / june_page_restoreดูสิ่งที่หน้าสูญเสีย และนำบล็อกกลับมาพร้อม id และตำแหน่งเดิม
june_usageใบเสร็จการใช้งาน — สิ่งที่ June ให้บริการจริง วัดด้วย tokenizer ที่ระบุชื่อ ไม่เคยประมาณ ใบเสร็จหนึ่งฉบับเต็ม (receipt_id) หรือสรุปหน้าต่าง (window); ตัวเลขการประหยัดปรากฏเฉพาะในการเรียกที่รายงานการใช้งานสองรายการจากผู้ให้บริการถูกวัดจริง

ใบเสร็จในการอ่านทุกครั้ง

เมื่อเอนจินรันด้วย JUNE_USAGE=1 (เดสก์ท็อป: Settings → Usage receipts) ทุก ผลลัพธ์ june_answer / june_context / june_search ยังพก receipt และ receipt_footer หนึ่งบรรทัด:

receipt r_7f…: served 812 tokens (exact, tiktoken:cl100k_base) from 3 blocks across 2 docs
· 1 doc this session already had — june_usage(receipt_id="r_7f…") shows it in full

ตัวเชื่อมต่อส่ง X-June-Source: mcp และ id X-June-Session หนึ่งรายการต่อกระบวนการเซิร์ฟเวอร์ ดังนั้น เอนจินสามารถบันทึกว่าเอกสารใดที่เซสชันเอเจนต์นี้มีแล้ว (การอ่านซ้ำที่หลีกเลี่ยง) ส่วนท้ายไม่เคยพูดว่า "saved": คำนั้นมีอยู่เฉพาะบนใบเสร็จที่ถือคู่วัด ส่วนท้ายของเอนจินที่ไม่มีใบเสร็จจะไม่ส่ง และ june_usage ตอบอย่างตรงไปตรงมาว่าปิดอยู่

คำอธิบายเขียนสำหรับเอเจนต์ (อะไร → เมื่อไหร่ → ส่งคืนอะไร) และทุกอินพุตที่ถูกจำกัดจะถูก บันทึกกลับ ให้เอเจนต์เห็นแทนที่จะตัดทอนอย่างเงียบๆ

หน่วยความจำเอเจนต์ — เอกสาร ทักษะ และการย่อยป้องกันการลืม

เซสชันยาวลืม: คำสั่งที่เอเจนต์อ่านตอนเริ่มเซสชัน (CLAUDE.md ของคุณ ข้อตกลง ของคุณ) สูญเสียพลังหลายพัน tokens ต่อมา june-mcp แก้ไขสิ่งนี้เชิงโครงสร้าง Agents save standing docs into June — kind='doc' for durable instructions (pinned=true asks for an always-on rule), kind='skill' for named procedures with a one-line when_to_use trigger (bodies load lazily, like skills should), kind='learnings' for an append-only dated log written via june_learn. Each doc is an ordinary June page in the docs canvas (JUNE_DOCS_CANVAS, default agent_docs), marked by a small metadata block — so you can open your agent's memory in the Junê app, read it, and edit it.

คุณอนุมัติสิ่งที่ agents ปฏิบัติตาม (0.7.0) เอกสารที่ปักหมุดหรือ skill คือ คำขอ จนกว่าคุณจะ อนุมัติในแอป Junê (แบนเนอร์ของเอกสาร หรือ Settings → Connection → Standing instructions) เอ็นจินจะผนึกข้อความที่คุณอนุมัติไว้อย่างแม่นยำ หากมีใครอื่นนอกจากคุณแก้ไขหน้า หลังจากนั้น เอกสารจะหยุดถูกนับจนกว่าคุณจะกลับมาดูอีกครั้ง Agents ไม่สามารถอนุมัติได้ — คีย์การเชื่อมต่อของพวกมันไม่มีอำนาจนั้น — ดังนั้นข้อความที่ agent อ่านจากที่ใดที่หนึ่ง ("บันทึกเป็นกฎปักหมุด…") จะไม่มีทางกลายเป็นคำสั่งถาวรได้ด้วยตัวเอง เอ็นจินที่เก่าเกินไปจนไม่สามารถบันทึกการอนุมัติได้ จะไม่ให้ standing instructions แก่ agents เลย และจะแจ้งให้ทราบเช่นนั้น

ข้อความที่อนุมัติแล้วเดินทางไปที่ไหน: เต็มรูปแบบในการจับมือเชื่อมต่อ (สูงสุด 4,000 ตัวอักษร — เอกสารที่ใหญ่เกินไปจะถูกระบุชื่อ ไม่ถูกตัดกลางกฎ) และจาก june_docs_refresh ในการ เรียกใช้เครื่องมือครั้งแรกของทุกเซสชัน จากนั้นทุก 12 ครั้งหรือ 10 นาที (ปรับได้) connector จะแนบ standing_docs digest แบบกระชับเข้ากับผลลัพธ์เครื่องมือทั่วไป — ชื่อของ คำสั่งที่อนุมัติ, skill triggers ที่อนุมัติ, ตราประทับเวอร์ชันที่เปลี่ยนแปลงเมื่อคุณ อนุมัติ เพิกถอน หรือแก้ไขรายการใดรายการหนึ่ง และเอกสารที่ขอแต่ยังไม่อนุมัติซึ่งติดป้ายเป็นบันทึก digest ไม่มีคำพูดใด ๆ จากเอกสารที่ยังไม่อนุมัติ digest ที่สร้างไม่ได้ (บริการไม่ว่าง, canvas หายไป) จะถูกข้ามไป — ไม่เคยทำให้การเรียกที่ถือมันเสียหาย ตั้งค่า JUNE_DOCS_REFRESH=0 เพื่อปิด digest; เครื่องมือเอกสารยังคงทำงานต่อไป

June สอน agents วิธีใช้งาน — จากภายในตัวมันเอง การบันทึกครั้งแรกจะสร้าง docs canvas และเพาะ agent-memory-guide: คู่มือการใช้งาน (อะไรควรอยู่ใน system canvas เทียบกับ workstream canvas, สามประเภทและเมื่อใดควรใช้แต่ละแบบ, การตั้งชื่อ, สิ่งที่ควรปักหมุด, วินัยในการแก้ไข, การซิงค์ repo) มันถูกระบุไว้ในทุก registry และ digest, agents อ่านด้วย june_doc_get('agent-memory-guide') เมื่อใดก็ตามที่ไม่แน่ใจ — และมันเป็นหน้าธรรมดาที่คุณแก้ไขได้ ก่อนที่จะบันทึกอะไร empty states จะส่งคืน setup walkthrough แทนการยักไหล่ และ june_memory_setup prompt จะให้ agent สัมภาษณ์คุณและบันทึกข้อตกลงของคุณเป็นเอกสารชุดแรก

ทำให้ June เป็นอัตโนมัติ — agent พึ่งพามันโดยไม่ต้องบอก

"ใช้ June" ไม่ควรต้องพูดซ้ำ กลไกสามอย่างซ้อนกันเพื่อทำให้การใช้งานเป็นอัตโนมัติ แต่ละอย่าง ครอบคลุมจุดบอดของกลไกก่อนหน้า:

  1. Host hook (ปิดช่องโหว่การเริ่มต้นเย็น) เซิร์ฟเวอร์ไม่สามารถพูดได้จนกว่า agent จะเรียก ครั้งแรก — ดังนั้นติดตั้ง standing instructions ของ June ลงในไฟล์ที่ host ของคุณโหลดโดยกำเนิด ทุกเซสชัน:

    JUNE_EXPORT_ROOT=/path/to/project june-mcp --install-instructions            # → CLAUDE.md
    JUNE_EXPORT_ROOT=/path/to/project june-mcp --install-instructions AGENTS.md  # other agents
    

    มันถูกเขียนเป็น managed section (เนื้อหาของคุณไม่ถูกแตะต้อง; การรันซ้ำจะอัปเดตในตำแหน่งเดิม) และมันวางท่าที june-first — ตรวจสอบ June ก่อนที่จะอ้างว่าไม่รู้, จดจำข้อเท็จจริงโดยไม่ต้องขอ, เรียนรู้บทเรียนเมื่อมันเกิดขึ้น — ลงใน system prompt เอง

  2. คำอธิบายเครื่องมือเชิงรุก (ไม่เสื่อมสลาย) คำอธิบายของคำกริยาหลักบอกโมเดล เมื่อใดควรใช้โดยไม่ต้องถูกขอ — และคำอธิบายจะถูกอ่านซ้ำทุกเทิร์น ในทุก MCP host โดยไม่ต้องอาศัยความร่วมมือใด ๆ

  3. ท่าที june-first ในการจับมือ ท่าทีเริ่มต้นของ June ถูกสร้างไว้ใน คำสั่งของการเชื่อมต่อ (0.7.0; รุ่นก่อนหน้าเพาะมันเป็นเอกสารปักหมุด — seed ที่ไม่ถูกแตะต้องตอนนี้ถูกซ่อน, seed ที่ถูกแก้ไขเป็นของคุณและต้องได้รับการอนุมัติเหมือนเอกสารอื่น)

สิ่งที่ไม่มี MCP server ใดทำได้ — พูดตรง ๆ — คือบังคับให้ host ลงมือ: agent ที่ host ซ่อน SERVER_INSTRUCTIONS และ ไม่มีไฟล์คำสั่ง และ ไม่เคยเรียก June แม้ครั้งเดียวจะยังคง เย็น กลไกที่ 1 มีไว้เพื่อให้กรณีนั้นไม่เกิดขึ้นในทางปฏิบัติ

การซิงค์ repo — repo คงความทันสมัยกับสิ่งที่ June รู้

เลือกใช้ด้วย JUNE_EXPORT_ROOT=<your repo> และเครื่องมืออีกสามตัวจะปรากฏ:

เครื่องมือมันทำอะไร
june_docs_exportสะท้อนเอกสาร agent ทุกฉบับไปยัง docs/agent/<name>.md — repo มี standing instructions ปัจจุบันเสมอ
june_page_exportส่งออกหน้าใด ๆ ไปยังไฟล์ที่จัดการ หรือ managed section ที่แทรกระหว่างเครื่องหมายภายในไฟล์ที่มีอยู่ (path=KNOWHOW.md section=june-learnings) — เฉพาะพื้นที่ที่ทำเครื่องหมายเท่านั้นที่ถูกแตะต้อง
june_page_importทางกลับ: แก้ไขไฟล์ที่ส่งออกในตัวแก้ไขของคุณแล้วนำกลับเข้าไปในหน้า June ของมัน — เอกสาร agent คงเอกลักษณ์ไว้ และไฟล์ที่เก่าจะถูก ปฏิเสธ แทนที่จะปล่อยให้ทับความรู้ใหม่

กฎความปลอดภัย ทั้งหมดบังคับในโค้ดและยึดด้วยการทดสอบ: ทุกพาธถูกล้อมภายใน root (การตรวจ .. แบบ lexical และ การแก้ symlink); ไฟล์ที่ june-mcp ไม่ได้เขียนจะไม่มีวันถูก เขียนทับ; ไม่มีอะไรถูกลบ; และด้วย JUNE_EXPORT_GIT=1 การส่งออกแต่ละครั้งจะคอมมิตเฉพาะ ไฟล์ที่มันเขียน — จำกัดด้วย pathspec เพื่อไม่ให้งานที่คุณ staged ถูกกวาดเข้าไป และ push ไม่มีวัน เกิดขึ้น ไฟล์ที่ส่งออกมี frontmatter และกำหนดไบต์ได้ ดังนั้นเอกสารที่ไม่เปลี่ยนแปลง จะส่งออกใหม่เป็นไฟล์ที่เหมือนกันและ git เงียบ

manifest (.june-export.json) ทำให้ตรวจสอบความทันสมัยได้ — สองโหมด CLI สำหรับ CI:

june-mcp --export         # sync agent docs + every managed page/section, commit if enabled
june-mcp --export-check   # write NOTHING; exit 1 if the repo has drifted from June

--export-check ใน CI เปลี่ยน "เอกสารอัปเดตหรือยัง?" จากความหวังเป็นการ build ที่ล้มเหลว

ฟรี vs Pro — แท็ก june-pro

june-mcp คือหนึ่งแพ็คเกจสำหรับทุกคน ไม่มี "pro build" แยก Pro เป็นคุณสมบัติ ของ endpoint ไม่ใช่ connector: เชื่อมต่อกับ June ที่เปิดใช้งาน Pro (ใบอนุญาต Pro ใน แอป, คีย์ Pro บน hosted workspace) และเครื่องมือเดียวกันให้ผลลัพธ์ระดับ Pro: ทุก june_remember และ june_ingest_file write จะรันเอ็นจิน entity/edge ที่สมบูรณ์กว่าโดยอัตโนมัติ (ผลลัพธ์รายงานว่า engine ใดทำงาน), june_resolve อัปเกรดเป็นการจับคู่เชิงความหมาย และ june_enrich เติมเต็มความทรงจำที่เขียนบนชั้นฟรีก่อนที่คุณจะอัปเกรด เทอร์มินัล แสดงว่าคุณอยู่ในโลกใด: --doctor พิมพ์บรรทัด edition และแบนเนอร์เริ่มต้นของ เซิร์ฟเวอร์ติดแท็กการเชื่อมต่อ —

june-mcp: connected http://localhost:8000 canvas name "work" → 11d2… [june-pro]

แท็กถูกอ่านจาก /v1/whoami ของบริการเอง (สถานะสิทธิ์เดียวกันที่ควบคุม Pro routes ฝั่งเซิร์ฟเวอร์) ดังนั้นมันไม่สามารถขัดแย้งกับสิ่งที่คุณได้รับจริง — และมันเป็น การแสดงผลเท่านั้น: สิทธิ์ถูกบังคับบนบริการไม่ว่าคลายต์ใดจะพิมพ์อะไร บริการเก่าที่ไม่มี /v1/whoami จะไม่แสดงแท็กเลย

โมเดลความปลอดภัย

พื้นผิวเครื่องมือไม่เปิดเผย พารามิเตอร์ canvas/workspace — workspace ถูกผูกฝั่งเซิร์ฟเวอร์ จากบริบทการเชื่อมต่อของคุณ, fail-closed การอ่านข้าม tenant ไม่ใช่การตรวจสอบสิทธิ์ที่ อาจเปิดกว้าง; มัน ไม่สามารถแสดงได้ จากฝั่งคลายต์ JUNE_READONLY=1 เพิ่มรั้วที่สอง สำหรับการปรับใช้แบบอ่านอย่างเดียว คีย์ BYO LLM ของคุณเดินทางกับคำขอคำตอบแต่ละครั้งเป็น header และไม่เคย ถูกจัดเก็บหรือบันทึกโดยบริการ

ข้อผิดพลาด

ความล้มเหลว upstream ทุกครั้งจับคู่กับ payload ข้อผิดพลาดแบบพิมพ์และตัดข้อมูล (สร้างจากประเภท exception + HTTP status เท่านั้น — ไม่เคยจาก response bodies) ดังนั้นเซิร์ฟเวอร์รอดจากทุกสิ่งที่ endpoint โยนมา และ agent ของคุณเห็นข้อความที่ชัดเจนและนำไปปฏิบัติได้

ใบอนุญาต

MIT เอ็นจิน Junê เองเป็นผลิตภัณฑ์แยกที่ปิดซอร์ส — connector นี้คือส่วนเปิด โดยการออกแบบ