1. บทนำ
การเพิ่มฟีเจอร์ลงใน Agent ที่มีอยู่ ซึ่งเป็นความสามารถใหม่ที่ใช้ฐานข้อมูลมักหมายถึงการเขียนโค้ดมาตรฐาน การเชื่อมต่อการผสานรวม และการทำให้ทุกอย่างสอดคล้องกับรูปแบบที่มีอยู่แล้วในฐานของโค้ด Antigravity เร่งกระบวนการนี้ในทุกขั้นตอน โดยจะวิเคราะห์ฐานของโค้ดเพื่อสร้างบริบทที่จำเป็น สร้างข้อกำหนดที่มีโครงสร้างและแผนการติดตั้งใช้งานเพื่อให้คุณตรวจสอบ และดำเนินการเปลี่ยนแปลงโค้ด ทั้งหมดนี้จะได้รับการแนะนำโดยความรู้เกี่ยวกับโดเมนที่ช่วยให้คุณบันทึกเป็นทักษะที่นำกลับมาใช้ใหม่ได้ และธรรมนูญของโปรเจ็กต์ที่บังคับใช้หลักการที่ต่อรองไม่ได้ Codelab นี้จะแนะนำวิธีเพิ่มประสิทธิภาพกระบวนทัศน์การพัฒนาที่ขับเคลื่อนด้วยข้อมูลจำเพาะของ Antigravity โดยการแนะนำวงจรใหม่เพื่อเพิ่มเอกสารประกอบข้อมูลจำเพาะที่อ้างอิง spec-kit อย่างมาก
สิ่งที่คุณจะสร้าง
แอปพลิเคชันเลขานุการร้านอาหารที่ทำงานในพื้นที่พร้อมการจองที่เพิ่มผ่านวงจร SDD ที่สมบูรณ์
- การจอง - แขกจองโต๊ะและตรวจสอบการจอง โดยมีเครื่องมือฐานข้อมูล MCP Toolbox ใหม่และตาราง
reservationsใน Cloud SQL เป็นข้อมูลสนับสนุน - (ความท้าทาย) - พัฒนา UI ของคุณเองสำหรับ Agent
- (การท้าทาย) – ทำให้ Google Cloud ใช้งานได้โดยใช้ตัวแทน Antigravity
โค้ดเริ่มต้นมี Agent ADK ที่ใช้งานได้พร้อมการค้นหาเมนู (คีย์เวิร์ด + ความหมายผ่าน MCP Toolbox) และการติดตามค่ากำหนดด้านอาหาร (ผ่าน ToolContext) คุณขยายได้โดยไม่ต้องเขียนโค้ดของแอปพลิเคชันด้วยตนเอง เนื่องจาก Antigravity จะจัดการการติดตั้งใช้งานตามข้อกำหนดของคุณ

