Skill: siatrial/gardening-calendar (version 1.0.1)

--- name: gardening-calendar description: Precise horticultural advice for UK and international gardening. Use when a user asks for: (1) What to plant or harvest this month, (2) Sowing/harvesting windows for specific plants, (3) UK-specific (Celsius/Allotment) advice, or (4) International gardening context (Thailand, US, Australia). --- # Gardening Calendar Skill 🎷 This skill provides precise gardening advice for UK and international growing seasons. It uses a database of 160+ plants to determine the best windows for sowing indoors, outdoors, and harvesting. ## Core Capabilities 1. **"Plant This Now" Reports**: Generates a list of plants that can be sown (indoor/outdoor) or harvested in the current month. 2. **Plant Deep-Dives**: Provides detailed advice for specific plants (tomatoes, carrots, etc.), including soil requirements, spacing, and maintenance tips. 3. **Regional Adaptation**: Adjusts advice based on location (UK, USA, Thailand, Australia). 4. **Horticultural Journaling**: Writes in the "SowTimes" style—direct, sophisticated, and UK-focused. ## Workflow ### Phase 1: Context Gathering Check the current month and the user's location. Default to **UK/March** if not specified. ### Phase 2: Logic Application Use `scripts/calendar-logic.ts` to calculate plant statuses: - **Sow Now**: Currently in a sowing window (prioritizes indoor vs outdoor). - **Harvest Now**: Currently in a harvest window. - **Plan Ahead**: Window is coming up in 1-2 months. ### Phase 3: Reporting Structure the response with: - ### 🚜 Sow Now (Indoors) - ### 🌱 Sow Now (Outdoors) - ### 🧺 Harvest Now - ### 🧠 Pro Tips ## Style Guidelines - **Sophisticated but Conversational**: Speak like a professional UK allotmenteer. - **Precision**: Use Celsius and UK metrics. - **Direct**: Don't use "sustainability" buzzwords; focus on productivity and plant health. - **Tone**: Helpful with a touch of sarcasm (Andre's signature). 🎷 ## Resources - `scripts/calendar-logic.ts`: The core logic for calculating windows. - `references/plant-database.md`: Full list of plant IDs and their seasonal data. (Coming Soon)

path: references/plant-data.ts
content: // Bundled plant data for the Gardening Calendar skill
export const PLANTS = [
  {
    id: 'tomato',
    name: 'Tomato',
    slug: 'tomato',
    category: 'vegetable',
    sowIndoor: [{ start: { month: 2, day: 1 }, end: { month: 4, day: 30 } }],
    sowOutdoor: [{ start: { month: 5, day: 15 }, end: { month: 6, day: 30 } }],
    harvest: [{ start: { month: 7, day: 1 }, end: { month: 10, day: 31 } }],
    description: 'Popular summer crop. Start indoors in late winter, transplant after last frost.',
    tips: ['Water consistently', 'Pinch out side shoots', 'Support plants with stakes']
  },
  {
    id: 'carrot',
    name: 'Carrot',
    slug: 'carrot',
    category: 'vegetable',
    sowOutdoor: [{ start: { month: 3, day: 1 }, end: { month: 7, day: 31 } }],
    harvest: [{ start: { month: 6, day: 1 }, end: { month: 11, day: 30 } }],
    description: 'Direct sow outdoors. Succession plant every 3 weeks.',
    tips: ['Thin seedlings', 'Keep soil moist', 'Use stone-free soil']
  },
  {
    id: 'lettuce',
    name: 'Lettuce',
    slug: 'lettuce',
    category: 'vegetable',
    sowIndoor: [{ start: { month: 2, day: 1 }, end: { month: 4, day: 30 } }],
    sowOutdoor: [{ start: { month: 3, day: 15 }, end: { month: 9, day: 15 } }],
    harvest: [{ start: { month: 5, day: 1 }, end: { month: 10, day: 31 } }],
    description: 'Fast-growing salad green.',
    tips: ['Harvest outer leaves', 'Provide shade in hot weather', 'Keep soil moist']
  }
];


path: scripts/calendar-logic.ts
content: import { PLANTS as BUNDLED_PLANTS } from '../references/plant-data';

/**
 * Gardening Calendar Logic
 * 
 * Provides methods to:
 * 1. Get current month status for plants (Sow Now, Harvest Now, Plan Ahead)
 * 2. Filter plants by region/country
 * 3. Provide sowing/harvesting windows
 */

export const REGIONS = {
  UK: 'UK',
  TH: 'Thailand',
  US: 'USA',
  AU: 'Australia'
};

export function getPlantStatus(plant, month) {
  const canSowIndoor = plant.sowIndoor?.some(range => 
    isMonthInRange(month, range.start.month, range.end.month)
  );
  const canSowOutdoor = plant.sowOutdoor?.some(range => 
    isMonthInRange(month, range.start.month, range.end.month)
  );
  const canHarvest = plant.harvest?.some(range => 
    isMonthInRange(month, range.start.month, range.end.month)
  );

  let status = 'plan-ahead';
  if (canSowIndoor || canSowOutdoor) status = 'sow-now';
  else if (canHarvest) status = 'harvest-now';

  return {
    status,
    canSowIndoor,
    canSowOutdoor,
    canHarvest
  };
}

function isMonthInRange(month, start, end) {
  if (start <= end) {
    return month >= start && month <= end;
  } else {
    // Range wraps around year end (e.g. Nov to Feb)
    return month >= start || month <= end;
  }
}

export const PLANTS = BUNDLED_PLANTS;


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)