All skills
jamesrochabrun avatar

/reading-teacher

@c877664

Interactive reading teacher that instantly generates playful, engaging learning experiences for children ages 1-10. Creates visual playgrounds, phonics games, and interactive stories to build reading skills from letter recognition to comprehension.

Use this Skill: https://skilld.dev/gh/jamesrochabrun/skills/reading-teacher

This session only. Nothing lands on disk.

referencessight_words.md

≈3.5k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Sight Words Reference

Comprehensive sight word lists organized by level (Dolch and Fry lists).

What Are Sight Words?

Sight words are high-frequency words that appear often in text. Many don't follow regular phonics patterns, so children learn to recognize them instantly "by sight."

Why They Matter:

  • 50-75% of all text consists of these words
  • Essential for reading fluency
  • Enable focus on content, not decoding
  • Build reading confidence

Dolch Sight Words

Pre-Kindergarten (40 words)

const dolchPreK = [
  'a', 'and', 'away', 'big', 'blue', 'can', 'come', 'down',
  'find', 'for', 'funny', 'go', 'help', 'here', 'I', 'in',
  'is', 'it', 'jump', 'little', 'look', 'make', 'me', 'my',
  'not', 'one', 'play', 'red', 'run', 'said', 'see', 'the',
  'three', 'to', 'two', 'up', 'we', 'where', 'yellow', 'you'
];

const preKByCategory = {
  colors: ['blue', 'red', 'yellow'],
  numbers: ['one', 'two', 'three'],
  actions: ['come', 'down', 'find', 'go', 'help', 'jump', 'look', 'make', 'play', 'run', 'see'],
  descriptive: ['big', 'funny', 'little'],
  pronouns: ['I', 'it', 'me', 'my', 'we', 'you'],
  prepositions: ['in', 'to', 'up'],
  other: ['a', 'and', 'away', 'can', 'for', 'here', 'is', 'not', 'said', 'the', 'where']
};

Kindergarten (52 words)

const dolchKindergarten = [
  'all', 'am', 'are', 'at', 'ate', 'be', 'black', 'brown',
  'but', 'came', 'did', 'do', 'eat', 'four', 'get', 'good',
  'have', 'he', 'into', 'like', 'must', 'new', 'no', 'now',
  'on', 'our', 'out', 'please', 'pretty', 'ran', 'ride', 'saw',
  'say', 'she', 'so', 'soon', 'that', 'there', 'they', 'this',
  'too', 'under', 'want', 'was', 'well', 'went', 'what', 'white',
  'who', 'will', 'with', 'yes'
];

First Grade (41 words)

const dolchFirstGrade = [
  'after', 'again', 'an', 'any', 'as', 'ask', 'by', 'could',
  'every', 'fly', 'from', 'give', 'giving', 'had', 'has', 'her',
  'him', 'his', 'how', 'just', 'know', 'let', 'live', 'may',
  'of', 'old', 'once', 'open', 'over', 'put', 'round', 'some',
  'stop', 'take', 'thank', 'them', 'then', 'think', 'walk', 'were',
  'when'
];

Second Grade (46 words)

const dolchSecondGrade = [
  'always', 'around', 'because', 'been', 'before', 'best', 'both',
  'buy', 'call', 'cold', 'does', 'don\'t', 'fast', 'first', 'five',
  'found', 'gave', 'goes', 'green', 'its', 'made', 'many', 'off',
  'or', 'pull', 'read', 'right', 'sing', 'sit', 'sleep', 'tell',
  'their', 'these', 'those', 'upon', 'us', 'use', 'very', 'wash',
  'which', 'why', 'wish', 'work', 'would', 'write', 'your'
];

Third Grade (41 words)

const dolchThirdGrade = [
  'about', 'better', 'bring', 'carry', 'clean', 'cut', 'done',
  'draw', 'drink', 'eight', 'fall', 'far', 'full', 'got', 'grow',
  'hold', 'hot', 'hurt', 'if', 'keep', 'kind', 'laugh', 'light',
  'long', 'much', 'myself', 'never', 'only', 'own', 'pick', 'seven',
  'shall', 'show', 'six', 'small', 'start', 'ten', 'today', 'together',
  'try', 'warm'
];