สิ่งที่คุณจะได้เรียนรู้
- วิธีเริ่มต้นบริบทของโปรเจ็กต์เพื่อให้ Antigravity เข้าใจโค้ดเบสที่มีอยู่
- วิธีสร้างทักษะ Antigravity ที่รวมความรู้เฉพาะด้าน (เช่น รูปแบบ Codelab ของ ADK) เพื่อนำกลับมาใช้ใหม่
- วิธีตั้งค่าธรรมนูญของโปรเจ็กต์ที่เวิร์กโฟลว์ SDD จะตรวจสอบเทียบระหว่างการวางแผนและการวิเคราะห์
- วิธีใช้เวิร์กโฟลว์ Spec-Driven Development (SDD) ใน Antigravity เพื่อเพิ่มฟีเจอร์อย่างเป็นระบบ
- วิธีขยาย Agent ADK ด้วยเครื่องมือใหม่ที่ใช้ฐานข้อมูลผ่าน MCP Toolbox
ข้อกำหนดเบื้องต้น
- Google Antigravity และ
gitติดตั้งในเครื่องของคุณ - บัญชี Google Cloud ที่เปิดใช้บัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่
- การทำ Codelab ของ ADK ทั้ง 4 รายการที่จำเป็นต้องทำก่อนหน้านี้ (หรือมีความรู้เทียบเท่า) จะช่วยให้เข้าใจบริบทของ Use Case ได้
- การสร้าง AI Agent ด้วย ADK: รากฐาน
- การสร้าง AI Agent ด้วย ADK: เพิ่มศักยภาพด้วยเครื่องมือ
- การสร้าง AI Agent แบบถาวรด้วย ADK และ CloudSQL
- ติดตั้งใช้งาน จัดการ และตรวจสอบ Agent ประเภท ADK ใน Cloud Run
- ฐานข้อมูลในฐานะเครื่องมือ: Agentic RAG พร้อม ADK, MCP Toolbox และ Cloud SQL
2. ตั้งค่าสภาพแวดล้อม
ขั้นตอนนี้จะโคลนที่เก็บเริ่มต้น ตรวจสอบสิทธิ์กับ Google Cloud จัดสรรฐานข้อมูล Cloud SQL และเตรียมสภาพแวดล้อม Antigravity ในเครื่อง
ติดตั้งข้อกำหนดเบื้องต้น
ตรวจสอบว่าระบบของคุณมีไฟล์ปฏิบัติการ CLI ต่อไปนี้
วิธีการติดตั้งจะแตกต่างกันไปตามระบบปฏิบัติการของเครื่อง
โคลนที่เก็บเริ่มต้น
เปิดเทอร์มินัลใน Antigravity (หรือเทอร์มินัลของระบบ) โคลนที่เก็บข้อมูลเสริมและเข้าสู่ไดเรกทอรี
git clone https://github.com/alphinside/sdd-adk-antigravity-starter.git sdd-adk-agents-agy
cd sdd-adk-agents-agy
เปิดที่เก็บที่โคลนใน Antigravity File->Open Folder->เลือกไดเรกทอรีที่โคลน sdd-adk-agents-agy
นำรีโมตต้นทางออก เวิร์กโฟลว์ SDD จะสร้างกิ่ง Git สำหรับข้อกำหนดฟีเจอร์ การนำรีโมตออกจะช่วยป้องกันการพุชไปยังที่เก็บเริ่มต้นโดยไม่ตั้งใจ
git remote remove origin
ตรวจสอบสิทธิ์ด้วย Google Cloud
เรียกใช้คำสั่งการตรวจสอบสิทธิ์ 2 คำสั่ง ทั้ง 2 วิธีจะเปิดเบราว์เซอร์สำหรับ OAuth
gcloud auth login
gcloud auth application-default login
เนื่องจากคุณทำงานในพื้นที่ด้วย Antigravity คุณจึงต้องตรวจสอบสิทธิ์ด้วยตนเอง auth login จะตรวจสอบสิทธิ์ gcloud CLI application-default login ตรวจสอบสิทธิ์ Google Cloud SDK ที่แอปพลิเคชันของคุณใช้ ซึ่งการเรียก Vertex AI ของ ADK และตัวเชื่อมต่อ Python ของ Cloud SQL ต่างก็ต้องใช้ข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน
ตั้งค่าโปรเจ็กต์ Google Cloud
เขียนตัวแปรตำแหน่งไปยัง .env ก่อนเรียกใช้สคริปต์การตั้งค่าโปรเจ็กต์
echo "GOOGLE_CLOUD_LOCATION=global" > .env
echo "REGION=us-central1" >> .env
GOOGLE_CLOUD_LOCATION=globalใช้สำหรับการเรียก Vertex AI / Gemini APIREGION=us-central1ใช้สำหรับ Cloud SQL และโครงสร้างพื้นฐานอื่นๆ ของ GCP
ดาวน์โหลดและเรียกใช้สคริปต์การตั้งค่าโปรเจ็กต์ โดยจะสร้างหรือตรวจสอบโปรเจ็กต์ Google Cloud ที่มีการเรียกเก็บเงินแบบทดลองใช้ และบันทึกรหัสโปรเจ็กต์ไว้ใน .env จากนั้นให้เรียกใช้แหล่งที่มา
curl -sL https://raw.githubusercontent.com/alphinside/cloud-trial-project-setup/main/setup_verify_trial_project.sh -o setup_verify_trial_project.sh
bash setup_verify_trial_project.sh && source .env
กำลังเปิดใช้ API
เปิดใช้ API ที่จำเป็น
gcloud services enable \
aiplatform.googleapis.com \
sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com
ติดตั้งการอ้างอิง
เราจะใช้ uv เป็นผู้จัดการโปรเจ็กต์ Python uv เป็นเครื่องมือจัดการแพ็กเกจและโปรเจ็กต์ Python ที่รวดเร็วซึ่งเขียนด้วย Rust ( เอกสาร ) Codelab นี้ใช้เพื่อความเร็วและความเรียบง่าย ติดตั้งการอ้างอิง Python ด้วยคำสั่งต่อไปนี้
uv sync
จากนั้นอัปเดตไฟล์ .env ของตัวแทน ADK ด้วยการกำหนดค่าโปรเจ็กต์
cat > restaurant_concierge/.env <<EOF
GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT}
GOOGLE_CLOUD_LOCATION=global
GOOGLE_GENAI_USE_VERTEXAI=True
EOF
เตรียมโครงสร้างพื้นฐานของฐานข้อมูลและข้อมูล
ตั้งรหัสผ่านฐานข้อมูลและเพิ่มลงใน .env โดยทำดังนี้
export DB_PASSWORD=codelabpassword
echo "DB_PASSWORD=${DB_PASSWORD}" >> .env
จากนั้นเรียกใช้scripts/setup_database.shสคริปต์เพื่อเตรียมโครงสร้างพื้นฐานทั้งหมดที่จำเป็น โดยจะดำเนินการต่อไปนี้
- สร้างอินสแตนซ์ Cloud SQL
- ตรวจสอบว่าอินสแตนซ์พร้อมใช้งานหรือไม่
- ให้สิทธิ์ Vertex AI
- สร้างฐานข้อมูล
- ฐานข้อมูลรายการตั้งต้น
- เรียกใช้บริการ MCP Toolbox ในเบื้องหลัง
chmod +x scripts/setup_database.sh
./scripts/setup_database.sh > database_setup.log 2>&1 &
คำสั่งนี้จะเรียกใช้การตั้งค่าในเบื้องหลัง คุณสามารถตรวจสอบเอาต์พุตเป็นระยะๆ ได้ที่ไฟล์ database_setup.log
ตอนนี้เราควรมีที่เก็บตัวแทน ADK เริ่มต้นที่จำเป็นทั้งหมดเพื่อใช้ทำงาน ตอนนี้มาพูดถึง Antigravity และการพัฒนาที่อิงตามข้อกำหนดในส่วนถัดไปกันในขณะที่รอให้ทุกอย่างพร้อม
3. สำรวจโค้ดเริ่มต้นและทำความเข้าใจการพัฒนาที่ขับเคลื่อนด้วยข้อมูลจำเพาะ
ขั้นตอนนี้จะอธิบายโครงสร้างโค้ดเริ่มต้น แนะนำวิธีการพัฒนาที่ขับเคลื่อนด้วยข้อกำหนด สร้างฐานข้อมูล และยืนยันว่าเอเจนต์พื้นฐานทำงานได้ก่อนที่คุณจะเริ่มขยาย
โครงสร้างโปรเจ็กต์
เปิดโปรเจ็กต์ที่เก็บที่โคลนไว้ในโปรแกรมแก้ไข Antigravity แล้วตรวจสอบเลย์เอาต์ไดเรกทอรี
sdd-adk-agents-agy/ ├── .agents/ │ ├── workflows/ # SDD slash commands (/speckit.*) – manual trigger │ │ ├── speckit.specify.md │ │ ├── speckit.clarify.md │ │ ├── speckit.plan.md │ │ ├── speckit.tasks.md │ │ ├── speckit.analyze.md │ │ ├── speckit.implement.md │ │ ├── speckit.checklist.md │ │ └── speckit.constitution.md │ ├── skills/ # Antigravity skills (loaded on demand, agent determined) │ │ ├── mcp-toolbox-postgres/ │ │ │ └── SKILL.md # MCP Toolbox config skill │ │ └── repo-research/ │ │ └── SKILL.md # Repo analysis skill │ └── rules/ # Always-active context ├── .specify/ # spec-kit SDD templates and memory │ ├── memory/constitution.md │ ├── templates/ │ └── scripts/ ├── restaurant_concierge/ # ADK agent package │ ├── __init__.py │ ├── agent.py # LlmAgent + ToolContext tools + Toolbox integration │ └── .env # Vertex AI configuration ├── server.py # FastAPI server wrapping the agent ├── tools.yaml # MCP Toolbox tool definitions ├── scripts/ # Setup scripts └── pyproject.toml
ไฟล์สำคัญ
ไฟล์การสมัครเป็นตัวแทน
restaurant_concierge/agent.py- Agent หลักLlmAgentที่รวมเครื่องมือฐานข้อมูล MCP Toolbox เข้ากับการติดตามค่ากำหนดด้านอาหารที่อิงตามToolContextเอเจนต์จะโหลดเครื่องมือทั้งหมดจากเซิร์ฟเวอร์กล่องเครื่องมือและเพิ่มฟังก์ชัน Python 2 รายการ (save_dietary_preference,get_dietary_preferences) ที่ใช้ToolContextเพื่อจัดการสถานะtools.yaml— คำจำกัดความของเครื่องมือกล่องเครื่องมือ MCP เครื่องมือค้นหาในเมนู 3 รายการ ได้แก่ การค้นหาคีย์เวิร์ด (search_menu) การค้นหาเชิงความหมายผ่านpgvector(semantic_search_menu) และตัวกรองหมวดหมู่ (get_menu_by_category) ยังไม่มีเครื่องมือการจอง คุณจะเพิ่มเครื่องมือเหล่านั้นในภายหลังserver.py— เซิร์ฟเวอร์ FastAPI ขนาดเล็กที่แสดงวิธีเข้าถึง ADK เป็นออบเจ็กต์ FastAPIget_fast_api_app()จาก ADK มีปลายทางในตัว ซึ่งรวมถึง/run_sseสำหรับ API การสตรีม SSE และการจัดการเซสชัน
Antigravity Files
.agents/skills/mcp-toolbox-postgres/SKILL.md— ทักษะที่แนะนำ Antigravity เกี่ยวกับวิธีกำหนดค่า tools.yaml ที่เหมาะสมสำหรับ MCP Toolbox ทักษะนี้จะสอนการกำหนดค่าที่เกี่ยวข้องกับsources,toolsและembeddingModelsที่จำเป็นต่อการสร้างไปป์ไลน์ RAG ที่เหมาะสม ทักษะนี้จะไม่เปิดใช้งานจนกว่าคุณจะเพิ่ม Frontmatter YAML ที่เหมาะสมเพื่อให้ Antigravity รู้จัก.agents/skills/repo-research/SKILL.md— ทักษะที่สอน Antigravity วิธีวิเคราะห์ที่เก็บอย่างค่อยเป็นค่อยไปและสร้างเอกสารบริบทของโปรเจ็กต์ที่มีโครงสร้าง โดยจะใช้วิธีการ 4 ระยะ ได้แก่ การสแกนพื้นผิว (เฉพาะโครงสร้างไดเรกทอรี) ไฟล์การกำหนดค่าและข้อมูลเมตา จุดแรกเข้าและโมเดลข้อมูล จากนั้นจึงเจาะลึกแบบกำหนดเป้าหมาย โดยแต่ละระยะจะหยุดและเขียนผลการค้นพบก่อนที่จะไปยังระยะถัดไป และจะยังไม่ทำงานจนกว่าคุณจะเพิ่ม Frontmatter YAML ในภายหลัง เมื่อเปิดใช้งานแล้ว ให้เรียกใช้เพื่อสร้าง.agents/rules/project-context.mdซึ่งเป็นเอกสารการเริ่มต้นใช้งานที่ครอบคลุมสถาปัตยกรรม การขึ้นต่อกันของรันไทม์ พื้นผิว API และอภิธานศัพท์ของโดเมน
การพัฒนาที่ขับเคลื่อนด้วยข้อมูลจำเพาะ: ตั้งแต่การวางแผนในตัวของ Antigravity ไปจนถึง SDD ที่มีโครงสร้าง
ผู้ช่วยเขียนโค้ด AI ช่วยให้สร้างโค้ดจากพรอมต์ได้อย่างง่ายดาย ความเสี่ยง: คุณอธิบายฟีเจอร์ในประโยคเดียว ผู้ช่วยเขียนโค้ดหลายร้อยบรรทัด และคุณยอมรับเพราะดูเหมือนจะถูกต้อง บางครั้งจะเรียกกรณีเช่นนี้ว่า "Vibe Coding" ซึ่งก็คือการเขียนโค้ดตามความรู้สึก โดยยอมรับหรือปฏิเสธเอาต์พุตตามความเหมาะสม ซึ่งเหมาะสำหรับต้นแบบและสคริปต์ที่ใช้แล้วทิ้ง ซึ่งจะทำให้เกิดปัญหาเมื่อโค้ดเบสเติบโตขึ้น เมื่อฟีเจอร์ต่างๆ มีการโต้ตอบกัน หรือเมื่อคุณกลับมาดูโค้ดในอีกหลายสัปดาห์ต่อมาและไม่สามารถสร้างเหตุผลที่ทำให้ตัดสินใจเช่นนั้นขึ้นมาใหม่ได้

