@kidsinai/kids-opencode-plugin 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,38 @@
1
+ # Course Packs
2
+
3
+ > Bundled missions distributed with `kids-opencode`. Loaded by the plugin when `KIDS_COURSE_PACK=<pack-id>` is set in the environment (typically via `kids-opencode --course <pack-id>`).
4
+
5
+ ## V0 pack
6
+
7
+ | ID | Title | Age | Missions | Stars budget | Status |
8
+ |---|---|---|---|---|---|
9
+ | `portfolio-site` | My personal portfolio website | 12+ | 3 | ~40โญ | ๐ŸŸก content drafted, not workshop-tested |
10
+
11
+ ## Structure
12
+
13
+ Each pack lives in `<pack-id>/` and has:
14
+
15
+ ```
16
+ <pack-id>/
17
+ โ”œโ”€โ”€ pack.yml # Metadata: title, age band, missions, system_prompt overlay
18
+ โ”œโ”€โ”€ mission-1/
19
+ โ”‚ โ”œโ”€โ”€ brief.md # What the kid reads
20
+ โ”‚ โ””โ”€โ”€ acceptance.yml # Auto-check rules for completion
21
+ โ”œโ”€โ”€ mission-2/
22
+ โ”‚ โ”œโ”€โ”€ brief.md
23
+ โ”‚ โ””โ”€โ”€ acceptance.yml
24
+ โ””โ”€โ”€ mission-3/
25
+ โ”œโ”€โ”€ brief.md
26
+ โ””โ”€โ”€ acceptance.yml
27
+ ```
28
+
29
+ Content authoring: see [`docs/course-pack-authoring.md`](../docs/course-pack-authoring.md) (TODO).
30
+
31
+ ## V1+ candidate packs
32
+
33
+ - `arduino-on-mbot` โ€” Robotics Bridge first pack (V1+ depends on hardware tooling)
34
+ - `simple-game` โ€” A small JavaScript game (Snake, Pong, or kid-designed)
35
+ - `data-story` โ€” Pyodide-powered first data-vis story (V1+ depends on Pyodide integration)
36
+ - `class-website` โ€” Group project, multi-kid, shared schools setting
37
+
38
+ Curriculum team owns the priority order.
@@ -0,0 +1,57 @@
1
+ # Acceptance criteria for Mission 1.
2
+ # Evaluated by kids-opencode-plugin after session end, against the kid's project folder.
3
+
4
+ mission_id: mission-1
5
+ title: "Project setup + first HTML page"
6
+
7
+ # Each check is an independent boolean. All must pass for the Mission to be marked complete.
8
+ checks:
9
+ - id: index_html_exists
10
+ description: "An index.html file exists in the project folder"
11
+ type: file_exists
12
+ path: "index.html"
13
+
14
+ - id: index_html_has_html_tag
15
+ description: "index.html is a real HTML document (has the html element)"
16
+ type: file_contains_regex
17
+ path: "index.html"
18
+ pattern: "(?i)<html"
19
+
20
+ - id: index_html_has_body
21
+ description: "index.html has a body section"
22
+ type: file_contains_regex
23
+ path: "index.html"
24
+ pattern: "(?i)<body"
25
+
26
+ - id: index_html_has_heading
27
+ description: "index.html has at least one heading (the kid's name)"
28
+ type: file_contains_regex
29
+ path: "index.html"
30
+ pattern: "(?i)<h[1-6][^>]*>"
31
+
32
+ - id: index_html_has_substance
33
+ description: "index.html has at least 50 characters of actual content in its body"
34
+ # Heuristic: html minus tags should have >= 50 non-whitespace characters
35
+ type: file_text_length_min
36
+ path: "index.html"
37
+ min_chars: 100 # rough proxy; tag-stripped check is done in plugin
38
+
39
+ - id: file_in_project_only
40
+ description: "All files written in this session are inside the project folder (no path traversal)"
41
+ type: audit_log_check
42
+ audit_rule: "all_writes_within_cwd"
43
+
44
+ # What the kid sees on completion
45
+ completion_message: |
46
+ Mission 1 complete! ๐ŸŽ‰
47
+
48
+ You made a real web page from scratch. Your name is now on a thing you can show people.
49
+
50
+ Ready for Mission 2 โ€” making it look like *you*?
51
+
52
+ # What gets logged for the parent dashboard
53
+ parent_summary_fields:
54
+ - "Mission 1 completed at [timestamp]"
55
+ - "Total Stars used: [stars]"
56
+ - "Number of file edits: [count]"
57
+ - "Total session time: [duration]"
@@ -0,0 +1,83 @@
1
+ # Mission 1 โ€” Project setup + first HTML page
2
+
3
+ > **Estimated time**: 30 minutes ยท **Estimated Stars**: 10 ยท **Goal**: see your name on a real web page in your browser within 5 minutes.
4
+
5
+ ---
6
+
7
+ ## What you're going to build
8
+
9
+ A single file called `index.html` that has your name in big text, and a few sentences about you. Open it in your browser. Refresh the page when you change something. Show it to a parent or a friend at the end.
10
+
11
+ That's it for Mission 1. We'll make it pretty in Mission 2 and add interactivity in Mission 3.
12
+
13
+ ---
14
+
15
+ ## How this works (read once)
16
+
17
+ You're going to ask the AI mentor to help you. The AI won't just write the code for you โ€” it'll ask what you want, then propose what to write, then ask **you** to approve before it writes anything.
18
+
19
+ You'll see prompts like:
20
+
21
+ > "I'm about to create a file called `index.html` with your name as the heading. OK to write?"
22
+
23
+ Type **y** to approve, **n** to say no.
24
+
25
+ If you don't know what something means, ask. The AI's job is to teach you, not just to crank out code.
26
+
27
+ ---
28
+
29
+ ## Steps (you'll go through these with the AI)
30
+
31
+ 1. **Get a project folder ready.** You should already be in one. If you don't know, type `pwd` (Mac/Linux) and see what folder you're in. The AI will help.
32
+
33
+ 2. **Start the agent.** From this folder:
34
+ ```
35
+ kids-opencode --course portfolio-site --mission mission-1
36
+ ```
37
+
38
+ 3. **Talk to the AI about what you want.** When it asks, tell it your name (whatever you want to put on the page โ€” a nickname is fine), and a sentence or two about you. Examples:
39
+ - "I'm Mia, I'm 12, and I love making animations."
40
+ - "My name is Alex. I want to be a game designer when I grow up."
41
+ - "I'm into chess and origami and my dog Maple."
42
+
43
+ 4. **Approve the file create.** The AI will say "I'm going to make `index.html` with [your text]". Approve it.
44
+
45
+ 5. **Open the file in your browser.** On Mac: `open index.html`. On Linux: `xdg-open index.html`. Or just drag the file into a browser window.
46
+
47
+ 6. **Look at it!** Your text should appear in big letters. That's a real web page. You made it.
48
+
49
+ 7. **Show it.** Show a parent, a sibling, or a friend. Then come back and start Mission 2.
50
+
51
+ ---
52
+
53
+ ## When you get stuck
54
+
55
+ - **The AI says it's going to do something I don't understand.** Ask it: "what does that mean?" Its job is to explain. If it doesn't explain well, ask again.
56
+ - **My page is blank in the browser.** Tell the AI. It can read your `index.html` and check what's there.
57
+ - **I made a typo and now nothing works.** Tell the AI. It will help you find the typo. Don't delete the whole file in panic.
58
+ - **The AI is going too fast.** Tell it: "slow down" or "explain that step by step."
59
+ - **I want to quit and come back later.** Press Ctrl+D or type `/quit`. Your file stays where it is. Run `kids-opencode --course portfolio-site --mission mission-1` again to come back.
60
+
61
+ ---
62
+
63
+ ## What you'll learn in this mission
64
+
65
+ - HTML files are just text files with tags like `<h1>` (big heading) and `<p>` (paragraph)
66
+ - A web browser reads an HTML file and shows it
67
+ - Coding is mostly typing the right text in the right place
68
+ - Working with an AI mentor means proposing, approving, and watching the result
69
+
70
+ ---
71
+
72
+ ## What's next
73
+
74
+ Mission 2 โ€” make it look beautiful with CSS. You'll pick your colours, your fonts, your layout.
75
+
76
+ ---
77
+
78
+ ## For parents / teachers
79
+
80
+ This Mission targets:
81
+ - **AU Digital Technologies F-10 curriculum** โ€” knowledge & understanding of digital systems (ACTDIK023), production of digital solutions (ACTDIP030 / ACTDIP031), implementation of programs (ACTDIP031)
82
+ - **Plan/approve UX habituation** โ€” every Mission reinforces the kid's role as approver, not just consumer of AI output
83
+ - **Concrete output for fridge-display** โ€” within 30 minutes, a kid has produced and viewed real artifact on their own device. Fast positive feedback is critical for return engagement.
@@ -0,0 +1,53 @@
1
+ mission_id: mission-2
2
+ title: "Style your page with CSS"
3
+
4
+ checks:
5
+ - id: style_css_exists
6
+ description: "A style.css file exists in the project folder"
7
+ type: file_exists
8
+ path: "style.css"
9
+
10
+ - id: index_links_to_style_css
11
+ description: "index.html includes a link to style.css"
12
+ type: file_contains_regex
13
+ path: "index.html"
14
+ pattern: '<link\s+[^>]*href=["'']style\.css["'']'
15
+
16
+ - id: style_css_has_rules
17
+ description: "style.css has at least 5 CSS rules"
18
+ # Crude heuristic: each rule has a `{`. 5 opening braces โ‰ˆ 5 rules.
19
+ type: file_contains_count_min
20
+ path: "style.css"
21
+ pattern: '\{'
22
+ min_count: 5
23
+
24
+ - id: style_css_uses_colour
25
+ description: "style.css uses at least one colour property"
26
+ type: file_contains_regex
27
+ path: "style.css"
28
+ pattern: '(color|background|background-color)\s*:'
29
+
30
+ - id: style_css_uses_font
31
+ description: "style.css makes some choice about typography"
32
+ type: file_contains_regex
33
+ path: "style.css"
34
+ pattern: '(font-family|font-size|font-weight)\s*:'
35
+
36
+ - id: project_still_intact
37
+ description: "index.html from Mission 1 still has heading + body + content"
38
+ type: file_contains_regex
39
+ path: "index.html"
40
+ pattern: "(?i)<h[1-6]"
41
+
42
+ completion_message: |
43
+ Mission 2 complete! ๐ŸŽจ
44
+
45
+ Your page looks like *you* now. That's design.
46
+
47
+ One more thing โ€” let's make something happen when you click. Ready for Mission 3?
48
+
49
+ parent_summary_fields:
50
+ - "Mission 2 completed at [timestamp]"
51
+ - "Total Stars used (this mission): [stars]"
52
+ - "Number of style changes proposed: [count]"
53
+ - "Total session time: [duration]"
@@ -0,0 +1,77 @@
1
+ # Mission 2 โ€” Style your page with CSS
2
+
3
+ > **Estimated time**: 45 minutes ยท **Estimated Stars**: 15 ยท **Goal**: your page reflects you. Your colours, your fonts, your layout choices.
4
+
5
+ ---
6
+
7
+ ## What you're going to add
8
+
9
+ CSS โ€” Cascading Style Sheets. The rules that decide how things on your page **look**: colours, fonts, sizes, spacing.
10
+
11
+ You'll create a new file called `style.css` and link it from your `index.html`.
12
+
13
+ ---
14
+
15
+ ## Steps
16
+
17
+ 1. **Continue from Mission 1.** Your `index.html` is sitting in your folder. Open it in the browser once to remind yourself what it looks like now.
18
+
19
+ 2. **Start the agent.**
20
+ ```
21
+ kids-opencode --course portfolio-site --mission mission-2
22
+ ```
23
+
24
+ 3. **Tell the agent your vibe.** What do you want your page to **feel** like?
25
+ - Calm? Warm? Cool? Bright? Soft? Bold? Retro? Modern?
26
+ - What colours do you like? (Pick 2-3. The AI can suggest some combinations if you're stuck.)
27
+ - What font feels right? Handwritten? Tech? Serif (like books)? Sans-serif (clean)?
28
+
29
+ 4. **Let the AI propose a style.** It will draft `style.css` and propose changes to `index.html` to link to it. You'll see the changes before they happen.
30
+
31
+ 5. **Approve, look, iterate.** Refresh your browser. Don't like it? Tell the AI what to change. "Make the heading bigger." "I want the background a bit warmer โ€” more peach, less pink." "The font feels too formal."
32
+
33
+ 6. **Spend max 5 minutes on each round.** Don't get stuck. If something feels close-enough, move on. You can always come back.
34
+
35
+ 7. **Show it.** When it feels like *yours*, that's done.
36
+
37
+ ---
38
+
39
+ ## Examples to inspire (you don't have to copy any of these)
40
+
41
+ - A nature lover: olive-green background, cream cards, serif font like Georgia
42
+ - A gamer: dark background, bright accent colours, monospace font
43
+ - A poet: cream background, dark serif, lots of breathing room
44
+ - A maker: white background, primary colours, bold sans-serif headlines
45
+ - A musician: deep purple, neon accents, an italic display font
46
+
47
+ ---
48
+
49
+ ## When you get stuck
50
+
51
+ - **All my colours look bad together.** Ask the AI: "give me 3 colour palettes I can try" and pick one.
52
+ - **The font won't change.** The AI is using web-safe fonts (Arial, Georgia, Helvetica). If you want fancier ones, that's a V1+ feature โ€” we don't fetch fonts from the web in V0.
53
+ - **My text is unreadable on my background.** Tell the AI. "Make the text darker / lighter so it stands out."
54
+ - **I keep undoing my own changes.** That's OK. Ask the AI: "show me a diff of what we did this session" so you can compare.
55
+
56
+ ---
57
+
58
+ ## What you'll learn
59
+
60
+ - CSS rules โ€” selectors and properties
61
+ - The cascade โ€” how CSS layers on top of HTML
62
+ - That "design" is choosing, not magic. You can change anything.
63
+
64
+ ---
65
+
66
+ ## What's next
67
+
68
+ Mission 3 โ€” a button that does something. A little bit of JavaScript.
69
+
70
+ ---
71
+
72
+ ## For parents / teachers
73
+
74
+ This Mission targets:
75
+ - **AU Digital Technologies F-10** โ€” design thinking, iteration, evaluation against the user's intent (the kid is the user)
76
+ - **Self-expression as motivator** โ€” Mission 2 is the kid's chance to assert taste; that ownership is what brings them back for Mission 3
77
+ - **Beware of perfectionism** โ€” kids will spend 30 minutes on colour-picking if you let them. The 5-minute-per-round guidance is intentional.
@@ -0,0 +1,66 @@
1
+ mission_id: mission-3
2
+ title: "Add an interactive button"
3
+
4
+ checks:
5
+ - id: script_js_exists
6
+ description: "A script.js file exists in the project folder"
7
+ type: file_exists
8
+ path: "script.js"
9
+
10
+ - id: index_links_to_script_js
11
+ description: "index.html includes a <script> tag referencing script.js"
12
+ type: file_contains_regex
13
+ path: "index.html"
14
+ pattern: '<script\s+[^>]*src=["'']script\.js["'']'
15
+
16
+ - id: index_has_a_button
17
+ description: "index.html has at least one <button> element"
18
+ type: file_contains_regex
19
+ path: "index.html"
20
+ pattern: '(?i)<button[^>]*>'
21
+
22
+ - id: script_has_event_listener
23
+ description: "script.js wires up an event listener (or onclick) so the button does something"
24
+ # Allow either modern (addEventListener) or simple (onclick) wiring; both are valid
25
+ type: file_contains_any_regex
26
+ path: "script.js"
27
+ patterns:
28
+ - 'addEventListener'
29
+ - 'onclick'
30
+ - 'onClick'
31
+
32
+ - id: portfolio_pages_intact
33
+ description: "Mission 1 + Mission 2 outputs still present"
34
+ type: all_must_exist
35
+ paths:
36
+ - "index.html"
37
+ - "style.css"
38
+ - "script.js"
39
+
40
+ completion_message: |
41
+ Mission 3 complete! ๐Ÿš€
42
+
43
+ You built a real interactive web page from scratch. Content, style, and behaviour.
44
+
45
+ Open `index.html` in your browser one more time. Click your button. That's something you made.
46
+
47
+ ๐Ÿ“ Your project lives in this folder. You can keep editing it any time.
48
+ ๐ŸŽ“ You finished the Personal Portfolio Course Pack.
49
+
50
+ Want to keep going? Ask the AI: "What should I learn next?"
51
+
52
+ parent_summary_fields:
53
+ - "Mission 3 completed at [timestamp]"
54
+ - "Course Pack 'portfolio-site' completed"
55
+ - "Total Stars used across pack: [stars_total]"
56
+ - "Final file count: [count]"
57
+ - "Total time across pack: [duration_total]"
58
+
59
+ # Pack-level summary (emitted on Mission 3 completion)
60
+ pack_completion_message: |
61
+ ๐ŸŽ‰ You finished the whole Course Pack.
62
+
63
+ What you built: a personal portfolio website with HTML, CSS, and JavaScript.
64
+ What you learned: how a web page works, how to design, how to debug.
65
+
66
+ Show your family. Then come back when you're ready for the next pack.
@@ -0,0 +1,89 @@
1
+ # Mission 3 โ€” Add an interactive button
2
+
3
+ > **Estimated time**: 45 minutes ยท **Estimated Stars**: 15 ยท **Goal**: a button on your page that does something when you click it. Real JavaScript.
4
+
5
+ ---
6
+
7
+ ## What you're going to add
8
+
9
+ A button. When the kid (or anyone) clicks it, something happens on the page.
10
+
11
+ Pick **one** of these (or invent your own โ€” tell the AI):
12
+
13
+ - **Pop-up greeting**: Click โ†’ an alert says hi back
14
+ - **Hide and show**: Click โ†’ a paragraph appears (or disappears)
15
+ - **Random fact**: Click โ†’ a different sentence from a list of your own choices appears
16
+ - **Counter**: Click โ†’ a number goes up by one
17
+ - **Colour shift**: Click โ†’ the page background changes colour
18
+ - **Confetti time**: Click โ†’ emoji burst on screen (a small JS confetti effect)
19
+ - **The day teller**: Click โ†’ today's date is shown
20
+ - **The compliment**: Click โ†’ a random compliment appears
21
+ - **Whatever you want**: Tell the AI what the button should do. If it's doable in HTML/CSS/JS, the AI will help.
22
+
23
+ ---
24
+
25
+ ## Steps
26
+
27
+ 1. **Start the agent.**
28
+ ```
29
+ kids-opencode --course portfolio-site --mission mission-3
30
+ ```
31
+
32
+ 2. **Pick what the button does.** Tell the AI in your own words.
33
+
34
+ 3. **Approve the plan.** The AI will say something like: "I'll add a `<button>` to your `index.html`, write a JavaScript file `script.js`, and link it." Approve.
35
+
36
+ 4. **Try clicking the button.** Refresh the browser, click. Did it work?
37
+
38
+ 5. **If it didn't work**, tell the AI what happened ("nothing happened" or "I got an error in the console"). The AI can read your files and figure out why. **This is the most common bug in your career as a coder. Get used to it.**
39
+
40
+ 6. **Make it yours.** Once it works, tweak. Change the message. Change the colour. Add a second button. Whatever.
41
+
42
+ ---
43
+
44
+ ## A quick word about errors
45
+
46
+ When something doesn't work in JavaScript, **open the browser console** (`Cmd-Option-J` on Mac, `Ctrl-Shift-J` on Linux/Windows in Chrome). Red text = the error. Tell the AI what the red text says.
47
+
48
+ This is how all coders work. They don't memorise everything; they read errors and fix them.
49
+
50
+ ---
51
+
52
+ ## When you get stuck
53
+
54
+ - **The button is there but nothing happens.** Tell the AI; it will read your files and check the wiring.
55
+ - **The console has a red error I don't understand.** Copy-paste the error text to the AI. "What does this mean?"
56
+ - **My button works once, then stops.** Tell the AI; common JS bug.
57
+ - **I want to add a second button.** Go ahead โ€” start a new round with the AI.
58
+ - **I want my button to do something that involves the internet.** Not in V0. The AI will explain why; we keep things local for safety.
59
+
60
+ ---
61
+
62
+ ## What you'll learn
63
+
64
+ - JavaScript files (`.js`) are linked from HTML the same way CSS is
65
+ - An **event listener** waits for a click and runs code when it happens
66
+ - Debugging โ€” the most-real coding skill โ€” is just reading the error and trying again
67
+
68
+ ---
69
+
70
+ ## What's next
71
+
72
+ You're done with Mission 3 and the Course Pack! Your portfolio site has:
73
+ - Real content (Mission 1)
74
+ - Your visual style (Mission 2)
75
+ - Something interactive (Mission 3)
76
+
77
+ Show it to people. Then either:
78
+ - **Pick a new Course Pack** (more coming after V0 launch)
79
+ - **Keep iterating** โ€” add more sections, more buttons, more pages. The AI is happy to keep helping.
80
+ - **Take a break** โ€” your project is saved in this folder; come back anytime.
81
+
82
+ ---
83
+
84
+ ## For parents / teachers
85
+
86
+ This Mission targets:
87
+ - **AU Digital Technologies F-10** โ€” implementation of programs (ACTDIP031), debugging (ACTDIP030)
88
+ - **Console literacy** โ€” first exposure to browser dev tools is a big leap; expect kids to forget how to open the console multiple times
89
+ - **Resilience to errors** โ€” kids who quit at the first red text in the console are not ready for engineering yet. The agent's job is to model "errors are OK, here's how I read them." Workshop teachers should reinforce this orally.
@@ -0,0 +1,82 @@
1
+ # Course Pack โ€” Personal Portfolio Website
2
+ #
3
+ # V0 launch Course Pack. Goal: a 12+ kid builds and ships a single-page
4
+ # HTML/CSS/JS personal portfolio website in 2 hours total, across 3 missions.
5
+ #
6
+ # Loaded by @kidsinai/kids-opencode-plugin when KIDS_COURSE_PACK=portfolio-site.
7
+
8
+ id: portfolio-site
9
+ version: 0.1.0
10
+ title: "My personal portfolio website"
11
+ short_description: "Build a one-page site about you โ€” your hobbies, projects, what you care about."
12
+ target_age_band: "12+"
13
+ estimated_duration_minutes: 120
14
+ estimated_stars_budget: 40
15
+
16
+ learning_objectives:
17
+ - "Understand the basic anatomy of an HTML document (head, body, headings, paragraphs)"
18
+ - "Use CSS to apply colour, typography, and layout"
19
+ - "Use a small amount of JavaScript to add interactivity (a button that does something)"
20
+ - "Experience the agent-mentor workflow: plan, approve, observe, iterate"
21
+ - "Produce a single-file deliverable you can open in your browser and share with family"
22
+
23
+ prerequisites:
24
+ - "Can read English at year-6 level"
25
+ - "Can use a terminal to type a command (with help)"
26
+ - "Knows what a web page is"
27
+ - "Has Kids OpenCode installed (`kids-opencode --version` works)"
28
+
29
+ missions:
30
+ - id: mission-1
31
+ title: "Project setup + first HTML page"
32
+ estimated_minutes: 30
33
+ estimated_stars: 10
34
+ file: mission-1/brief.md
35
+ acceptance: mission-1/acceptance.yml
36
+ - id: mission-2
37
+ title: "Style your page with CSS"
38
+ estimated_minutes: 45
39
+ estimated_stars: 15
40
+ file: mission-2/brief.md
41
+ acceptance: mission-2/acceptance.yml
42
+ - id: mission-3
43
+ title: "Add an interactive button"
44
+ estimated_minutes: 45
45
+ estimated_stars: 15
46
+ file: mission-3/brief.md
47
+ acceptance: mission-3/acceptance.yml
48
+
49
+ system_prompt_overlay: |
50
+ You are running the "My personal portfolio website" Course Pack with a kid who has likely never coded before.
51
+
52
+ Cultural context: this is a creative project about who the kid is. Encourage them to put their own personality
53
+ into it. Their favourite colours, their hobbies, the things they care about.
54
+
55
+ Pacing rules specific to this pack:
56
+ - Mission 1 should feel like a quick win โ€” within 5 minutes of starting, the kid should see something
57
+ real in their browser. Even just "Hello, my name is โ€ฆ" rendered in big text counts.
58
+ - Mission 2 should let the kid express themselves visually. Encourage real choices about colours and
59
+ fonts; don't impose your defaults.
60
+ - Mission 3 introduces a tiny bit of JavaScript. Aim for celebration when their button works.
61
+ - At the end of each mission, briefly celebrate. "Look at what you made!" โ€” concretely.
62
+
63
+ When the kid asks "what should I write about", offer a few prompts they can pick from:
64
+ - "What's a hobby you've gotten into recently?"
65
+ - "What's something you're proud of making or doing?"
66
+ - "If you could teach a friend one thing, what would it be?"
67
+ Don't put words in their mouth โ€” let them choose.
68
+
69
+ Allowed tools: read, write, edit, glob, grep. Don't try to fetch anything from the web during this pack.
70
+ Don't use shell commands (you can't anyway).
71
+
72
+ teacher_notes:
73
+ - "Pre-pack: ensure each kid has a project folder with write permissions"
74
+ - "If a workshop: project folders in `~/portfolio-{kidname}/`"
75
+ - "Plan for 20 minutes of buffer at the end for show-and-tell"
76
+ - "Common stuck point in Mission 2: kids spend 20 minutes on colour choice โ€” give them a 5-min limit"
77
+ - "Common stuck point in Mission 3: JavaScript syntax errors โ€” agent will help but teacher should be ready"
78
+
79
+ revision_history:
80
+ - version: 0.1.0
81
+ date: 2026-05-15
82
+ note: "Initial Course Pack. Engineering-side draft."
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/package.json",
3
+ "name": "@kidsinai/kids-opencode-plugin",
4
+ "version": "0.0.1",
5
+ "type": "module",
6
+ "description": "opencode plugin that turns opencode into a kid-safe coding mentor: kid-safe system prompt, tool whitelist (no shell), DeepRouter routing, audit emission.",
7
+ "license": "MIT",
8
+ "homepage": "https://github.com/kidsinai/kids-opencode",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/kidsinai/kids-opencode.git",
12
+ "directory": "packages/kids-plugin"
13
+ },
14
+ "keywords": ["opencode", "opencode-plugin", "kids", "education", "k-12", "agentic"],
15
+ "exports": {
16
+ ".": {
17
+ "import": "./src/index.ts",
18
+ "types": "./src/index.ts"
19
+ }
20
+ },
21
+ "files": [
22
+ "src",
23
+ "course-packs",
24
+ "README.md",
25
+ "LICENSE"
26
+ ],
27
+ "scripts": {
28
+ "typecheck": "tsc --noEmit",
29
+ "test": "bun test"
30
+ },
31
+ "peerDependencies": {
32
+ "@opencode-ai/plugin": ">=1.14.0",
33
+ "@opencode-ai/sdk": ">=1.14.0"
34
+ },
35
+ "devDependencies": {
36
+ "@opencode-ai/plugin": "^1.14.51",
37
+ "@opencode-ai/sdk": "^1.14.51",
38
+ "typescript": "^5.7.0"
39
+ },
40
+ "dependencies": {
41
+ "yaml": "^2.9.0"
42
+ }
43
+ }