编辑- dev
构建并尝试一个 红外线 在你和学生分享之前 用自己的电脑做实验室.
你把你的实验室写成文件lab.yml, (中文(简体) ), edrys-dev 在浏览器中打开它作为类,每次保存文件时,所有打开的标签中都会更新类. 你工作时不需要账户和部署.
快开始
惠璶 节点.js 二十个或更新.
-
为实验室创建文件夹并创建文件
lab.yml其中:name: My first lab meta: description: Trying out edrys-dev. modules: - url: https://edrys-labs.github.io/module-markdown-it/index.html config: content: | # Welcome Edit lab.yml, save it, and watch this text change. width: full height: tall -
在文件夹中启动 edrys- dev :
npx @edryslabs/edrys-dev lab.yml --open您的浏览器打开课程 。 在终端中,你会看到两个地址:
edrys-dev: /home/you/my-lab/lab.yml http://localhost:3210/?dev class open, share link: http://localhost:3210/?/classroom/… students join at: https://edrys-labs.github.io/?/classroom/… -
换个东西进去
lab.yml并拯救我们。 班级自行更新.
如果您经常使用 edrys-dev, 请安装一次 npm install -g @edryslabs/edrys-dev 然后从刚刚开始 edrys-dev lab.yml --open。 。 。 .
别闹了 Ctrl+C。 。 。 .
在实验室工作
-
这个
/?dev选项卡是您的. 这是老师对班级的看法. 保持打开:是标签将您的更改取回到lab.yml。 。 。 . -
尝试实验室作为一个学生或站. 在 a 中打开共享链接 不同 浏览器或私人窗口。 在同一浏览器里,你会再次成为老师.
-
让学生从自己的电脑上进来. 之后再给他们联系
students join at:它打开同一个课 https://edrys-labs.github.io 互联网档案馆的存檔,存档日期2013-12-22所以学生只需要浏览器,而你/?dev选项卡留在您的计算机上,并不断跟踪lab.yml。在学生加入时继续打开标签:他们从打开该标签的浏览器那里获得课程。 与代理或辅导员,代理聊天在您的/?dev选项卡在顶部显示此链接,并带有复制按钮。 类的设置( Members, Communications)给出了相同的链接,下面是您的标签的地址,它只在您的计算机上工作. 三事须知:- 双方必须以同样的方式连接。 无
--local没错 与--local班级在您的计算机上通过 edrys-dev , 其它计算机无法到达, 因此 edrys-dev 打印没有学生的链接 . - 如果您在类设置中选中了 WebSocket 服务器, 链接会携带它(
#comm=…不要切断这部分. - 模块从
http://localhost:…(见下文)不装入学生的电脑。 edrys -dev警告你他们.
--student-url将链接指向另一个edrys-Lite站点,例如您自己的副本;它必须使用与edrys-Lite内部edrys-dev相同的连接设置. - 双方必须以同样的方式连接。 无
-
文件获胜. 类设置对话框中任何您更改的内容在下次保存时被替换
lab.yml。在文件中修改. -
重新开始是安全的. 一样
lab.yml重新打开同一类, 因此在继续工作前共享您打开的链接 . -
误取相报. 如果该类无法使用您的实验室( 例如 YAML type), 终端打印
lab error: …。修复文件并再次保存. -
离线? 开始
--local。该类随后通过 edrys-dev 本身而不是互联网连接.
现有哪些模块以及如何配置这些模块,将在 edrys- Lite 文档 编辑 编辑技能。 。 。 .
实验室完工后
发布 lab.yml 例如,在GitHub 存储器中,您通常会如何部署链接到 https://edrys-labs.github.io 互联网档案馆的存檔,存档日期2013-12-22. Edrys -dev 中没有任何内容最终会出现在文件中.
写入自己的模块
如果你还在写一个模块,就把它放进 modules/ 实验室旁边的文件夹, 每个模块一个子文件夹 :
my-lab/
├── lab.yml
└── modules/
└── my-module/
└── index.html
edrys-dev在下一个端口服务此文件夹(默认情况下为3211). 使用该地址在 lab.yml数字 :
modules:
- url: http://localhost:3211/my-module/index.html
当您保存一个文件到 modules/my-module/,只有那个模块在课堂上重新装入。 收集您模块页面出错后, 一个 AI 代理可以看见( 见下文) .
这些地址只在你的电脑上工作 发布模块(例如在 GitHub Pages 上)并将其真实地址输入 lab.yml 在你分享实验室之前.
有人工智能探员
edrys-dev可以与Claude Code或GitHub Copilot等AI编码代理合作. 代理编辑 lab.yml 对于您,请查看该课是否接受,并可以查看该课:房间,用户,模块及其消息.
设置
快速的方式, 对于一个新的实验室:
npx @edryslabs/edrys-dev init my-lab
这使得文件夹 my-lab 带有启动器 lab.yml,克劳德代码的代理配置(.mcp.jsonVS代码副驾驶(.vscode/mcp.json),对代理人的指示(AGENTS.md, (中文(简体) ), CLAUDE.md),允许代理服务器使用 edrys-dev 并编辑的 Claude 代码设置 lab.yml 财务报告和审定财务报表 modules/ 不每次询问( e).claude/settings.json页:1 .gitignore。在一个文件夹中,它保存着其中一些文件。 如果尚未安装 Edries 技能(下面第2步),它会提供为您安装这些技能;如果是,它会在更新版本出炉时更新这些技能. 然后打开您代理的文件夹并写出"启动" .
让你的学生 辅导员 还:
npx @edryslabs/edrys-dev init my-lab --tutor
然后,代理开始 edrys-dev 与导师。 家教在你的电脑上需要Claude代码 如果你和副驾驶合作的话 添加 --tutor-agent codex 由Codex回答而不是Claude代码。 在已有代理配置的文件夹中, 添加 "--tutor" 页:1 args 内 .mcp.json (和 .vscode/mcp.json)你自己,然后重新启动代理.
手执:
-
创建文件
.mcp.json在您的实验室文件夹中 :{ "mcpServers": { "edrys": { "command": "npx", "args": ["-y", "@edryslabs/edrys-dev", "--mcp", "lab.yml"] } } }如果你在全球安装了干燥剂,
"command": "edrys-dev", "args": ["--mcp", "lab.yml"]开始更快. -
安装 edrys 技能, 因此代理商知道实验室和模块的写法:
npx skills add edrys-labs/skills -
开始你的经纪人 在实验室文件夹. 代理商自己开始干燥不要用手开始 如果文件夹没有
lab.yml然而, Edrys -dev 在那里建立了一个启动实验室。 如果浏览器不打开, 向代理商询问类地址 .
跟班上的经纪人说话
类标签在其上行有代理聊天按钮(sparkles 图标),在类聊天按钮旁边. 它打开课上右侧的聊天,就像课上聊天一样;拖取其左边缘使其更宽或更窄. 在电话里它充斥着屏幕。 你写的东西直接交给探员 只有你看到这种聊天,不是课堂聊天。 代理可以使用文本回答,也可以使用按钮或复选框来取用.
当班级无法取取你的实验室文件时,比如在打字出错后,聊天中的一通红字便以平话表示,在"Details"下有edrys-Lite的留言. 一旦文件再次装入,它就会消失.
在你的留言下,你看到"等待代理..." 直到代理捡起,然后"想..."。 如果30秒内无事发生,代理人可能不会听. 你的信息一旦得到保存和回答.
有些特工在闲暇时不会自己注意到新消息. 这样的话,开始 chat 提示一次 edrys 服务器( 在 VS 代码副驾驶中: 类型) /edrys.chat,或 /mcp.edrys.chat 在旧版本中),并且代理正在等待您的消息.
聊天被保存在 .edrys-dev/chats/ 在实验室旁边,所以一个重启的代理可以捡起你离开的地方. 聊天顶端的菜单开始新的聊天或重新打开旧的聊天. 添加 .edrys-dev/ 给您的 .gitignore。 。 。 .
为了安全起见,聊天只接受您自己计算机上类页面的信息. 在您的网络上的其他网站或人不能写给您的代理, 只要你保留 --host 默认时.
探员能做的
| 工具 | |
|---|---|
get_state | 实验室文件、课堂地址、共享链接(也用于学生)、房间、用户和模块 |
goto | 将您的课程标签移至房间, 或打开学生或站台标签 |
chat, (中文(简体) ), read_chat | 在代理聊天中写信给你,读取您的留言 |
read_messages | 模块之间的信件,以及您自己的模块中的错误 |
read_module_state | 模块在一个房间里共享什么 |
read_student_chats | 学生们问辅导员什么,辅导员回答什么 --tutor(中文(简体) ) |
run_in_module | 在您自己的模块中运行 JavaScript, 只当您要求时 |
wait_for_event | 等下一场课上发生的事 |
你的学生家教
启动 edrys- dev 与 --tutor,而您的学生在课堂上方的栏目中得到了一个导师按钮(robot图标). 他们要求的是由你电脑上的AI回答: 克劳德代码 必须安装和签名于(claude 在终端。 与 --tutor-agent codex, (中文(简体) ), 代码 答案改为( e)codex login (第一编) 学生除了班级联系什么都不需要.
-
它知道实验室. 老师说
lab.yml每一个问题,所以它总是知道 班级展示的版本。 它提供了提示和解释,而不是整个解决方案. -
仅为导师注. 放一个文件
tutor.md旁边lab.yml例如,"任务2是关于Ohm的法律,不要给出数字". 学生不接受这个文件. 努力学习的学生可能仍然让辅导员重复,所以要保守秘密. -
它看到学生的房间. 每个问题都有学生房间的模块 比如编辑部的代码
/?dev选项卡。 它不能改变它或运行它。 它没有看到终端输出或屏幕,所以它要求学生贴上这些. -
它只能回答. 单独运行
claude没有工具、 MCP 服务器或您的设置。 学生无法到达您的文件、您的外壳或编辑实验室的代理 。 Codex没有"没有工具"的开关,因此edrys-dev关闭了它的每一个工具和你的配置,运行它只读,并放下它仍然使用工具的任何答案. 这是用Codex 0.165检查过的. 如果一个更新的版本不再知道其中的其中一个设置,导师不会给出答案,终端会说原因. -
/?dev选项卡传送信件. 保持开放。 按钮只显示在它存在的时候, 并且只显示在足够新到有它的地方, 在你的电脑和学生的网站上. -
你在代理聊天时看和切换它. 您顶上栏的代理聊天按钮( sparkles 图标)
/?dev选项卡有一个 Students 视图: 每一个问题和答案, 以及一个开关, 它可以关闭和关闭导师而不再重新启动。 关机的时候,学生们看不到他们的按钮. -
每个学生都有自己的对话,接下来是下一个问题。 聊天被保存在
.edrys-dev/tutor/,而代理保存着自己每次谈话的副本(Claude Code和Codex在通常会话文件夹中). 你的经纪人可以读出来read_student_chats告诉你学生被困在哪里. -
限制. 最多两个答案一次写出;30秒内找不到自由转会的问题得到"导师很忙". 每个学生每小时可以有一个公开的问题,最多20个问题,每个问题最多有2000个字符. 整个班级每个小时最多有200个问题, 而不计那些被拒之门外的人
--tutor-per-hour因此,学生不能用新名字越过限制并使用您的账户。 当班级到达时,终点站和"学生观"都这么说. -
费用. 每个问题都使用账户
claude或者说codex已签入。 用个人计划(Claude Pro/Max,ChatGPT)回答学生,可能会打破其条款,这不会让你的账户提供给其他人. 对于一个班级,使用API密钥:用它开始edrys-dev,只有导师使用,而不是你自己的代理.ANTHROPIC_API_KEY=sk-ant-... npx edrys-dev lab.yml --tutor CODEX_API_KEY=sk-... npx edrys-dev lab.yml --tutor --tutor-agent codex终端说当 edrys-dev 启动时, 支付什么, 例如.
tutor: on (claude, answers paid with API key from ANTHROPIC_API_KEY)。用密钥, Claude 以最小模式运行(--bare)),它只取出密钥,从不登录. 代码读取CODEX_API_KEY没有OPENAI_API_KEY。 。 。 .--tutor-model选择更便宜的模型,例如:.--tutor-model haiku。 。 。 . -
隐私. 学生们被告知,在你的计算机答案上有一个AI,你可以读取聊天. 问答在学生浏览器和你的分页之间加密,在每个连接上. 其它班级成员无法读取,转发班级的WebSocket服务器也无法读取.
选项
edrys-dev [lab.yml] [options]
| 选项 | 默认 | |
|---|---|---|
[lab.yml], (中文(简体) ), -i, --input <file> | ./lab.yml | 实验室文件, YAML 或 JSON |
-o, --open | 关 | 打开浏览器中的类 |
-p, --port <port> | 3210 | 如果选中, 则使用下一个自由端口 |
--local | 关 | 通过 edrys-dev 而不是互联网连接班级; 工作离线 |
-m, --modules <dir> | ./modules,如果它存在 | 带有您自己的模块的文件夹 |
--student-url <url> | https://edrys-labs.github.io/ | 学生链接中的 edrys-Lite 网站 |
--tutor | 关 | 学生的辅导聊天,由计算机上的AI代理回答 |
--tutor-agent <claude|codex> | claude | 回答的代理人: Claude 代码或代码x |
--tutor-model <model> | 代理默认值 | 家教使用的模型 |
--tutor-per-hour <n> | 200 | 整个班的辅导员每小时回答问题 |
--host <host> | 127.0.0.1 | 0.0.0.0 让您的网络上的其他人打开课程(以及 --mcp,写信给你的经纪人) |
--mcp | 关 | 用于 AI 代理; 设置为 .mcp.json,见上文 |
-h, --help | 显示帮助 |
解决问题
no lab file at …: edrys-dev 寻找lab.yml在当前文件夹中。 在实验室文件夹中启动, 或者给出路径 :edrys-dev path/to/lab.yml。 。 。 .- 分享链接打开我作为老师. 在另一个浏览器或私人窗口中打开.
- 我对设置的更改都不见了. 改为:
lab.yml在每一个拯救。 把它们放进档案里. - 班级不连接/没有互联网. 尝试
--local。 。 。 . - 学生见一空课. 留着吧
/?dev选项卡在他们加入时打开。 请检查access-date=中的日期值 (帮助)#comm=…最后,你没有开始--local设置的站点--student-url必须使用与 edrys-dev 的 edrys-Lite 相同的连接设置. - 与3210不同的港口. 另一个程序使用;edrys-dev取下个免费的. 终端显示地址.
- 经纪人在聊天时不回答. 请检查access-date=中的日期值 (帮助)
.mcp.json,如果它不醒来 自己,启动chat快捷键(见上文).
发展
努力研究Edrys-dev本身:
npm install
npm run build # tsc → dist/
npm test # builds, then runs test/*.test.js
零件如何互相交谈:
flowchart LR
lab[lab.yml] -- watch --> srv
mods[modules/] -- watch --> msrv["module server :3211<br/>(module pages + error script)"]
subgraph srv ["edrys-dev :3210"]
direction TB
static["edrys-Lite dist + reload.js"]
api["/edrys-dev/lab · events · reload · bridge · module-error<br/>chat · tutor · link"]
end
srv -- "reload-lab, reload-module, tutor answers (SSE events)" --> tab["class tab /?dev"]
tab -- "GET lab, republish signed, tutor answers" --> room((class))
tab -- "state, messages, replies, tutor questions (POST bridge)" --> srv
msrv -- module frames --> tab
msrv -. "errors (POST module-error)" .-> srv
srv -- "reload (SSE)" --> peers
room -- "default transport, or --local on :3210" --> peers[student / station tabs]
peers -- "tutor questions" --> room
room -- "tutor questions" --> tab
agent[AI agent] <-- "MCP over stdio (--mcp)" --> srv
srv <-- "question in, answer out (--tutor)" --> tutor["tutor: claude or codex<br/>without tools"]
index.ts读取选项并启动服务器,然后--mcpmCP 服务器 (mcp.ts) (中文(简体) ).server.ts服务 Edrys-Lite, 看着实验室(watch.ts)和对课表的交谈: 赛事在SSE上展开, 课表的报告会回来POST /edrys-dev/bridge。 。 。 .- 在课堂上, edrys -Lite自己的
DevBridge(单位:千美元)src/ts/DevBridge.ts在 edrys-Lite 中,活动与?dev)加载并重置实验室并报告班级.GET /edrys-dev/lab并告诉它那里代理聊天的哪些观点(chat: {agent, students}); Edrys-Lite 然后显示其AgentChat.vue抽屉,它说话到chat.ts(代理视图,/edrys-dev/chat和tutor.ts(学生视野,/edrys-dev/tutor)在服务器上,然后/edrys-dev/link/events为学生的链接. - edrys-dev 添加
views/reload.js到页面:当本地模块改变时,学生和站点标签再次加载. tutor.ts回答学生--tutor课表会把他们的问题传到桥上,tutor.ts运行claude或者说codex每一个都不用工具,答案作为事件回到分页,通过班级发送给学生.modules.ts为下一个端口的本地模块服务,并将错误报告器添加到其页面上.sync.tsyjs 同步为--local在edrys-dev自己的港口上.
edrys- Lite 来源于 npm 为 @edryslabs/edrys-lite,被固定在一个版本上: dist/ edrys-dev是服务。 尝试修改 edrys-Lite, 构建它(npm run build 并链接到退出 npm install ../edrys-Lite; 之后再次将已出版的版本收起. 也一样 @edryslabs/websocket-server,可选择的依赖性,仅 --local 用户.
出版人: .github/workflows/publish.yml数字 : npm version <version> 财务报告和审定财务报表 git push --follow-tags 打开 main。标记匹配的工作流程检查 package.json,运行测试,发布到npm(如: 0.5.0-dev.0 下划线 next 标记, 任何其它 latest)并创建了 GitHub 发布.
问题和牵引请求: https://github.com/edrys-labs/edrys-devserver 互联网档案馆的存檔,存档日期2013-12-22
许可证
麻省理工学院。MCP服务器和代理聊天跟踪 Lia 脚本开发服务器 (麻省理工学院).