การพัฒนาที่ขับเคลื่อนด้วยข้อกำหนด (SDD) จะเพิ่มโครงสร้างให้กับลูปนี้ ก่อนที่จะสร้างโค้ด คุณต้องเขียนข้อกำหนดก่อนว่าฟีเจอร์นี้ทำอะไรได้บ้าง ใครเป็นผู้ใช้ และเกณฑ์ความสำเร็จคืออะไร ผู้ช่วย AI จะทำงานตามข้อกำหนดดังกล่าว และคุณก็เช่นกันเมื่อตรวจสอบเอาต์พุต ข้อกำหนดจะกลายเป็นแหล่งข้อมูลที่เชื่อถือได้เพียงแหล่งเดียวสำหรับเจตนา หากโค้ดแตกต่างจากข้อกำหนด คุณจะเห็นในรีวิว หากมีการเปลี่ยนแปลงข้อกำหนด คุณจะต้องอัปเดตข้อกำหนดก่อน แล้วจึงสร้างใหม่ การตัดสินใจจะได้รับการบันทึกไว้ ไม่ใช่การตัดสินใจแบบฉุกเฉิน
การแลกเปลี่ยนนี้เกิดขึ้นจริง โดย SDD จะช้ากว่า Vibe Coding ต่อฟีเจอร์ คุณเขียนเอกสารก่อนเขียนโค้ด แต่ผลตอบแทนจะเพิ่มขึ้นเรื่อยๆ การเปลี่ยนแปลงในอนาคตทุกครั้งในฐานของโค้ดจะมีบริบท การติดตั้งใช้งานที่ AI สร้างขึ้นทุกครั้งจะมีสัญญาที่ตรวจสอบได้ และคุณสามารถเตรียมความพร้อมผู้ใช้งานใหม่ร่วมกับผู้ทำงานร่วมกัน (มนุษย์หรือ AI) ได้โดยชี้ให้ดูที่ข้อกำหนดแทนที่จะอธิบายการตัดสินใจจากความทรงจำ
Antigravity ปฏิบัติตามหลักการพัฒนาที่ขับเคลื่อนด้วยข้อมูลจำเพาะอยู่แล้ว เมื่อตั้งค่า Agent เป็นโหมดการวางแผน Agent จะสร้างอาร์ติแฟกต์ 2 รายการก่อนที่จะเขียนโค้ด
- แผนการติดตั้งใช้งาน - ภาพรวมของแนวทางเทคนิคที่เสนอ การเปลี่ยนแปลงไฟล์ และการตัดสินใจด้านสถาปัตยกรรม