Dolch Nouns (95 words)

const dolchNouns = [
  'apple', 'baby', 'back', 'ball', 'bear', 'bed', 'bell', 'bird',
  'birthday', 'boat', 'box', 'boy', 'bread', 'brother', 'cake', 'car',
  'cat', 'chair', 'chicken', 'children', 'Christmas', 'coat', 'corn',
  'cow', 'day', 'dog', 'doll', 'door', 'duck', 'egg', 'eye', 'farm',
  'farmer', 'father', 'feet', 'fire', 'fish', 'floor', 'flower', 'game',
  'garden', 'girl', 'goodbye', 'grass', 'ground', 'hand', 'head', 'hill',
  'home', 'horse', 'house', 'kitty', 'leg', 'letter', 'man', 'men',
  'milk', 'money', 'morning', 'mother', 'name', 'nest', 'night', 'paper',
  'party', 'picture', 'pig', 'rabbit', 'rain', 'ring', 'robin', 'santa',
  'school', 'seed', 'sheep', 'shoe', 'sister', 'snow', 'song', 'squirrel',
  'stick', 'street', 'sun', 'table', 'thing', 'time', 'top', 'toy',
  'tree', 'watch', 'water', 'way', 'wind', 'window', 'wood'
];

Fry Sight Words

First 100 (Most Common)

const fryFirst100 = {
  '1-25': [
    'the', 'of', 'and', 'a', 'to', 'in', 'is', 'you', 'that', 'it',
    'he', 'was', 'for', 'on', 'are', 'as', 'with', 'his', 'they', 'I',
    'at', 'be', 'this', 'have', 'from'
  ],

  '26-50': [
    'or', 'one', 'had', 'by', 'words', 'but', 'not', 'what', 'all', 'were',
    'we', 'when', 'your', 'can', 'said', 'there', 'use', 'an', 'each', 'which',
    'she', 'do', 'how', 'their', 'if'
  ],

  '51-75': [
    'will', 'up', 'other', 'about', 'out', 'many', 'then', 'them', 'these', 'so',
    'some', 'her', 'would', 'make', 'like', 'him', 'into', 'time', 'has', 'look',
    'two', 'more', 'write', 'go', 'see'
  ],

  '76-100': [
    'number', 'no', 'way', 'could', 'people', 'my', 'than', 'first', 'water', 'been',
    'called', 'who', 'am', 'its', 'now', 'find', 'long', 'down', 'day', 'did',
    'get', 'come', 'made', 'may', 'part'
  ]
};

Second 100

const frySecond100 = {
  '101-125': [
    'over', 'new', 'sound', 'take', 'only', 'little', 'work', 'know', 'place', 'years',
    'live', 'me', 'back', 'give', 'most', 'very', 'after', 'things', 'our', 'just',
    'name', 'good', 'sentence', 'man', 'think'
  ],

  '126-150': [
    'say', 'great', 'where', 'help', 'through', 'much', 'before', 'line', 'right', 'too',
    'means', 'old', 'any', 'same', 'tell', 'boy', 'follow', 'came', 'want', 'show',
    'also', 'around', 'form', 'three', 'small'
  ],

  '151-175': [
    'set', 'put', 'end', 'does', 'another', 'well', 'large', 'must', 'big', 'even',
    'such', 'because', 'turn', 'here', 'why', 'asked', 'went', 'men', 'read', 'need',
    'land', 'different', 'home', 'us', 'move'
  ],

  '176-200': [
    'try', 'kind', 'hand', 'picture', 'again', 'change', 'off', 'play', 'spell', 'air',
    'away', 'animal', 'house', 'point', 'page', 'letter', 'mother', 'answer', 'found', 'study',
    'still', 'learn', 'should', 'America', 'world'
  ]
};

Interactive Practice Activities

Sight Word Flash Cards

