Skip to content
Open
Show file tree
Hide file tree
Changes from 40 commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
5ba8a44
Revise local model usage instructions in README
Sweaterdog Mar 26, 2026
eebd757
Delete profiles/andy-4-reasoning.json
Sweaterdog Mar 26, 2026
c6acdf4
Update profile name and model structure for andy-4.2
Sweaterdog Mar 26, 2026
6d77024
Update profile reference in settings.js
Sweaterdog Mar 26, 2026
d18647c
Update recommendation for local models usage
Sweaterdog Mar 26, 2026
bbeb003
Update profiles/andy-4.2.json
Sweaterdog Mar 30, 2026
8c916ae
feat: add 8 more model providers
Apr 2, 2026
8381299
Big Change
masterpatrickpl-coder Apr 14, 2026
4f07e90
Remove GLHF
riqvip Apr 15, 2026
73ee6f3
Merge PR #680 Replicate Gemini fixes
Ninot1Quyi May 1, 2026
2a190e7
Merge pull request #756 from masterpatrickpl-coder/patch-1
Ninot1Quyi May 1, 2026
af4dcb9
Make provider configuration portable
Ninot1Quyi May 1, 2026
053e768
Let agents execute native tool calls
Ninot1Quyi May 1, 2026
aac0c50
Merge pull request #752 from hnrie/add-more-models-fun
Ninot1Quyi May 1, 2026
a3a1e1b
Move PR 752 providers into the registry
Ninot1Quyi May 1, 2026
1897c2e
Keep local notes out of the branch
Ninot1Quyi May 1, 2026
a65e491
Make native tool results replayable
Ninot1Quyi May 1, 2026
6ef67b9
Make the default Mindcraft configuration self-documenting
Ninot1Quyi May 1, 2026
ecf5e49
Stabilize native tool runtime before message manager refactor
Ninot1Quyi May 2, 2026
f23d843
Stabilize native tool traces without breaking cache prefixes
Ninot1Quyi May 2, 2026
248473b
Close native tool calls when users interrupt actions
Ninot1Quyi May 2, 2026
a452546
Keep Kimi reachable on IPv4-only networks
Ninot1Quyi May 2, 2026
f9815d9
Revert "Keep Kimi reachable on IPv4-only networks"
Ninot1Quyi May 2, 2026
e5a046e
Route Kimi through its OpenAI-compatible endpoint
Ninot1Quyi May 2, 2026
080dca9
Prefer Kimi K2.6 as the default coding model
Ninot1Quyi May 2, 2026
949731b
Preserve model reasoning across native tool turns
Ninot1Quyi May 2, 2026
d47c86c
Surface reasoning on tool activity traces
Ninot1Quyi May 2, 2026
4a6ac04
Keep conversation turns cache-stable under overlap
Ninot1Quyi May 2, 2026
c6dc4d5
Render complete runtime history across sessions
Ninot1Quyi May 2, 2026
7be5af0
Keep reasoning display at the response level
Ninot1Quyi May 2, 2026
4f72753
Let human messages interrupt stale agent turns
Ninot1Quyi May 2, 2026
77753ef
Remove thinking accent rail
Ninot1Quyi May 2, 2026
de6a23f
Reduce formatting-only review noise
Ninot1Quyi May 2, 2026
28eb4f6
Preserve cache continuity with current launch settings
Ninot1Quyi May 2, 2026
3f86f8d
Show Codex reasoning summaries in runtime trace
Ninot1Quyi May 2, 2026
0c8d44d
Preserve message queue order under interruption
Ninot1Quyi May 2, 2026
3a8b9e1
Serialize bot chatter through the ReAct queue
Ninot1Quyi May 3, 2026
1ffd0e2
Keep bot response decisions off the main timeline
Ninot1Quyi May 3, 2026
0a3561f
Expose branch decisions without polluting the main trace
Ninot1Quyi May 3, 2026
44e66ab
Preserve Codex cache continuity across agent turns
Ninot1Quyi May 3, 2026
3c7926e
Keep stale tool calls from blocking compaction
Ninot1Quyi May 3, 2026
6eadc9b
Preserve Codex cache across forked turns
Ninot1Quyi May 3, 2026
4351760
Clarify the Codex adapter boundary
Ninot1Quyi May 3, 2026
4fa94df
Keep bot action telemetry out of ReAct turns
Ninot1Quyi May 3, 2026
67b70b8
Prioritize human turns and clarify runtime traces
Ninot1Quyi May 3, 2026
4ffd9f9
Reduce runtime trace review noise
Ninot1Quyi May 3, 2026
d8b2dee
Stabilize native tool branching and document PR scope
Ninot1Quyi May 3, 2026
37e0316
Document verified PR behavior up front
Ninot1Quyi May 3, 2026
f0f3f25
Keep generated PR summary out of tracked code
Ninot1Quyi May 3, 2026
e129513
Keep local test scaffolding out of the PR diff
Ninot1Quyi May 3, 2026
f64082e
chore: update model names to latest
uukelele May 3, 2026
8b7a593
Update andy-4.2.json
riqvip May 3, 2026
4c8cbbe
Make Azure provider example user-fillable
Ninot1Quyi May 3, 2026
f05b952
Merge remote-tracking branch 'origin/native-tool' into native-tool
Ninot1Quyi May 3, 2026
59ecf3f
Make Azure profile select Azure embeddings explicitly
Ninot1Quyi May 3, 2026
a56938f
Remove "native"
Ninot1Quyi May 3, 2026
0a4d69d
Merge remote-tracking branch 'origin/develop' into native-tool
Ninot1Quyi May 3, 2026
6a99ae5
Change to "claude-opus-4-7"
Ninot1Quyi May 3, 2026
7d069f0
Merge pull request #744 from Sweaterdog/update-andy-model-info
Ninot1Quyi May 3, 2026
e1c69fb
Stop tracking local native-tool smoke loop
Ninot1Quyi May 3, 2026
d410766
Guide Azure profile provider setup
Ninot1Quyi May 3, 2026
4e74744
Delete scripts/smoke directory
Ninot1Quyi May 25, 2026
c71e6fa
Merge branch 'develop' into native-tool
Ninot1Quyi Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@
node_modules
bots/*/
!bots/*
keys.json
settings_llm_providers.json
results
tests/results
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
node_modules/
package-lock.json
code_records/
docs/
scratch.js
bots/**/action-code/**
bots/**/
keys.json
settings_llm_providers.json
services/viaproxy/jars/**
services/viaproxy/logs/**
services/viaproxy/plugins/**
Expand All @@ -19,8 +20,9 @@ experiments/
andy_*.json
jill_*.json
src/models/logs/*
results/
tests/results/
server_data/*
results/*
tasks/construction_tasks/test_multiagent_construction_tasks.json
tasks/construction_tasks/train_multiagent_construction_tasks.json
tasks/construction_tasks/test/**
Expand Down
2 changes: 1 addition & 1 deletion FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
- The bot will still get stuck occasionally, but not constantly.

- `Why I added the api key but still prompted that the key can't be found?`
- Possible reason 1: Did not modify keys.example.json to keys.json.
- Possible reason 1: Did not modify settings_llm_providers.example.json to settings_llm_providers.json.
- Possible reason 2: If you use vscode to edit, you need to `ctrl+s` to save the file for the changes to take effect.
- Possible reason 3: Not setting the code path correctly in setting.js, use andy.js by default.

Expand Down
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Do not connect this bot to public servers with coding enabled. This project allo

2. Download the [latest release](https://github.com/mindcraft-bots/mindcraft/releases/latest) and unzip it, or clone the repository.

3. Rename `keys.example.json` to `keys.json` and fill in your API keys (you only need one). The desired model is set in `andy.json` or other profiles. For other models refer to the table below.
3. Rename `settings_llm_providers.example.json` to `settings_llm_providers.json` and fill in your API keys (you only need one). The desired model is set in `andy.json` or other profiles. For other models refer to the table below.

4. In terminal/command prompt, run `npm install` from the installed directory

Expand Down Expand Up @@ -71,7 +71,6 @@ You can configure the agent's name, model, and prompts in their profile like `an
| `huggingface` | `HUGGINGFACE_API_KEY` | [docs](https://huggingface.co/models) |
| `novita` | `NOVITA_API_KEY` | [docs](https://novita.ai/model-api/product/llm-api?utm_source=github_mindcraft&utm_medium=github_readme&utm_campaign=link) |
| `openrouter` | `OPENROUTER_API_KEY` | [docs](https://openrouter.ai/models) |
| `glhf` | `GHLF_API_KEY` | [docs](https://glhf.chat/user-settings/api) |
| `hyperbolic` | `HYPERBOLIC_API_KEY` | [docs](https://docs.hyperbolic.xyz/docs/getting-started) |
| `vllm` | n/a | n/a |
| `cerebras` | `CEREBRAS_API_KEY` | [docs](https://inference-docs.cerebras.ai/introduction) |
Expand Down Expand Up @@ -144,7 +143,7 @@ If you want more optimization and automatic launching of the minecraft world, yo
If you intend to `allow_insecure_coding`, it is a good idea to run the app in a docker container to reduce risks of running unknown code. This is strongly recommended before connecting to remote servers, although still does not guarantee complete safety.

```bash
docker build -t mindcraft . && docker run --rm --add-host=host.docker.internal:host-gateway -p 8080:8080 -p 3000-3003:3000-3003 -e SETTINGS_JSON='{"auto_open_ui":false,"profiles":["./profiles/gemini.json"],"host":"host.docker.internal"}' --volume ./keys.json:/app/keys.json --name mindcraft mindcraft
docker build -t mindcraft . && docker run --rm --add-host=host.docker.internal:host-gateway -p 8080:8080 -p 3000-3003:3000-3003 -e SETTINGS_JSON='{"auto_open_ui":false,"profiles":["./profiles/gemini.json"],"host":"host.docker.internal"}' --volume ./settings_llm_providers.json:/app/settings_llm_providers.json --name mindcraft mindcraft
```
or simply
```bash
Expand Down
21 changes: 17 additions & 4 deletions andy.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
{
"name": "andy",

"model": "gpt-5.4-mini"

}
"model": {
"provider": "openai",
"model": "gpt-5.4-mini"
},
"embedding": {
"provider": "",
"model": ""
},
"code_model": {
"provider": "",
"model": ""
},
"vision_model": {
"provider": "",
"model": ""
}
}
9 changes: 6 additions & 3 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,11 @@ export default [
"no-floating-promise": noFloatingPromise,
},
languageOptions: {
globals: globals.browser,
ecmaVersion: 2021,
globals: {
...globals.browser,
...globals.node,
},
ecmaVersion: "latest",
sourceType: "module",
},
rules: {
Expand All @@ -24,7 +27,7 @@ export default [
"curly": "off", // Do not enforce the use of curly braces around blocks of code.
"no-unused-vars": "off", // Disable warnings for unused variables.
"no-unreachable": "off", // Disable warnings for unreachable code.
"require-await": "error", // Disallow async functions which have no await expression
"require-await": "off", // Many provider interfaces are intentionally async-compatible.
"no-floating-promise/no-floating-promise": "error", // Disallow Promises without error handling or awaiting
},
},
Expand Down
19 changes: 0 additions & 19 deletions keys.example.json

This file was deleted.

5 changes: 4 additions & 1 deletion main.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,11 @@ if (process.env.SETTINGS_JSON) {
}
}

if (settings.llm_providers) {
process.env.MINDCRAFT_LLM_PROVIDERS_PATH = settings.llm_providers;
}

Mindcraft.init(false, settings.mindserver_port, settings.auto_open_ui);
Mindcraft.init(false, settings.mindserver_port, settings.auto_open_ui, settings);

for (let profile of settings.profiles) {
const profile_json = JSON.parse(readFileSync(profile, 'utf8'));
Expand Down
11 changes: 7 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,9 @@
"eslint-plugin-no-floating-promise": "^2.0.0",
"express": "^4.18.2",
"globals": "^15.11.0",
"google-translate-api-x": "^10.7.1",
"groq-sdk": "^0.15.0",
"minecraft-data": "^3.97.0",
"minecraft-assets": "^1.16.0",
"minecraft-data": "^3.97.0",
"mineflayer": "^4.33.0",
"mineflayer-armor-manager": "^2.0.1",
"mineflayer-auto-eat": "^3.3.6",
Expand All @@ -35,15 +34,19 @@
"socket.io-client": "^4.7.2",
"three": "^0.128.0",
"vec3": "^0.1.10",
"ws": "^8.20.0",
"yargs": "^17.7.2"
},
"overrides": {
"canvas": "^3.1.0",
"gl": "^8.1.6"
"canvas": "^3.1.0",
"gl": "^8.1.6"
},
"scripts": {
"postinstall": "patch-package",
"start": "node main.js",
"test": "node --test tests/*.test.js",
"dev:tool-loop": "node scripts/smoke/dev_native_tool_loop.js",
"test:live:function-calls": "node scripts/smoke/live_function_call_smoke.js",
"reinstall": "npm run clean:modules && npm install",
"clean:modules": "node -e \"const fs=require('fs');const p=require('path');['node_modules','package-lock.json'].forEach(f=>{if(fs.existsSync(f)){if(fs.lstatSync(f).isDirectory()){fs.rmSync(f,{recursive:true,force:true});}else{fs.unlinkSync(f);}}});\""
},
Expand Down
27 changes: 16 additions & 11 deletions profiles/andy-4-reasoning.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
{
"name": "andy_4_thinking",

"model": "ollama/sweaterdog/andy-4:micro-q8_0",

"conversing": "You are a playful Minecraft bot named $NAME that can converse with players, see, move, mine, build, and interact with the world by using commands.\n$SELF_PROMPT Act human-like as if you were a typical Minecraft player, rather than an AI. Be very brief in your responses, don't apologize constantly, don't give instructions or make lists unless asked, and don't refuse requests. Think in high amounts before responding. Don't pretend to act, use commands immediately when requested. Do NOT say this: 'Sure, I've stopped.', instead say this: 'Sure, I'll stop. !stop'. Do NOT say this: 'On my way! Give me a moment.', instead say this: 'On my way! !goToPlayer(\"playername\", 3)'. Respond only as $NAME, never output '(FROM OTHER BOT)' or pretend to be someone else. If you have nothing to say or do, respond with an just a tab '\t'. This is extremely important to me, take a deep breath and have fun :)\nSummarized memory:'$MEMORY'\n$STATS\n$INVENTORY\n$COMMAND_DOCS\n$EXAMPLES\nReason before responding. Conversation Begin:",

"coding": "You are an intelligent mineflayer bot $NAME that plays minecraft by writing javascript codeblocks. Given the conversation, use the provided skills and world functions to write a js codeblock that controls the mineflayer bot ``` // using this syntax ```. The code will be executed and you will receive it's output. If an error occurs, write another codeblock and try to fix the problem. Be maximally efficient, creative, and correct. Be mindful of previous actions. Do not use commands !likeThis, only use codeblocks. The code is asynchronous and MUST USE AWAIT for all async function calls, and must contain at least one await. You have `Vec3`, `skills`, and `world` imported, and the mineflayer `bot` is given. Do not import other libraries. Think deeply before responding. Do not use setTimeout or setInterval. Do not speak conversationally, only use codeblocks. Do any planning in comments. This is extremely important to me, think step-by-step, take a deep breath and good luck! \n$SELF_PROMPT\nSummarized memory:'$MEMORY'\n$STATS\n$INVENTORY\n$CODE_DOCS\n$EXAMPLES\nConversation:",

"saving_memory": "You are a minecraft bot named $NAME that has been talking and playing minecraft by using commands. Update your memory by summarizing the following conversation and your old memory in your next response. Prioritize preserving important facts, things you've learned, useful tips, and long term reminders. Do Not record stats, inventory, or docs! Only save transient information from your chat history. You're limited to 500 characters, so be extremely brief, think about what you will summarize before responding, minimize words, and provide your summarization in Chinese. Compress useful information. \nOld Memory: '$MEMORY'\nRecent conversation: \n$TO_SUMMARIZE\nSummarize your old memory and recent conversation into a new memory, and respond only with the unwrapped memory text: ",

"bot_responder": "You are a minecraft bot named $NAME that is currently in conversation with another AI bot. Both of you can take actions with the !command syntax, and actions take time to complete. You are currently busy with the following action: '$ACTION' but have received a new message. Decide whether to 'respond' immediately or 'ignore' it and wait for your current action to finish. Be conservative and only respond when necessary, like when you need to change/stop your action, or convey necessary information. Example 1: You:Building a house! !newAction('Build a house.').\nOther Bot: 'Come here!'\nYour decision: ignore\nExample 2: You:Collecting dirt !collectBlocks('dirt',10).\nOther Bot: 'No, collect some wood instead.'\nYour decision: respond\nExample 3: You:Coming to you now. !goToPlayer('billy',3).\nOther Bot: 'What biome are you in?'\nYour decision: respond\nActual Conversation: $TO_SUMMARIZE\nDecide by outputting ONLY 'respond' or 'ignore', nothing else. Your decision:"

"model": {
"provider": "ollama_local",
Comment thread
Ninot1Quyi marked this conversation as resolved.
Outdated
"model": "sweaterdog/andy-4:micro-q8_0"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe switch to andy 4.2?

},
"embedding": {
"provider": "",
"model": ""
},
"code_model": {
"provider": "",
"model": ""
},
"vision_model": {
"provider": "",
"model": ""
}
}
20 changes: 16 additions & 4 deletions profiles/andy-4.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
{
"name": "andy_4",

"model": "ollama/sweaterdog/andy-4:micro-q8_0",

"embedding": "ollama"
"model": {
"provider": "ollama_local",
Comment thread
Ninot1Quyi marked this conversation as resolved.
Outdated
"model": "sweaterdog/andy-4:micro-q8_0"
},
"embedding": {
"provider": "ollama_local",
"model": "embeddinggemma"
},
"code_model": {
"provider": "",
"model": ""
},
"vision_model": {
"provider": "",
"model": ""
}
}
26 changes: 13 additions & 13 deletions profiles/azure.json
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
{
"name": "azure",
"model": {
"api": "azure",
"url": "https://<your-resource>.openai.azure.com",
"model": "<chat-deployment-name>",
"params": {
"apiVersion": "2024-08-01-preview"
}
"provider": "azure",
"model": "gpt-5-nano"
},
"embedding": {
"api": "azure",
"url": "https://<your-resource>.openai.azure.com",
"model": "<embedding-deployment-name>",
"params": {
"apiVersion": "2024-08-01-preview"
}
"provider": "",
Comment thread
Ninot1Quyi marked this conversation as resolved.
Outdated
"model": ""
},
"code_model": {
"provider": "",
"model": ""
},
"vision_model": {
"provider": "",
"model": ""
}
}
}
19 changes: 19 additions & 0 deletions profiles/cerebras.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "cerebras",
"model": {
"provider": "cerebras",
"model": "gpt-oss-120b"
},
"embedding": {
"provider": "",
Comment thread
Ninot1Quyi marked this conversation as resolved.
"model": ""
},
"code_model": {
"provider": "",
"model": ""
},
"vision_model": {
"provider": "",
"model": ""
}
}
22 changes: 17 additions & 5 deletions profiles/claude.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
{
"name": "claude",

"model": "claude-sonnet-4-6",

"embedding": "openai"
}
"model": {
"provider": "anthropic",
"model": "claude-sonnet-4-6"
},
"embedding": {
"provider": "",
"model": ""
},
"code_model": {
"provider": "",
"model": ""
},
"vision_model": {
"provider": "",
"model": ""
}
}
18 changes: 14 additions & 4 deletions profiles/claude_thinker.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "claude_thinker",

"model": {
"provider": "anthropic",
"model": "claude-sonnet-4-6",
"params": {
"thinking": {
Expand All @@ -10,6 +10,16 @@
}
}
},

"embedding": "openai"
}
"embedding": {
"provider": "",
"model": ""
},
"code_model": {
"provider": "",
"model": ""
},
"vision_model": {
"provider": "",
"model": ""
}
}
25 changes: 25 additions & 0 deletions profiles/codex.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "codex",
"model": {
"provider": "codex",
"model": "gpt-5.5",
"params": {
"reasoning": {
"effort": "high",
"summary": "auto"
}
}
},
"embedding": {
"provider": "",
"model": ""
},
"code_model": {
"provider": "",
"model": ""
},
"vision_model": {
"provider": "",
"model": ""
}
}
22 changes: 17 additions & 5 deletions profiles/deepseek.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
{
"name": "deepseek",

"model": "deepseek-chat",

"embedding": "openai"
}
"model": {
"provider": "deepseek",
"model": "deepseek-v4-pro"
},
"embedding": {
"provider": "",
"model": ""
},
"code_model": {
"provider": "",
"model": ""
},
"vision_model": {
"provider": "",
"model": ""
}
}
Loading