- รายการงาน - รายละเอียดของรายการงานที่มีโครงสร้าง

Antigravity ขอให้คุณตรวจสอบและอนุมัติอาร์ติแฟกต์เหล่านี้ก่อนดำเนินการ วงจรการวางแผนแล้วจึงนำไปใช้เป็นหัวใจสำคัญของการพัฒนาที่ขับเคลื่อนด้วยข้อกำหนด เนื่องจากข้อกำหนดเป็นตัวนำทางโค้ด ไม่ใช่ในทางกลับกัน
Codelab นี้จะต่อยอดจากพื้นฐานดังกล่าวด้วยเวิร์กโฟลว์ที่มีข้อจำกัดและควบคุมเวอร์ชันโดยอิงตาม spec-kit ซึ่งเป็นเฟรมเวิร์กการพัฒนาที่อิงตามข้อกำหนดจาก GitHub ฟีเจอร์ทุกอย่างจะผ่านไปป์ไลน์ที่ตั้งใจไว้ ซึ่งแต่ละอาร์ติแฟกต์จะเป็นเอกสารแบบสแตนด์อโลนที่คุณสามารถตรวจสอบ แก้ไข และติดตามใน git ได้ ไปป์ไลน์มี 2 เฟส (ชี้แจงและวิเคราะห์) ที่เป็นตัวเลือกในการควบคุมคุณภาพ ซึ่งจะตรวจจับปัญหาได้ก่อนที่จะกลายเป็นปัญหาในการติดตั้งใช้งาน
ระยะ | อาร์ติแฟกต์ | Purpose |
|
| กำหนดสิ่งที่จะสร้าง (แสดงต่อผู้ใช้ ไม่ขึ้นกับเทคโนโลยี) |
| อัปเดตเมื่อ | ระบุส่วนที่ไม่ได้ระบุรายละเอียด ถามคำถามที่เจาะจงเพื่อขอคำชี้แจง และเข้ารหัสคำตอบกลับลงในข้อกำหนด |
|
| ออกแบบวิธีสร้าง (แนวทางเทคนิค รูปแบบข้อมูล การวิจัย) |
|
| แบ่งแผนออกเป็นขั้นตอนที่เรียงตามลำดับและนำไปใช้ได้จริง |
| รายงานการวิเคราะห์ | ตรวจสอบงานเพื่อหาความเสี่ยง ช่องว่าง หรือกรณีขอบที่ขาดหายไปก่อนการติดตั้งใช้งาน |
| การเปลี่ยนแปลงโค้ด | ทำงานโดยทำเครื่องหมายแต่ละงาน |

