Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add instructions/workfromrome/hotelai/agents-mdgit clone --depth 1 https://github.com/workfromrome/HotelAIWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.03421 | $0.03421 |
| Opus 5 | $0.01710 | $0.01710 |
| Sonnet 5 | $0.00684 | $0.00684 |
| Haiku 4.5 | $0.00342 | $0.00342 |
Grade A, and why
HotelAI AGENTS.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 136 lines — stays where its author put it; the contents beside it link to each section on GitHub.
AGENTS.md
System overview
src/ingestion/: PDF loading/segmentation and structured Groq/Gemini-reviewed extraction.pdf_parser.py: pdfplumber-based hotel-block segmentation, OCR cleanup, and word bounding boxes (used as the reference.wordssource for the visual-ratings fallback).pymupdf_parser.py: font-size-aware header extractor; canonicalnome/localitasource forstructured_extractor. The two flat exclusion word-lists (_EXCLUDED_HEADER_TEXT,_EXCLUDED_BADGE_WORDS) live as one-word-per-line.txtfiles inpdf_artifacts/, not as Python constants — edit those files to add/remove excluded words, no code change needed._STOP_MARKERS(regex) and_LIGATURE_GLYPHS(character-substitution rule) stayed in code: they're parsing logic, not data.structured_extractor.py: canonicalHotelRecordextraction and CSV/JSONL export.
src/search/: embeddings, ChromaDB indexing, hybrid retrieval and Markdown formatting.vector_store.py:GeminiEmbedder, offline embedder and persistent Chroma index.build_index_from_csvreadshotels_data.csvback viastructured_extractor.read_csvand is the real Part-1-to-Part-2 bridge —build_indexitself takes only records, no PDF blocks, since the document text embedded per hotel isrecord.source.raw_text, already present in the CSV'ssourcecolumn.retriever.py: maximum-five-result search and ranking.
src/rag/rag_engine.py:RAGEngine/answer_queryconversational synthesis overHotelRetrieverresults; tries Groq first, falls back to Gemini, then to the fixed fallback stringFALLBACK_MESSAGE. Not yet wired intomcp_server.src/mcp_server/server.py: canonical FastMCP server andsearch_hotels(query)tool. Does not yet expose the RAG engine's natural-language synthesis, only raw retrieval.src/api/main.py: FastAPI HTTP layer for the React frontend —POST /api/chat(RAGEngine.answer_query),GET /api/hotels(readssettings.hotel_records_path, i.e.data/processed/hotels_data.jsonl, the canonicalHotelRecord-schema export — not the legacyhotels.jsonl),GET /api/health(Chroma connectivity/count + Groq/Gemini key presence). Retriever/RAG-engine access is viaDepends(get_retriever)/Depends(get_rag_engine), overridable in tests; the real Chroma index is only built in thelifespanstartup hook, so tests never touch it unless they opt in. CORS is open tohttp://localhost:5173(Vite dev server) only. Run:uvicorn api.main:app --reload --port 8000(PYTHONPATH=src, from repo root).frontend/: Vite + React chatbot UI (dark theme, ChatGPT/Claude-style layout). Talks to the backend via/api/*, proxied tolocalhost:8000byvite.config.jsin dev — CORS is also configured on the backend as a second line of defense.src/components/:Sidebar.jsx(status, 5 quick queries, hotel catalog accordion),ChatArea.jsx(hero view, message bubbles, page-range citation badges, typing indicator),InputBar.jsx.src/styles/app.cssholds the whole design (CSS variables for the zinc/emerald palette). No markdown renderer is wired in — assistant answers render aswhite-space: pre-wrapplain text, so literal**bold**/table-pipe markup from the LLM is visible as-is; addreact-markdownif that needs to render properly. Run:cd frontend && npm install && npm run dev(port 5173)..claude/launch.jsonhas afrontendconfig for thepreview_starttool.src/hotelai/: canonicalsettings/Settings(config.py),HotelRecordschema (schemas.py), centralized logging setup (logging_setup.py),prompts/(LLM prompt text as.mdfiles plusload_prompt(name), see line below), andserver.py(deprecated compat wrapper, see line below). Renamed fromfde_hotel_rag; the project folder itself is still namedfde_hotel_ragpending a manual rename by the user (see Known gotchas). Formerly also heldextractors//storage/subpackages — deleted, they contained no source, only stale__pycache__.src/hotelai/prompts/: all LLM prompt text lives here as.mdfiles, not inline in Python —load_prompt(name)reads<name>.mdand strips it; callers.format(...)it themselves when the template has placeholders (conversational_rag.mdtakes{fallback_message},structured_review.mdtakes{example}, the dynamically-builtHotelReviewJSON sample).visual_ratings.mdhas no placeholders. Editing a prompt's wording only ever means editing the.mdfile.scripts/run_pipeline.py: primary ingestion entry point;--offlineskips API calls and indexing.tests/: unit/integration-style tests for parsing, extraction, Chroma, retrieval, MCP and the FastAPI layer (test_api.py, 100% mocked viaapp.dependency_overrides).scripts/compare_pdf_extractors.py: comparison-only PyMuPDF extraction benchmark.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 136 lines · 3,421 tokens per session scan A 8dc3e1215a00
HotelAI AGENTS.md is an instructions file published in the GitHub repository workfromrome/HotelAI (0 stars, last pushed 9d ago), licensed MIT. It adds 3,421 tokens to every session, about $0.0171 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other instructions, from other repositories
vscode buildNext.instructions.md
Working notes and architecture documentation for the new esbuild-based build system in build/next. Use when making changes to the new build pipeline (transpile/bundle commands, NLS plugin, source-map handling, resource copying, or self-hosting watch tasks).
spec-kit AGENTS.md
AGENTS.md instructions for github/spec-kit, covering agents.md, about spec kit and specify, quickstart — add a new integration in 5 steps, integration architecture and integrationmanifest — file tracking.
codex AGENTS.md
AGENTS.md instructions for openai/codex, covering rust/codex-rs, the codex-core crate, code review rules, crate api surface and model visible context.
langchain AGENTS.md
AGENTS.md instructions for langchain-ai/langchain, covering global development guidelines for the langchain monorepo, corridor security analysis, project architecture and context, monorepo structure and development tools & commands.
vscode oss-third-party-notices.instructions.md
Instructions for microsoft/vscode, covering vs code oss third-party-notices pipeline, architecture, pipeline flow in ci, applying the notice (cutover) and fallback chain (never fail the build).
next.js AGENTS.md
Instructions for vercel/next.js, covering next.js development guide, codebase structure, monorepo overview, core package: packages/next and other important packages.