Autonomous AI assistant for Linda Jets Charter Group — built on OpenClaw, powered by Claude.
Private jet brokerage, automated. From incoming RFQ to trip completion to CRM — your AI team handles the full lifecycle while your humans make the decisions.
Linda Jets AI is a multi-agent system that plugs into your existing operations stack (Avinode, Slack, Salesforce) and handles the repetitive, time-sensitive work that eats your team's day:
An incoming Request for Quote hits Avinode. Within seconds, the AI:
- Receives the RFQ via Avinode webhook (real-time, no polling)
- Reads the trip details (route, dates, passengers, buyer)
- Searches available aircraft matching the request
- Ranks options by price, positioning cost, operator safety rating, and client preferences
- Prepares a structured quote brief with top 3 options
- Posts to your team's Slack channel for one-click approval
- On approval → submits the quote directly to Avinode with full pricing breakdown
- If declined → declines the request via Avinode API with optional reason
Result: RFQs that took 15-30 minutes of manual searching get processed in under a minute.
- Reads and sends messages through Avinode's trip messaging API — no email switching
- Drafts responses to buyer questions (availability, pricing, aircraft specs)
- Handles quote revisions and counter-offers
- Alerts the team in Slack when a buyer responds
- All messages logged and searchable
- On agreement → triggers booking via Avinode Book endpoint
- Generates contract PDFs via Schedaero PDF generation
- Sends contracts through Avinode messaging or email
- Tracks signature status and follows up if unsigned
After the trip is booked, the agent handles scheduling via Avinode/Schedaero:
- Creates the scheduled flight in the system
- Fills in crew assignments, passenger manifests, and logistics
- Coordinates catering, ground transport, and special requests
- Tracks flight status through departure and arrival
Once the trip is complete and all details are finalized:
- Extracts complete trip data via Schedaero Extract Data API
- Pushes structured data directly to Salesforce via REST API
- Maps to the correct CRM fields: client record, trip history, revenue, route, aircraft, crew, passenger count, special requests
- No manual data entry — the CRM is always up to date
- Tracks every quote and inquiry across Avinode + Salesforce
- Automatically drafts follow-up messages at optimal intervals (24h, 72h after quote)
- Post-flight thank-you messages
- Re-engagement outreach after 30 days of inactivity
- VIP date tracking (birthdays, anniversaries) for proactive outreach
- No leads fall through the cracks
- Continuously monitors Avinode for empty leg opportunities
- Cross-references against client preferences stored in Salesforce
- Flags deals worth reaching out about
- Drafts personalized outreach for matching clients
Linda Jets' existing tech stack — the AI integrates with all of it:
| System | Role | How AI Connects |
|---|---|---|
| Avinode | RFQs, quotes, aircraft search, messaging, booking | Direct API (OAuth 2.0) + Webhooks |
| Salesforce | CRM — all customer data, pipeline, trip history | Direct REST API (OAuth 2.0) |
| Slack | Team communication and AI interaction | Slack Bot API |
| Centro | Currently connects Slack ↔ Salesforce | Phase 1: coexists. Phase 2: replaceable |
| Schedaero | Trip scheduling, crew, logistics, PDF generation | API (bundled with Avinode) |
Phase 1 — Fast Deploy (Week 1-2):
- Agent lives in Slack as a bot
- Connects to Avinode API directly (RFQs, quotes, messaging, booking)
- Centro continues syncing Slack ↔ Salesforce as-is
- No Salesforce admin needed, no Centro changes
Phase 2 — Direct CRM (Week 3-4):
- Agent connects to Salesforce REST API directly
- Post-trip data goes straight to CRM (structured, not through Slack/Centro)
- Salesforce admin (Miami) creates Connected App (~30 min call)
- Centro becomes optional — agent handles the Salesforce sync natively
Phase 3 — Full Autonomy:
- Centro can be removed entirely (cost savings)
- Agent handles all data flow: Avinode ↔ Agent ↔ Salesforce
- Slack remains as the team interface only
┌─────────────────────────────────┐
│ AVINODE │
│ RFQs · Quotes · Messages · Book │
└───────────────┬──────────────────┘
│ API + Webhooks
▼
┌──────────┐ ┌─────────────────┐ ┌──────────────┐
│ │◄────────────►│ Linda AI ✈️ │─────────────►│ SALESFORCE │
│ SLACK │ Bot API │ Orchestrator │ REST API │ CRM │
│ (Team) │ └────────┬────────┘ (Direct) │ (Miami Admin)│
└──────────┘ │ └──────────────┘
│ │
│ Centro (Phase 1) ┌──────┴──────┐
└────────────────►SF │ SCHEDAERO │
(replaced Phase 2) │ Trips/Crew │
└─────────────┘
| Agent | What It Does | AI Model |
|---|---|---|
| Linda (Main) | Orchestrates everything, team interface, decision support | Claude Opus |
| Avinode | RFQ processing, quote submission, messaging, booking, empty legs | Claude Sonnet |
| Customer Support | Client inquiries, FAQs, booking flow guidance | Claude Sonnet |
| Concierge | Catering, ground transport, itineraries, special requests | Claude Sonnet |
| Sales/CRM | Salesforce sync, client profiles, follow-ups, pipeline | Claude Sonnet |
| Ops | Trip scheduling, crew/logistics via Schedaero, flight tracking | Qwen (cost-optimized) |
| Channel | Agent | What Happens There |
|---|---|---|
| #general | Linda | System commands, briefings, cross-domain coordination |
| #quotes-rfqs | Avinode | Incoming RFQs, quote briefs, approval requests |
| #client-support | Customer Support | Drafted client messages for review |
| #concierge | Concierge | Catering, transport, special requests |
| #sales-pipeline | Sales/CRM | Lead updates, follow-up reminders, pipeline reports |
| #operations | Ops | Flight status, schedule changes, crew assignments |
Full integration with the Avinode Developer API:
| Endpoint | Capability | Read/Write |
|---|---|---|
| Search Trips | Find incoming RFQs | Read |
| Read RFQs | Get full trip details, route, buyer | Read |
| Submit Quote | Send pricing with breakdown | Write |
| Decline Request | Pass on an RFQ with reason | Write |
| Book Request | Confirm a trip | Write |
| Cancel Trip | Cancel if needed | Write |
| Endpoint | Capability | Read/Write |
|---|---|---|
| Trip Messaging/Chat | Read and send messages within a trip thread | Both |
| Endpoint | Capability | Read/Write |
|---|---|---|
| Search Aircraft | By tail number, type, availability | Read |
| Aircraft Types | Specs, performance, amenities, photos | Read |
| Calculate Flight Times | Route-based time calculations | Read |
| Schedule Management | Read and update aircraft schedules | Both |
| Scheduled Trips | View scheduled flights | Read |
| Endpoint | Capability | Read/Write |
|---|---|---|
| Create Empty Legs | Publish available repositioning flights | Write |
| Search Empty Legs | Find opportunities across marketplace | Read |
| Watch Configurations | Set up monitoring alerts | Write |
| Endpoint | Capability | Read/Write |
|---|---|---|
| Webhooks | Real-time notifications for RFQs, status changes | Both |
| Client Leads | Create and read end-client lead data | Both |
| Export Buyer Data | Pull buyer information | Read |
| PDF Generation | Generate trip/quote documents (Schedaero) | Read |
| Extract Data | Pull complete trip data for external systems | Read |
- Auth: OAuth 2.0 (token management with auto-refresh)
- Webhooks: Real-time push notifications — no polling needed
- Sandbox: Full sandbox environment for development/testing
- Rate: ~1 req/sec steady, 2,000–5,000 calls/month estimated
Connects to their existing Salesforce CRM via REST API:
- Reads: Customer records, preferences, flight history, pipeline status
- Writes: Trip data, quote outcomes, new leads, activity logs, follow-up tasks
- Maps to their existing fields — their dashboards and reports update automatically
- OAuth 2.0 Connected App — scoped to minimum required permissions
- Field-level security — admin controls exactly which fields the agent can access
- IP whitelisting — lock API access to the agent's VPS IP
- Full audit trail — every API call logged in Salesforce
- Instant revocation — one click to cut access
- Salesforce edition with API access (Enterprise/Unlimited — if Slack is connected, API is already enabled)
- 30-minute call with their Miami admin to create Connected App and map fields
- Not needed until Phase 2 — Phase 1 works through Slack + Centro
This is how a typical trip lifecycle works end-to-end with the AI:
1. RFQ ARRIVES (Avinode webhook → Agent)
└─ Agent reads trip details, searches aircraft, ranks options
└─ Posts brief to Slack #quotes-rfqs for team review
2. QUOTE (Team approves in Slack → Agent submits via Avinode API)
└─ Full pricing breakdown, aircraft details, availability
└─ If declined → Agent declines via API
3. NEGOTIATE (Buyer messages in Avinode → Agent reads via messaging API)
└─ Agent drafts response → posts to Slack for approval
└─ Approved response sent back through Avinode messaging
4. BOOK (Agreement reached → Agent books via Avinode API)
└─ Contract PDF generated via Schedaero
└─ Sent to buyer through Avinode messaging
5. SCHEDULE (Agent creates scheduled trip)
└─ Crew assignments, passenger manifest, logistics filled in
└─ Concierge agent handles catering, ground transport
└─ All details visible in Slack #operations
6. FLY (Trip executes)
└─ Flight tracking, real-time status updates in Slack
7. POST-TRIP (Trip complete → Agent extracts full data)
└─ All trip details pushed directly to Salesforce
└─ Client record updated: route, aircraft, revenue, preferences
└─ Follow-up thank-you drafted
└─ CRM dashboards update automatically
| Component | Status |
|---|---|
| Agent workspace (identity, rules, company context) | ✅ Ready |
| Avinode API client (TypeScript) | ✅ Ready (awaiting API credentials) |
| RFQ processing workflow | ✅ Ready |
| Aircraft search + ranking | ✅ Ready |
| Quote submission workflow | ✅ Ready |
| Quote decline workflow | ✅ Ready |
| Avinode messaging integration | ✅ Ready |
| Trip booking workflow | ✅ Ready |
| Empty leg monitoring | ✅ Ready |
| Customer support FAQ knowledge base | ✅ Ready |
| Booking flow assistant | ✅ Ready |
| Concierge skills (catering, transport, itinerary) | ✅ Ready |
| CRM client profiles + follow-up automation | ✅ Ready |
| Slack bot integration | ✅ Ready |
| VPS bootstrap script (one-command deploy) | ✅ Ready |
| Trip scheduling (Schedaero) | 🔧 Phase 2 |
| Crew & logistics automation | 🔧 Phase 2 |
| Direct Salesforce API integration | 🔧 Phase 2 |
| Contract PDF generation | 🔧 Phase 2 |
| Post-trip data → Salesforce sync | 🔧 Phase 2 |
| Centro replacement (direct CRM sync) | 🔧 Phase 3 |
| WhatsApp Business API integration | 📋 Planned |
| Flight tracking (FlightAware) | 📋 Planned |
One-command setup on a fresh VPS:
git clone git@github.com:MarkoKCOM/LindaJets.git /root/LindaJets
bash /root/LindaJets/deploy/bootstrap.shThen:
- Add credentials to
/root/.openclaw/.env(Avinode API, Slack bot token) - Configure Slack workspace and channel IDs
- Start the service
- Phase 2: Add Salesforce Connected App credentials
- All credentials stored in environment variables only — never in code or git
- Client data (PII, travel patterns) kept in local memory, not committed to git
- All client-facing messages require human approval before sending
- Avinode API access scoped to minimum required permissions
- Salesforce access scoped via OAuth + field-level security + IP whitelist
- Workspace auto-committed to git for auditability (excluding sensitive data)
- Salesforce is SOC 2 Type II, ISO 27001, GDPR, FedRAMP certified
LindaJets/
├── README.md # This file
├── workspace/
│ ├── SOUL.md # AI identity and operating principles
│ ├── IDENTITY.md # Name, persona, tone
│ ├── USER.md # Who the AI serves
│ ├── COMPANY.md # Linda Jets business context
│ ├── TEAM.md # Staff directory
│ ├── AGENTS.md # Agent behavioral contract
│ ├── SUBAGENTS.md # Sub-agent roster and delegation rules
│ ├── SKILLS.md # Complete skill index
│ ├── HEARTBEAT.md # Periodic automated tasks
│ ├── MEMORY.md # Long-term AI memory
│ └── skills/
│ ├── avinode/ # Avinode API integration
│ │ ├── README.md # API documentation and endpoints
│ │ ├── avinode-client.ts # TypeScript API client
│ │ ├── process-rfq.md # RFQ processing workflow
│ │ ├── search-aircraft.md # Aircraft search and ranking
│ │ ├── submit-quote.md # Quote submission workflow
│ │ ├── decline-rfq.md # RFQ decline workflow
│ │ ├── messaging.md # Avinode messaging integration
│ │ ├── booking.md # Trip booking workflow
│ │ └── empty-legs.md # Empty leg monitoring
│ ├── customer-support/ # Client communication
│ │ ├── faq-handler.md # FAQ knowledge base
│ │ └── booking-flow.md # Booking assistant workflow
│ ├── concierge/ # Experience management
│ │ ├── catering.md # In-flight catering tiers
│ │ └── ground-transport.md # Ground transport coordination
│ ├── crm/ # Sales and CRM management
│ │ ├── salesforce-sync.md # Salesforce API integration
│ │ ├── client-profile.md # Client preference tracking
│ │ └── follow-up.md # Automated follow-up system
│ └── ops/ # Flight operations
│ ├── scheduling.md # Trip scheduling via Schedaero
│ └── crew-logistics.md # Crew and logistics management
├── config/
│ ├── openclaw.json.template # Agent configuration template
│ └── .env.example # Required environment variables
└── deploy/
└── bootstrap.sh # One-command VPS deployment