ระบบจะบันทึกอาร์ติแฟกต์ทุกรายการเป็นไฟล์ใน specs/<feature-branch>/ ควบคุมเวอร์ชันใน Git และนำกลับมาใช้ใหม่ได้ หากการสนทนาถูกขัดจังหวะหรือคุณต้องการกลับมาดูการตัดสินใจในภายหลัง เอกสารข้อกำหนดจะพร้อมให้คุณดูเสมอ โดยจะไม่ฝังอยู่ในประวัติการแชท
ที่เก็บเริ่มต้นมีเวิร์กโฟลว์ SDD เหล่านี้ใน .agents/workflows/ และเทมเพลตใน .specify/templates/ คุณจะใช้ฟังก์ชันเหล่านี้ในภายหลังเพื่อเพิ่มฟีเจอร์ลงในเอเจนต์
4. บริบทของโปรเจ็กต์ Bootstrap ด้วย Antigravity
ตอนนี้มาจำลองสถานการณ์ด้วยเงื่อนไขที่ "ค่อนข้างใกล้เคียง" กับงานประจำของเรากัน
- ที่เก็บที่ไม่ได้จัดการอย่างดี
- README ล้าสมัย
- เอกสารประกอบที่ไม่ได้อัปเดตบ่อย
สิ่งแรกที่เราต้องการทำในสถานการณ์เช่นนี้มักจะเป็นการสร้างแผนที่หรือบริบทเกี่ยวกับโปรเจ็กต์ที่เราต้องการให้ Antigravity ทำ ขั้นตอนนี้แสดงตัวอย่างแนวทางในการช่วยให้ Antigravity เข้าใจฐานของโค้ดที่มีอยู่ได้อย่างลึกซึ้งโดยการสร้างทักษะที่วิเคราะห์ที่เก็บและสร้างเอกสารบริบทของโปรเจ็กต์
นอกจากนี้ ยังกำหนดธรรมนูญของโปรเจ็กต์ ซึ่งเป็นหลักการที่ต่อรองไม่ได้ซึ่งเวิร์กโฟลว์ SDD จะตรวจสอบ ซึ่งจะช่วยให้ Antigravity มีบริบทและข้อจำกัดที่จำเป็นสำหรับรอบ SDD ในภายหลัง
ลำดับชั้นบริบทของ Antigravity
Antigravity ใช้บริบท 3 ระดับ โดยแต่ละระดับมีขอบเขตที่แตกต่างกัน ดังนี้
- กฎ (
.agents/rules/): คำสั่งที่ใช้งานอยู่เสมอ ทุกการสนทนาในพื้นที่ทำงานนี้จะเห็นกฎ ( หากคุณเปิดใช้งาน) ใช้กฎสำหรับบริบททั่วทั้งโปรเจ็กต์ เช่น การตัดสินใจด้านสถาปัตยกรรม มาตรฐานการเขียนโค้ด หรือข้อมูล Technology Stack - ทักษะ (
.agents/skills/): ความรู้แบบออนดีมานด์ Antigravity จะโหลดทักษะเมื่องานปัจจุบันตรงกับฟิลด์descriptionของทักษะเท่านั้น ใช้ทักษะสำหรับข้อมูลอ้างอิงเฉพาะโดเมน - เวิร์กโฟลว์ (
.agents/workflows/): พรอมต์ที่บันทึกไว้ซึ่งทริกเกอร์ด้วยคำสั่ง/ใช้เวิร์กโฟลว์สำหรับกระบวนการแบบหลายขั้นตอนที่ทำซ้ำได้ เช่น ไปป์ไลน์ SDD
เปิดใช้งานสกิล
ที่เก็บเริ่มต้นมีทักษะที่เขียนไว้ล่วงหน้า 2 รายการใน .agents/skills/ โดยจะมีวิธีการโดยละเอียด แต่จะเริ่มต้นด้วยTODO(codelab)ความคิดเห็นแทนที่จะเป็น Frontmatter ของ YAML ที่จำเป็น หากไม่มี Frontmatter Antigravity จะค้นหาไม่ได้
ทักษะการต้านแรงโน้มถ่วงต้องมีบล็อกส่วนหน้า YAML ที่ด้านบนของไฟล์ที่มี 2 ฟิลด์ดังนี้
name— ตัวระบุที่ไม่ซ้ำกันสำหรับทักษะdescription- ข้อมูลสรุปภาษาธรรมชาติที่ Antigravity จะจับคู่เมื่อตัดสินใจว่าจะโหลดทักษะใดสำหรับคำขอที่ระบุ
เปิด .agents/skills/mcp-toolbox-postgres/SKILL.md ในโปรแกรมแก้ไข แทนที่TODO(codelab)บรรทัดความคิดเห็นที่ด้านบนด้วย Frontmatter นี้
---
name: mcp-toolbox-postgres
description: Configure MCP Toolbox for PostgreSQL — sources, tools, and embedding models
---
เปิด .agents/skills/repo-research/SKILL.md ในเครื่องมือแก้ไข แทนที่TODO(codelab)บรรทัดความคิดเห็นที่ด้านบนด้วย Frontmatter นี้
---
name: repo-research
description: Analyze a repository's structure, technologies, and patterns to create or update a project context document. Use when asked to research, analyze, or understand a codebase.
---
ตรวจสอบว่าทักษะทั้ง 2 มี Frontmatter ที่ถูกต้อง
head -4 .agents/skills/mcp-toolbox-postgres/SKILL.md
head -4 .agents/skills/repo-research/SKILL.md
แต่ละรายการควรแสดงตัวคั่น --- ที่ครอบฟิลด์ name: และ description: หากไม่มีตัวคั่นหรือฟิลด์ Antigravity จะไม่รู้จักทักษะ
โดยระบบจะโหลดทั้ง 2 ทักษะตามความต้องการ ซึ่ง Antigravity จะจับคู่คำขอของคุณกับฟิลด์ description และดึงวิธีการทั้งหมดเมื่อเกี่ยวข้องเท่านั้น
ติดตั้งทักษะที่พร้อมใช้งานแบบสาธารณะ
ADK Cheatsheet Skills
ก่อนหน้านี้เราได้ตรวจสอบทักษะที่เราสร้างขึ้นเอง ( ทักษะ repo-research และ mcp-toolbox-postgres) อย่างไรก็ตาม ยังมีทักษะอื่นๆ อีกมากมายที่มีประโยชน์ในการสนับสนุนการพัฒนาซอฟต์แวร์ของเรา และสามารถติดตั้งลงใน Agent การเขียนโค้ดได้อย่างง่ายดาย ตัวอย่างเช่น ในบทแนะนำนี้ เราจำเป็นต้องโต้ตอบกับ ADK ดังนั้นเราจึงต้องมีความรู้ที่เหมาะสมเกี่ยวกับวิธีสร้างด้วย ADK มาติดตั้งทักษะด้านเอกสารประกอบ ADK โดยใช้คำสั่งต่อไปนี้กัน
npx skills add google/adk-docs
จากนั้นระบบจะแจ้งให้คุณยืนยันการติดตั้งดังที่แสดงด้านล่าง

กด y เพื่อดำเนินการต่อด้วยพรอมต์ถัดไปเพื่อเลือกทักษะที่จะติดตั้งตามที่แสดงด้านล่าง ตอนนี้ให้เลือกเฉพาะ adk-cheatsheet (กด Space เพื่อเลือก จากนั้นกด Enter เพื่อยืนยัน)

จากนั้นเพียงคลิกEnterตัวเลือกอื่นๆ เพื่อเปิดใช้การติดตั้งเริ่มต้นและติดตั้งทักษะในโปรเจ็กต์ปัจจุบัน
คุณจะเห็นว่าระบบได้เพิ่มทักษะ ADK ใหม่ลงในไดเรกทอรี .agents/skills ซึ่งก็คือ adk-cheatsheet
ทักษะของมนุษย์ถ้ำ
ทักษะที่มีประโยชน์อย่างหนึ่งในการลดการใช้โทเค็นคือทักษะมนุษย์ถ้ำ ทักษะนี้สามารถตัดโทเค็นเอาต์พุตจากเอเจนต์ ทำให้เป็นส่วนผสมที่ดีเมื่อคุณใช้การพัฒนาที่ขับเคลื่อนด้วยข้อกำหนดแบบเต็ม เช่น บทแนะนำนี้
npx skills add JuliusBrussee/caveman
เช่นเดียวกับก่อนหน้านี้ ให้เลือกทักษะ caveman ที่นี่ก่อน