function createFlashCards(wordList, timePerCard = 3000) {
  let currentIndex = 0;
  let correct = 0;
  let total = 0;

  return {
    words: shuffle(wordList),
    currentWord: wordList[0],

    next: function() {
      currentIndex = (currentIndex + 1) % this.words.length;
      this.currentWord = this.words[currentIndex];
      return this.currentWord;
    },

    checkAnswer: function(userAnswer) {
      total++;
      const isCorrect = userAnswer.toLowerCase() === this.currentWord.toLowerCase();
      if (isCorrect) correct++;

      return {
        correct: isCorrect,
        word: this.currentWord,
        score: `${correct}/${total}`,
        percentage: Math.round((correct / total) * 100)
      };
    },

    getStats: function() {
      return {
        totalSeen: total,
        totalCorrect: correct,
        accuracy: total > 0 ? Math.round((correct / total) * 100) : 0
      };
    }
  };
}

Word Search Game

function createWordSearch(words, size = 10) {
  const grid = Array(size).fill().map(() => Array(size).fill(''));
  const placed = [];

  // Place words in grid
  words.forEach(word => {
    const direction = Math.random() < 0.5 ? 'horizontal' : 'vertical';
    const position = placeWord(grid, word, direction);
    if (position) {
      placed.push({ word, ...position });
    }
  });

  // Fill empty spaces with random letters
  for (let i = 0; i < size; i++) {
    for (let j = 0; j < size; j++) {
      if (!grid[i][j]) {
        grid[i][j] = String.fromCharCode(97 + Math.floor(Math.random() * 26));
      }
    }
  }

  return {
    grid: grid,
    words: words,
    found: [],

    checkWord: function(selectedCells) {
      const word = selectedCells.map(cell => grid[cell.row][cell.col]).join('');
      if (words.includes(word) && !this.found.includes(word)) {
        this.found.push(word);
        return { found: true, word: word };
      }
      return { found: false };
    },

    isComplete: function() {
      return this.found.length === words.length;
    }
  };
}

Sentence Building

function createSentenceBuilder(sightWords) {
  const sentenceTemplates = [
    ['I', 'can', 'see', 'the', '{noun}'],
    ['The', '{noun}', 'is', '{color}'],
    ['We', 'like', 'to', '{action}'],
    ['{name}', 'said', '{quote}'],
    ['Look', 'at', 'the', '{adjective}', '{noun}']
  ];

  const fillWords = {
    noun: ['cat', 'dog', 'ball', 'sun', 'tree'],
    color: ['red', 'blue', 'green', 'yellow'],
    action: ['play', 'run', 'jump', 'read'],
    name: ['Tom', 'Sue', 'Mom', 'Dad'],
    quote: ['"hello"', '"stop"', '"help"'],
    adjective: ['big', 'little', 'funny', 'pretty']
  };

  return {
    generate: function() {
      const template = sentenceTemplates[Math.floor(Math.random() * sentenceTemplates.length)];
      const sentence = template.map(word => {
        if (word.startsWith('{')) {
          const type = word.slice(1, -1);
          return fillWords[type][Math.floor(Math.random() * fillWords[type].length)];
        }
        return word;
      });

      return {
        sentence: sentence.join(' '),
        words: sentence,
        sightWords: sentence.filter(w => sightWords.includes(w.toLowerCase()))
      };
    },

    scramble: function() {
      const { sentence, words } = this.generate();
      return {
        correctOrder: words,
        scrambled: shuffle([...words]),
        answer: sentence
      };
    }
  };
}

Memory Match Game

function createMemoryMatch(words) {
  // Create pairs: word and image/definition
  const pairs = words.map(word => [
    { type: 'word', content: word, id: `${word}-word` },
    { type: 'image', content: getWordImage(word), id: `${word}-image` }
  ]).flat();

  return {
    cards: shuffle(pairs),
    flipped: [],
    matched: [],

    flip: function(cardId) {
      if (this.flipped.length < 2 && !this.flipped.includes(cardId)) {
        this.flipped.push(cardId);

        if (this.flipped.length === 2) {
          return this.checkMatch();
        }
      }
      return { matched: false };
    },

    checkMatch: function() {
      const [id1, id2] = this.flipped;
      const card1 = this.cards.find(c => c.id === id1);
      const card2 = this.cards.find(c => c.id === id2);

      const word1 = id1.split('-')[0];
      const word2 = id2.split('-')[0];

      if (word1 === word2) {
        this.matched.push(id1, id2);
        this.flipped = [];
        return { matched: true, word: word1 };
      }

      // Reset after delay
      setTimeout(() => { this.flipped = []; }, 1000);
      return { matched: false };
    },

    isComplete: function() {
      return this.matched.length === this.cards.length;
    }
  };
}

