| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Community Apps Dependencies | Show |
| Lines of code | 20324 |
| Technical Name |
muk_ai_skills |
| License | LGPL-3 |
| Website | http://www.mukit.at |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Community Apps Dependencies | Show |
| Lines of code | 20324 |
| Technical Name |
muk_ai_skills |
| License | LGPL-3 |
| Website | http://www.mukit.at |
MuK AI Skills
Pre-built Agent Skills, One Slash Command Away
MuK IT GmbH - www.mukit.at
Overview
MuK AI Skills adds DB-backed
skill records that bundle a name, a one-line
description for LLM discovery, a markdown body of
instructions, and optional file attachments. Visible
skills show up in a system-prompt addendum so the
agent can pick one autonomously, and users can fire
them directly with /<name> in chat.
Plugs into muk_ai via _inherit
only — no fork.
Manage Skills
Each skill carries a technical name, label,
description, markdown body and an attachment list.
Body edits are versioned via the reusable
muk_ai.revision.mixin from
muk_ai; the History stat button rolls
back to any prior revision.
Slash Command in Chat
Type / in the composer to merge built-in
commands with the skills visible to this session.
/quote_followup records a synthetic
tool_call+tool_result pair
so the LLM picks up on the next turn as if it had
called the skill itself — one path, both
audiences (LLM and user).
Resources by URI
Attached files come back as a manifest with
odoo://attachment/<id> URIs. The
agent fetches what it needs via
muk_mcp's generic
read_resource — large playbooks,
PDFs, CSVs ride along without bloating the body or
every conversation.
Want more?
Are you having troubles with your Odoo integration? Or do you feel
your system lacks of essential features?
If your answer is YES
to one of the above questions, feel free to contact us at anytime
with your inquiry.
MuK AI Skills
Pre-built agent skills your users (or the LLM itself) can switch into. A skill is a DB-backed record bundling a name, a one-line description for LLM discovery, a markdown body of instructions, and optional file attachments. Visible skills are listed in a system-prompt addendum so the agent can pick one autonomously, and users can invoke them directly in chat with a /<name> slash command.
This addon plugs into muk_ai's session runtime via _inherit only — no fork of muk_ai or muk_mcp source.
Installation
To install this module, you need to:
Download the module and add it to your Odoo addons folder. Afterward, log on to your Odoo server and go to the Apps menu. Trigger the debug mode and update the list by clicking on the "Update Apps List" link. Now install the module by clicking on the install button. Requires muk_ai and muk_mcp.
Upgrade
To upgrade this module, you need to:
Download the module and add it to your Odoo addons folder. Restart the server and log on to your Odoo server. Select the Apps menu and upgrade the module by clicking on the upgrade button.
What's in the box
- muk_ai.skill model — name, label, description, markdown body, attached resources (ir.attachment), agent scoping (specific agents or global), prompt revision history via the reusable muk_ai.revision.mixin from muk_ai.
- invoke_skill MCP tool — agent-callable, returns the skill body plus a resource manifest with uri entries the agent can fetch via muk_mcp's generic read_resource.
- System-prompt addendum — every visible skill is listed by technical name + one-line description inside an <available_skills> block appended to the agent's system prompt.
- Slash command in chat — typing /<skill_name> in the composer fires the skill directly, mirroring the same invoke_skill flow the LLM uses but without an LLM round-trip.
- Manage menu link — MuK AI > Skills (and /odoo/ai-skills).
Building a skill
Open MuK AI > Skills and create a record:
- Technical Name — lowercase identifier matching [a-z][a-z0-9_]*, used for the /name slash command and in the LLM-facing addendum (e.g. quote_followup, lead_brief, summarize_thread).
- Label — human-readable name shown in lists, the chat menu, and the manage view. Optional; falls back to a title-cased version of the technical name.
- Description — one-line description shown to the LLM in the system-prompt addendum. The LLM uses this to decide when to invoke the skill autonomously.
- Body — markdown instructions returned when the skill is invoked. Treated as additional system-prompt content the agent should follow for the duration of the task. Edited with the same code widget as agent system prompts.
- Resources — attached files. Each one becomes a manifest entry with a stable odoo://attachment/<id> URI; the agent fetches the bytes by passing that URI to read_resource.
- Agents — leave empty to make the skill global, or pick one or more agents to scope visibility. Sessions only see skills whose agent scope matches (or skills with no scope).
- Active / Sequence — standard Odoo flags; sequence drives the order in the addendum and the slash-command popover.
Body edits snapshot the prior value into the skill's prompt_history JSON column. The History stat button on the skill form opens a side-by-side dialog listing every prior revision with author and timestamp; restoring rolls back to that revision.
Agent invocation
When a session starts, muk_ai_skills walks the visible-skill set for the session's agent and appends an <available_skills> block to the system prompt. If the agent calls invoke_skill(skill_name='quote_followup'), the tool returns:
{ "name": "quote_followup", "label": "Quote Follow-up", "body": "## Steps\n1. Look up the sale.order by ref or domain…", "resources": [ { "name": "tone_guide.md", "uri": "odoo://attachment/42", "mimetype": "text/markdown" } ] }
The agent treats the body as fresh instructions and reads any of the listed resources via read_resource(uri='odoo://attachment/42') — no new tool needed for that, the URI handler is in muk_mcp.
User invocation
Type / in the composer to open the slash-command popover. Built-in commands (/help, /clear, /compact, /unpin) are merged with the visible skills for the session. Picking /quote_followup (or typing it and hitting Enter) calls invoke_skill_from_chat on the session, which:
- Records a tool_call and matching tool_result in the session event log (so the chat shows the skill invocation as a normal tool card with the skill body and manifest as the result).
- Extends the underlying conversation with a synthetic function_call + function_call_output pair, so on the next model turn the agent sees the skill body as if it had called invoke_skill. The model then proceeds with whatever the skill instructs.
Skills outside the session's agent scope are not listed and not invocable, even by exact name.
Scoping
- Leave Agents empty on a skill to make it visible to every session (global skill).
- Pick one or more agents to restrict the skill to those agents only. A session with no agent_id only sees global skills.
- The visibility filter is applied in both directions: the addendum the LLM sees, and the invoke_skill permission check.
Credits
Contributors
- Mathias Markl <mathias.markl@mukit.at>
Author & Maintainer
This module is maintained by the MuK IT GmbH.
MuK IT is an Austrian company specialized in customizing and extending Odoo. We develop custom solutions for your individual needs to help you focus on your strength and expertise to grow your business.
If you want to get in touch please contact us via mail (sale@mukit.at) or visit our website (https://mukit.at).
Please log in to comment on this module