จากนั้นเพียงคลิกป้อนเพื่อเลือกตัวเลือกอื่นๆ เพื่อเปิดใช้การติดตั้งเริ่มต้นและติดตั้งทักษะในโปรเจ็กต์ปัจจุบัน
ตอนนี้เราควรมีทักษะ 4 อย่างที่กำหนดค่าไว้แล้วและพร้อมที่จะเริ่มต้นเส้นทาง SDD
.agents/skills/ ├── adk-cheatsheet ├── caveman ├── mcp-toolbox-postgres └── repo-research
สร้างบริบทของโปรเจ็กต์
ตรวจสอบว่ามีไดเรกทอรีของกฎอยู่
mkdir -p .agents/rules
ในกล่อง Agent Manager/Chat ของ Antigravity (ในโหมดเอดิเตอร์ ให้กด ctrl + L) ให้เริ่มการสนทนาใหม่ ประเภท:
Research this repository and create a project context document, and communicate efficiently
Antigravity จะจับคู่คำขอของคุณกับทักษะ repo-research และ caveman ( คำสั่งเพื่อสื่อสารอย่างมีประสิทธิภาพ) จากนั้นจะเริ่มวิเคราะห์ฐานของโค้ดอย่างเป็นระบบ โดยจะอ่านไฟล์การกำหนดค่า ซอร์สโค้ด และเอกสารประกอบ จากนั้นจะป้อนข้อมูลลงในเทมเพลตบริบทของโปรเจ็กต์ด้วยสิ่งที่พบ
เมื่อเสร็จแล้ว ให้เปิด .agents/rules/project-context.md ในเอดิเตอร์ ซึ่งมีข้อมูลที่ชัดเจนเกี่ยวกับโปรเจ็กต์ ได้แก่ Technology Stack (Python 3.12, ADK, MCP Toolbox, Cloud SQL), โครงสร้างโปรเจ็กต์, โมเดลข้อมูล (ตาราง menu_items ที่มี pgvector) และการผสานรวมภายนอก

กำหนดธรรมนูญของโปรเจ็กต์
เวิร์กโฟลว์ SDD อ้างอิงถึงธรรมนูญของโปรเจ็กต์ที่ .specify/memory/constitution.md ระหว่างการวางแผนและการวิเคราะห์ /speckit.plan เวิร์กโฟลว์จะเรียกใช้ "การตรวจสอบรัฐธรรมนูญ" กับเนื้อหาดังกล่าว และ/speckit.analyze จะแจ้งว่ามีการละเมิดเป็น "วิกฤต" หากปล่อยให้รัฐธรรมนูญเป็นเทมเพลตเปล่าที่มีโทเค็นตัวยึดตำแหน่ง การตรวจสอบเหล่านี้จะไม่มีสิ่งใดให้ตรวจสอบ แผนและการวิเคราะห์จะทำงานโดยไม่มีการควบคุม
รัฐธรรมนูญกำหนดหลักการของโปรเจ็กต์ที่ต่อรองไม่ได้ ที่เก็บนี้เป็นที่เก็บขนาดเล็กที่ดูแลโดยนักพัฒนาซอฟต์แวร์เพียงคนเดียว ดังนั้นรัฐธรรมนูญควรสะท้อนถึงขอบเขตดังกล่าว นั่นคือทำให้เรียบง่าย สอดคล้องกัน และหลีกเลี่ยงการออกแบบที่ซับซ้อนเกินไป
ใน Agent Manager ของ Antigravity ให้เริ่มการสนทนาใหม่ เรียกใช้เวิร์กโฟลว์รัฐธรรมนูญ
/speckit.constitution This is a small restaurant concierge ADK agent maintained by one developer. Set 3 principles: (1) All database operations go through MCP Toolbox tool definitions in tools.yaml — no raw SQL in Python code, no ORM. (2) Session state uses ADK ToolContext — no custom state management, no external state stores. (3) Keep it simple — follow existing file and naming conventions exactly.
Antigravity จะกรอกเทมเพลตรัฐธรรมนูญด้วยหลักการที่เป็นรูปธรรม กำหนดเวอร์ชัน (1.0.0) และเรียกใช้การตรวจสอบความสอดคล้องในเทมเพลต SDD
ตรวจสอบรัฐธรรมนูญที่สร้างขึ้นได้ที่ .specify/memory/constitution.md ตรวจสอบว่ามีหลักการทั้ง 3 ข้อและระบุไว้อย่างชัดเจน

5. วงจร SDD - เพิ่มฟีเจอร์การจอง
ขั้นตอนนี้จะอธิบายวงจร SDD ทั้งหมดเพื่อเพิ่มการจองห้องพักไปยังตัวแทนอำนวยความสะดวกของร้านอาหาร คุณจะขับเคลื่อน Antigravity ผ่านแต่ละเฟส ได้แก่ ระบุ ชี้แจง วางแผน งาน วิเคราะห์ และนำไปใช้ โดยสังเกตว่าอาร์ติแฟกต์แต่ละรายการสร้างขึ้นจากอาร์ติแฟกต์ก่อนหน้าอย่างไร ซึ่งเป็นประสบการณ์การเรียนรู้หลักของ Codelab
ระบุฟีเจอร์
ใน Agent Manager ของ Antigravity ให้เริ่มการสนทนาใหม่ พิมพ์/speckit.specifyคำสั่งเวิร์กโฟลว์พร้อมรายละเอียดฟีเจอร์
/speckit.specify Add reservation booking capability to the restaurant concierge agent. Guests should be able to make a table reservation by providing their name, party size, date, and time. They should also be able to check existing reservations. The agent should confirm reservation details before booking and handle special requests (e.g., "window seat", "birthday celebration").
Antigravity สร้างกิ่งก้านฟีเจอร์ สร้างเอกสารข้อกำหนด และเรียกใช้การตรวจสอบคุณภาพ หาก Antigravity ถามคำถามเพื่อขอคำชี้แจง ให้ตอบคำถามตามรายละเอียดฟีเจอร์ด้านบน
ข้อกำหนดจะเน้นที่ "อะไร" และ "ทำไม" ไม่ใช่ "อย่างไร" โดยอธิบายประสบการณ์ของผู้ใช้ ("แขกรับเชิญสามารถจองได้โดยระบุชื่อ จำนวนคน วันที่ และเวลา") โดยไม่ต้องพูดถึงตาราง SQL, tools.yaml หรือ ADK API รายละเอียดการใช้งานจะอยู่ในระยะการวางแผน
ตรวจสอบข้อกำหนดที่สร้างขึ้นที่ specs/<branch-name>/spec.md ตรวจสอบว่าข้อกำหนดดังกล่าวครอบคลุมข้อกำหนดด้านฟังก์ชันและเกณฑ์ความสำเร็จ