Typing Practice

function createTypingPractice(words) {
  let currentWordIndex = 0;
  let startTime = null;
  let stats = {
    correct: 0,
    total: 0,
    wpm: 0
  };

  return {
    currentWord: words[0],

    start: function() {
      startTime = Date.now();
    },

    check: function(typed) {
      stats.total++;
      const correct = typed === this.currentWord;

      if (correct) {
        stats.correct++;
        currentWordIndex = (currentWordIndex + 1) % words.length;
        this.currentWord = words[currentWordIndex];
      }

      // Calculate WPM
      const elapsed = (Date.now() - startTime) / 1000 / 60; // minutes
      stats.wpm = Math.round(stats.correct / elapsed);

      return {
        correct: correct,
        accuracy: Math.round((stats.correct / stats.total) * 100),
        wpm: stats.wpm
      };
    },

    getStats: function() {
      return stats;
    }
  };
}

Word List Management

Adaptive Practice

class AdaptiveSightWords {
  constructor(allWords) {
    this.allWords = allWords;
    this.mastered = new Set();
    this.practicing = new Set();
    this.new = new Set(allWords);
  }

  getNextWord() {
    // 70% practicing, 20% new, 10% review mastered
    const rand = Math.random();

    if (rand < 0.7 && this.practicing.size > 0) {
      return this.selectFrom(this.practicing);
    } else if (rand < 0.9 && this.new.size > 0) {
      const word = this.selectFrom(this.new);
      this.new.delete(word);
      this.practicing.add(word);
      return word;
    } else if (this.mastered.size > 0) {
      return this.selectFrom(this.mastered);
    }

    return this.selectFrom(this.allWords);
  }

  recordResult(word, correct) {
    if (correct) {
      // Move to mastered after 3 correct in a row
      if (!this.mastered.has(word)) {
        this.practicing.delete(word);
        this.mastered.add(word);
      }
    } else {
      // Move back to practicing
      this.mastered.delete(word);
      this.practicing.add(word);
    }
  }

  selectFrom(set) {
    const arr = Array.from(set);
    return arr[Math.floor(Math.random() * arr.length)];
  }

  getProgress() {
    return {
      total: this.allWords.length,
      mastered: this.mastered.size,
      practicing: this.practicing.size,
      new: this.new.size,
      percentage: Math.round((this.mastered.size / this.allWords.length) * 100)
    };
  }
}

Visual Design Guidelines

Display Requirements

const displaySettings = {
  fontSize: {
    preK: '48px',
    kindergarten: '36px',
    grade1: '32px',
    grade2: '28px',
    grade3: '24px'
  },

  colors: {
    new: '#FF6B9D',        // Pink - new words
    practicing: '#FFE66D',  // Yellow - practicing
    mastered: '#4ECDC4'     // Teal - mastered
  },

  timing: {
    flashDuration: 3000,    // 3 seconds per word
    typingTimeout: 5000,    // 5 seconds to type
    memoryFlipDelay: 1000   // 1 second before flip back
  }
};

Summary

Sight word lists provide:

  • Comprehensive Dolch and Fry word lists
  • Grade-level organization
  • Multiple practice modalities
  • Adaptive learning systems
  • Progress tracking
  • Game-based activities

Use these lists to create effective sight word practice!

Source: SKILL.md on GitHub

1 warning16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The skill facilitates interactive reading education by generating learning games and playgrounds. Security analysis identified a minor risk in the provided utility scripts, which generate files locally without sanitizing user-provided filenames, creating a potential path traversal vulnerability.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer7mo

    6/6 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at c877664. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Dormantupdated 11 months ago

README badge

README badge for jamesrochabrun/skills/reading-teacher