ชี้แจงข้อกำหนด (ไม่บังคับ)
เรียกใช้เวิร์กโฟลว์การชี้แจงเพื่อระบุและแก้ไขพื้นที่ที่ระบุไม่ชัดเจนในข้อกำหนด
/speckit.clarify
Antigravity จะสแกนข้อกำหนดเพื่อหาความคลุมเครือ เกณฑ์การยอมรับที่ขาดหายไป และข้อกำหนดที่ระบุไม่ชัดเจน โดยจะถามคำถามที่มุ่งเน้นการชี้แจง ซึ่งแต่ละคำถามสามารถตอบได้ด้วยการเลือกหรือวลีสั้นๆ ระบบจะเข้ารหัสคำตอบของคุณกลับลงในข้อกำหนดโดยตรง ซึ่งจะช่วยให้ข้อกำหนดมีความแม่นยำมากขึ้นก่อนที่จะเริ่มวางแผน
วางแผนการติดตั้งใช้งาน
เรียกใช้เวิร์กโฟลว์การวางแผน
/speckit.plan Update the restaurant concierge agent to multi agent architecture which separate responsibilities for handling menu and reservations. Use your ADK and MCP toolbox skill to implement it properly
Antigravity สร้างแผนทางเทคนิคผ่าน 2 ระยะดังนี้
- ระยะการวิจัย - แก้ไขสิ่งที่ยังไม่ทราบเกี่ยวกับโค้ดเบสที่มีอยู่ สร้าง
research.md - ช่วงออกแบบ - สร้าง
data-model.md(คำจำกัดความของเอนทิตีการจอง) และอัปเดตproject-context.md
Antigravity ควรใช้ทักษะ adk-agent-development ในระหว่างการวางแผน ตรวจสอบอาร์ติแฟกต์ที่สำคัญ
specs/<branch-name>/plan.md- แนวทางด้านเทคนิค: ไฟล์ที่จะแก้ไข รูปแบบที่ต้องทำตามspecs/<branch-name>/data-model.md— คำจำกัดความของเอนทิตีการจอง (คอลัมน์ ประเภท ความสัมพันธ์)specs/<branch-name>/research.md— การตัดสินใจและเหตุผล

สร้างงาน
เรียกใช้เวิร์กโฟลว์ของงาน
/speckit.tasks
Antigravity จะแบ่งแผนออกเป็นรายการงานที่เรียงลำดับใน specs/<branch-name>/tasks.md งานจะเป็นไปตามรูปแบบรายการตรวจสอบที่เข้มงวดโดยมีรหัส เครื่องหมายลำดับความสำคัญ และเส้นทางไฟล์ เช่น
- [ ] [T001] [P] Create reservations table schema in scripts/seed_db.py - [ ] [T002] [P] Add create_reservation tool to tools.yaml - [ ] [T003] [P] Add list_reservations tool to tools.yaml - [ ] [T004] [P] Update agent instruction in restaurant_concierge/agent.py
โดยจะจัดระเบียบงานเป็นระยะต่างๆ ได้แก่ การตั้งค่า → พื้นฐาน → สตอรี่ของผู้ใช้ → การปรับแต่ง สแกนรายการงานเพื่อทำความเข้าใจว่าระบบจะสร้างและแก้ไขอะไร

วิเคราะห์งาน (ไม่บังคับ)
เรียกใช้เวิร์กโฟลว์การวิเคราะห์เพื่อตรวจสอบงานสำหรับความเสี่ยงและช่องโหว่
/speckit.analyze
Antigravity จะตรวจสอบรายการงานกับข้อกำหนดและแผน โดยมองหางานที่อาจขัดแย้งกัน หรือช่องว่างระหว่างข้อกำหนดของข้อกำหนดกับงานที่วางแผนไว้ แก้ไขปัญหาร้ายแรงก่อนที่จะนำไปใช้
6. ใช้งาน
เรียกใช้เวิร์กโฟลว์การติดตั้งใช้งาน
/speckit.implement
Antigravity จะนำเสนอแผนการติดตั้งใช้งานขั้นสุดท้ายและอาร์ติแฟกต์ของงาน ตรวจสอบและอนุมัติเพื่อดำเนินการต่อ


Antigravity จะดำเนินการตามงานและทำเครื่องหมายแต่ละงานเมื่อเสร็จสิ้น เมื่อเสร็จแล้ว ระบบจะแสดงคำแนะนำแบบสมบูรณ์

ทดสอบการเปลี่ยนแปลงโค้ด
หลังจากติดตั้งใช้งานเสร็จแล้ว ให้ยืนยันว่ามีการเปลี่ยนแปลงคีย์ ชื่อไฟล์และเนื้อหาที่แน่นอนอาจแตกต่างกันไป แต่ควรมีรูปแบบเหล่านี้เหมือนใน tools.yaml และ agent.py
# Verify reservation tools were added to tools.yaml
grep -i "reservation" tools.yaml
คุณจะเห็นเอาต์พุตบางอย่างในลักษณะนี้
...
get_reservations_by_name:
Retrieve all reservations for a guest by their name. Uses case-insensitive
SELECT id, guest_name, party_size, reservation_datetime, special_requests, created_at
FROM reservations
ORDER BY reservation_datetime DESC
...
และสำหรับ agent.py
# Verify agent instruction was updated
grep -i "reservation" restaurant_concierge/agent.py
# Check what files changed
git diff --name-only
คุณอาจเห็นการเปลี่ยนแปลงเช่นนี้
...
- **Table Reservations**: Help guests book a table or check their existing reservations.
## Reservation Booking Rules
When a guest wants to make a reservation, collect ALL of the following before confirming:
**IMPORTANT**: Before calling `book_reservation`, you MUST:
- Only call `book_reservation` after the guest says "yes" or "confirm"
## Checking Reservations
When a guest asks to check their reservations:
- Use `get_reservations_by_name` to find their bookings
book_reservation,
...
การเปลี่ยนแปลงควรส่งผลต่อสคริปต์ฐานข้อมูลเริ่มต้น สคริปต์ที่อัปเดตแล้วควรสร้างตาราง reservations หากยังไม่มี คุณควรเห็นเอาต์พุตที่ยืนยันว่าได้สร้างตารางใหม่แล้ว (menu_itemsข้อมูลที่มีอยู่จะยังคงอยู่)
หากทุกอย่างเป็นไปด้วยดีจนถึงตอนนี้ เราจะทดสอบฟีเจอร์ใน UI สำหรับนักพัฒนาซอฟต์แวร์ของตัวแทน ADK ได้ มาทำการย้ายข้อมูลฐานข้อมูลเพื่อรวมตารางใหม่และรีสตาร์ทกล่องเครื่องมือเพื่อเลือกคำจำกัดความของเครื่องมือใหม่ใน tools.yaml กัน หยุดกระบวนการ Toolbox ที่มีอยู่ แล้วเริ่มกระบวนการใหม่โดยทำดังนี้
lsof -ti:5000 | xargs kill -9 2>/dev/null; echo "Done"
./scripts/setup_database.sh > database_setup.log 2>&1 &
คุณสามารถตรวจสอบบันทึกเอาต์พุตใน database_setup.log ว่า Antigravity สร้างโค้ดและการกำหนดค่าที่ถูกต้องหรือไม่ หากพบข้อผิดพลาด ให้ลองโต้ตอบกับตัวแทนเพื่อแก้ไข
หากทุกอย่างเป็นไปด้วยดี เราจะเริ่ม UI สำหรับนักพัฒนาแอป ADK ได้โดยทำดังนี้
uv run adk web .
เปิด http://localhost:8000 ในเบราว์เซอร์ แล้วทดสอบด้วยพรอมต์ต่อไปนี้
I'd like to book a table for 4 people on Friday at 7pm under the name Timmy
Do I have any upcoming reservations?


ตอนนี้ให้หยุด UI สำหรับนักพัฒนาแอป ADK โดยกด Ctrl+C 2 ครั้ง
7. ชาเลนจ์ (ไม่บังคับ)
ตอนนี้คุณก็ทราบเวิร์กโฟลว์ SDD ทั้งหมดแล้ว ลองทดสอบดู
- เรียกใช้รอบ SDD ที่ 2 เพื่อสร้างอินเทอร์เฟซแชทบนเว็บสำหรับเจ้าหน้าที่อำนวยความสะดวกของร้านอาหาร โดยครั้งนี้ไม่ต้องมีคำแนะนำแบบทีละขั้นตอน
- ทำให้เอเจนต์ใช้งานได้ใน Cloud Run สำหรับสถานการณ์การใช้งานจริง
คำแนะนำ
- โปรเจ็กต์ไม่มีเฟรมเวิร์กส่วนหน้า Antigravity ควรเสนอ HTML/CSS/JS แบบดั้งเดิม หากแนะนำ React หรือคล้ายกัน ให้โน้มน้าวให้ใช้แบบเรียบง่าย (หลักการ "ทำให้เรียบง่าย" ของรัฐธรรมนูญควรจับประเด็นนี้ได้)
- เซิร์ฟเวอร์ ADK จะแสดง
/run_sseสำหรับการสตรีมและ/apps/{app_name}/users/{user_id}/sessionsสำหรับการจัดการเซสชัน Antigravity จะค้นพบสิ่งเหล่านี้จากบริบทของโปรเจ็กต์ - หลังจากติดตั้งใช้งานแล้ว ให้เริ่มเซิร์ฟเวอร์ด้วย
uv run uvicorn server:app --host 0.0.0.0 --port 8080(ไม่ใช่adk web) เพื่อให้การติดตั้งไฟล์แบบคงที่ทำงานได้ - ทดสอบที่
http://localhost:8080/static/index.html - Codelab อ้างอิงแสดงวิธีทำให้ใช้งานได้และคงอยู่ของ ADK Agent อยู่แล้ว โปรดอ้างอิง Antigravity ถึง Codelab นี้
8. ยินดีด้วย
คุณได้ขยายตัวแทน ADK ของเจ้าหน้าที่อำนวยความสะดวกในร้านอาหารด้วยการจองที่นั่งผ่านเวิร์กโฟลว์ SDD ของ Antigravity โดยไม่ต้องเขียนโค้ดของแอปพลิเคชันด้วยตนเอง
สิ่งที่คุณสร้าง
- เอเจนต์ ADK ของเจ้าหน้าที่อำนวยความสะดวกในร้านอาหารที่มีการค้นหาเมนู การค้นหาเชิงความหมาย การติดตามค่ากำหนดด้านอาหาร และการจอง
- ทักษะ Antigravity สำหรับการวิจัยที่เก็บที่สร้างและดูแลเอกสารบริบทของโปรเจ็กต์
- ธรรมนูญของโปรเจ็กต์ที่บังคับใช้หลักการที่ต่อรองไม่ได้ในระหว่างการวางแผนและการวิเคราะห์
- วงจร SDD ที่สมบูรณ์ซึ่งแสดงให้เห็นเวิร์กโฟลว์ระบุ → ชี้แจง → วางแผน → งาน → วิเคราะห์ → นำไปใช้
สิ่งที่คุณได้เรียนรู้
- วิธีใช้เวิร์กโฟลว์ Spec-Driven Development ใน Antigravity เพื่อเพิ่มฟีเจอร์ลงในโค้ดเบสที่มีอยู่
- วิธีสร้างทักษะ Antigravity ที่รวมความรู้เฉพาะด้านเพื่อนำกลับมาใช้ใหม่ในการสนทนา
- วิธีเริ่มต้นบริบทของโปรเจ็กต์เพื่อให้ Antigravity ตัดสินใจอย่างมีข้อมูลเกี่ยวกับการเลือกสถาปัตยกรรม รูปแบบ และเทคโนโลยี
- วิธีตั้งค่าธรรมนูญของโปรเจ็กต์ที่เวิร์กโฟลว์ SDD ตรวจสอบ
- วิธีขยาย Agent ADK ด้วยเครื่องมือใหม่ที่ใช้ฐานข้อมูลผ่าน MCP Toolbox
ล้างข้อมูล
หยุดกระบวนการที่ทำงานในเครื่อง (กล่องเครื่องมือ)
pkill -f toolbox 2>/dev/null
ลบอินสแตนซ์ Cloud SQL เพื่อหลีกเลี่ยงการเรียกเก็บเงินอย่างต่อเนื่อง โดยทำดังนี้
gcloud sql instances delete restaurant-db --quiet
หากต้องการ คุณสามารถลบทั้งโปรเจ็กต์ได้โดยทำดังนี้
gcloud projects delete $GOOGLE_CLOUD_PROJECT