AngusAI is an agent platform: connect a model you already have, and publish before you try the chat. Company documents, tools, and fixed procedures attach to the same agent. Publish first, then try it from AI Chat or Enter chat. An existing client uses the web app, an embed, or the OpenAI-compatible API, and all three use that same published code. The model is one you already buy or host. Documents, sessions, and outbound credentials stay on this install. The platform does not train models.
The main problems it solves
- An agent is built by editing config or writing code, so a non-technical person cannot finish it on a page. The wizard walks basic information, conversation settings, linked resources, and MCP on the page.
- The models, knowledge bases, tools, datasets, and workflows an agent uses sit in separate places, with no single place to manage them. Those resources are maintained on their own pages, then attached on Linked resources.
- Secrets sit in the prompt, and input and output have no limit for this agent. Outbound credentials go in the secret center. The agent keeps a reference. Input guardrails and output guardrails attach to this agent. The reasoning mode decides whether it only answers, or calls tools, or plans before it acts.
- Troubleshooting steps, everyday APIs, and fixed sequences live in personal scripts. A new agent starts by writing them again. Documents become a knowledge base. APIs become an API collection. A fixed sequence becomes a workflow or a procedure. An instruction for the model becomes a skill. Procedures and skills carry a version. The next agent attaches that version.
Note: It does not turn retrieval, orchestration, and auth into one switch that is already decided for you. Knowledge-base retrieval at runtime is vector search. The create form shows hybrid search, a reranker, and query rewrite. Those switches do not run today. The API key under Administration is not wired into chat auth. Chat uses a user token or a personal access token. Scans and screenshots are not turned into text. There is no built-in OCR. Live audio and video, image-only recognition, and millisecond inference with this orchestration layer removed are not this path.
What it includes
The first screen after sign-in is Overview. It is where you read app usage, recent activity, and the usual ways in.
Models. Chat and embeddings point at an endpoint connected here. Add a model by type under Models, and run a connection test. Chat uses a CHAT model. Knowledge-base vectors use an embedding model. The provider list is OpenAI, Anthropic, Tongyi Qianwen, Zhipu AI, DeepSeek, Google Gemini, Ollama, Moonshot Kimi, Baichuan, xAI Grok, OpenRouter, AWS Bedrock, Google Vertex AI, Cohere, and Other. There is no separate Mistral item. Other is an OpenAI-compatible endpoint, such as a vLLM you host. If an agent does not name a model for a task type, that type's default is used. A failed connection test means a later publish only attaches a name that is not connected.
Knowledge and vector stores. Creating a knowledge base starts by choosing a vector store. Uploads are text: TXT, PDF, DOCX, Markdown, HTML, JSON, XML, and YAML. A scan has to become text somewhere else first. Asking while processing is still running reads like the file was never there. Runtime recall is vector search, not the create-form options that are visible and not executed.
Agents. The sidebar entry is Agents, at /agents. The wizard has four steps: basic information, conversation settings, linked resources, and MCP. After Finish, the badge is Offline. Publish on the list turns it into Published. App setup, the OpenAI-compatible API, and chat all require Published. The list has no in-page trial chat and no clone. To try it, publish, make an app, then open Enter chat on the app or AI Chat in the sidebar.
The type is chosen under conversation settings. The default is General. Changing the type does not attach a prompt or resources for you.
| Type | Name in the console | What this choice decides |
|---|---|---|
general |
General | Questions, tools, and retrieval may all apply |
chat |
Chat | Few external resources |
rag |
Retrieval | The next step should attach a knowledge base. Without one, chat errors |
coding |
Coding | Read code with tools |
workflow |
Workflow | Attach one published workflow. Without it, chat errors |
The code is unique in the tenant. It starts with a letter and contains only letters, digits, underscores, and hyphens. The OpenAI-compatible model field matches this code exactly, not the display name. The code can be changed later. Clients that already stored the old model then get a 404.
At least one reasoning mode is required, and the default must be in the supported list. If none is set, the mode is Q&A.
| Value | Name in the console | When to use it |
|---|---|---|
ASK |
Q&A | Default. One turn, and it does not call tools on its own |
TOOL_CALL |
Tool call | Required when the agent should call tools, API collections, datasets, or procedures |
REACT |
ReAct (reason, act, observe) | Several think-do-look steps |
PLAN |
Plan then execute | Plan first |
REFLECT |
Reflect and revise | Check the draft after it is written |
Tools that are attached while the only mode is Q&A are often never called. Put Tool call in the supported list and make it the default, or switch it on the chat page.
The system prompt may be Markdown. Suggested questions appear on an empty session. A click sends that question. For a knowledge-base agent, the prompt can say: answer only from retrieved text, and say it cannot be found when there is no basis.
Advanced parameters left blank follow the model or the engine. The page states the order: request, then session, then the agent's advanced parameters, then the model default, then the system default.
Memory starts with episodic and semantic. Working and procedural can be added. The history window is how many recent messages go to the model. When a long chat gets worse, look at this window before rewriting the prompt. The detail page does not show memory. Change it in step two of the edit wizard.
Linked resources. Nothing on this step is required. Only published workflows are listed. Tools, procedures, and skills are listed only when enabled. Input and output guardrails must already be enabled, and the direction must match. A rag agent needs at least one knowledge base. A dataset is controlled SQL, not a license for the model to invent statements against the whole database. The lower half of the page can set enablement, a secret reference, and approval on a selected tool or procedure. Approval channels include the web, Slack, Feishu, DingTalk, and email. Leave them blank when you do not need them.
Workflows, procedures, and skills. A workflow canvas chains model calls, knowledge retrieval, tools, conditions, and loops. A schedule or a webhook can start it. An agent attaches only a published workflow. A procedure has a version. The engine runs the steps written in that version, in that order. A skill is a SKILL.md file: a name and a description, then the body. The model reads it when it needs the instruction. Draw the steps on the canvas when the order has to stay on the canvas. Use a procedure when the engine must follow the sequence you wrote. Use a skill when the model should open an instruction only when it needs it.
Tools and API collections. One HTTP call, a script, or a JavaBean is a tool. Scripts may be Groovy or JavaScript. An OpenAPI, Swagger, or Postman bundle is imported as an API collection. Built-in tools are a fixed catalog: retrieval, formatting, review and diff, design, time, text, artifacts, schema. A disabled tool cannot be selected as a linked resource.
Apps and chat. A person enters through an app: console chat, a share page, or an embed. Public shares use /app/share/.... A new agent app can select only a published agent. The app itself has to be published before AI Chat lists it. The web app, the embed, and the compatible API use the same code. If tools are attached, the chat page's reasoning mode has to be Tool call. The chat page can switch the mode for this turn, inside the supported list.
Activity. Activity records who changed the attachments and the settings. Messages are the inbox. Analytics is usage and latency trends. Monitor is sessions, messages, and feedback. Recent Activity on Overview opens those records.
Where it is used
On-call has to follow the troubleshooting steps in the repository, and those steps never reach the chat. Connect a chat model and an embedding model, and pass the connection test before you create a vector store. Create a knowledge base on that store, upload Markdown and PDFs that are already text, and wait until processing finishes. Set the type to retrieval, attach this knowledge base, and write a system prompt that says to admit it when nothing was retrieved. Publish the agent, make an app, publish the app, and ask in AI Chat. Asking while a document is still processing reads as if the file was never there. With no retrieved basis, stop at "not found". Do not fill in a procedure.
A release window needs the current state of one instance, and the chat cannot read the value the system has now. Import the existing OpenAPI bundle as an API collection. Leave the type general, put Tool call in the supported modes, make it the default, attach the collection, and publish. Ask a question that collection can answer. One call should show up. A single HTTP endpoint with no bundle belongs under Tools, not in an API collection. Publish without Tool call, and the chat often never makes that call.
A rollback has to confirm the person on call, then write the rollback record. The model must not swap that order. Draw both steps on a workflow and publish the workflow. Set the type to workflow. Linked resources can attach only that published workflow. Publish the agent, then the app. The chat follows that flow. An unpublished workflow does not appear in the picker.
The failure stack is in the pipeline log, and the function note is in the repository. The two do not meet. Choose the coding type, attach an enabled tool, and include Tool call. After publish, paste that stack into AI Chat. The list has no trial button. To see how it reads the note, use that chat, or Enter chat on the app card.
The cloud model endpoint cannot be used, and the session cannot leave this machine. Under Models, add the endpoint you already run. Ollama, or an OpenAI-compatible address under Other, both fit. Pass the connection test, then point the agent at it. Publishing after a failed test only hangs a name that is not connected. Documents, sessions, and outbound credentials stay on this install.
Existing clients already call an OpenAI-style URL, and the agent you just configured is not on that URL yet. Publish the agent on the list. The compatible
modelfield is the code. The web app, the embed, and that API use the same published code. To read an answer, open AI Chat after publish, or Enter chat on the app card. While the agent is still offline, a call with that code returns 404.
What is sharp about it
Finish the agent on the page. Pick the type in the wizard, and attach the knowledge base and the tools. General, Chat, Retrieval, Coding, and Workflow share this page. After a type change, attach the prompt and the resources again. A non-technical person finishes it in this wizard.
What this agent can do is on one page. The knowledge base, tools, guardrails, and prompt hang on this agent. The next person reads that attachment. Input guardrails and output guardrails follow this agent.
Chat and existing clients recognize it after publish. While it is offline, the app wizard and the compatible API both ignore it. After Publish, try it from AI Chat or Enter chat. The web app, the embed, and the compatible API use that same code.
Experience becomes something the next agent can attach. Troubleshooting notes go into a knowledge base. Everyday APIs go into an API collection. A sequence that must not be reordered goes into a workflow or a procedure. An instruction for the model goes into a skill. Procedures and skills carry a version. The next agent attaches that version.
The reasoning mode is how far it may go. With only Q&A, it does not call tools on its own. To call tools, or to plan before acting, put that mode in the supported list and make it the default. A knowledge-base answer with nothing retrieved says it cannot be found.
The model and the data stay where this install can reach them. Another provider, Ollama, or your own compatible address is another row under Models, plus a connection test. Secrets stay in the secret center. The agent keeps a reference. Documents and sessions stay on this install.
How you install it
This package installs AngusAI and the sign-in portal. Open the portal first, then this product. With Docker, the wizard defaults to Docker Compose. Without Docker, use the host ZIP. If the machine cannot reach the public network, use the offline install. The Kubernetes Helm chart is a preview. Do not treat it as a production install.
Production is Linux x86_64. macOS is fine for a trial. docker compose version must print a version. On macOS, run the wizard as the user you are logged in as. Do not prefix it with sudo. Docker Desktop cannot mount a directory root created. To use /opt/angus on Linux, give the directory to the current user first.
Port 80 must be free. Port 443 must be free if you will use HTTPS. 8801 and 8802 belong to the applications. The proxy forwards them. Do not publish them, and do not let another process bind them. gm.<your-domain> and ai.<your-domain> must resolve to this machine. The machine must reach https://repo.anguskit.com. Download the package from raw-public there. The unpacked directory is AngusAI-1.0.0.
unzip <package>.zip
cd AngusAI-1.0.0
./install.sh
On Windows, with Docker Desktop, run .\install.bat in that directory. The wizard prompts are in English.
| Prompt | What you enter | What it decides |
|---|---|---|
Install mode |
Press Enter | Docker Compose. If Docker is missing, do not change this option. Use the host ZIP |
Access |
Type 2
|
The bundled reverse proxy and subdomains. Enter stays on option 1, which is access by port |
| Reverse proxy | Press Enter | Caddy. Let's Encrypt can be configured only with Caddy. On Nginx the HTTP choice is 3, and there is no 4
|
| Certificate | Type a number. There is no default |
1 is your PEM, 2 is a self-signed certificate from the package, 3 is Let's Encrypt, 4 is HTTP only |
| Database | Press Enter | Compose starts MySQL 8 on this machine. An existing database is a later choice |
| Install directory | Press Enter | The unpacked directory, which becomes $ANGUS_HOME
|
| Apex domain | An apex such as example.com
|
Builds the hostnames. gm.example.com becomes gm.gm.example.com. An IP address or localhost stops the wizard |
The administrator password must be at least 8 characters. Write it down outside the wizard. Do not keep the public default database password the wizard offers. The data directory takes that password only the first time it is created. Changing angus.env or docker/.env later, without changing the password already stored in the database, makes the applications fail to connect. If the install was unattended and no administrator password was set, change it in the portal profile immediately. The default string is not printed here.
Certificates 1, 2, or 3 open https://gm.<your-domain>/, then https://ai.<your-domain>/. Certificate 4 opens both with http:// on port 80. Do not write :443. A self-signed certificate makes the browser warn. That is the certificate type, not a portal that failed to start. On the current package, Let's Encrypt still requests certificates for all seven product hostnames, even when this machine only has this product and the portal. Those seven names must resolve here, or use a wildcard certificate. HTTP only, certificate 4, does not request them.
Success is two lines at the end of the log: doctor: OK and Install finished. The log is $ANGUS_HOME/logs/install.log. Check again with ./bin/angusctl.sh doctor in the install directory.
MCP
There is no separate MCP page in the docs. The entry is step four of the agent wizard, MCP. If you do not need it, click Finish.
stdio needs a name and a start command. http or sse needs a name and a URL. Auth references the secret center. Do not put the secret in the prompt. stdio injects the environment variable MCP_CREDENTIAL. http and sse inject Authorization.
The server side is off by default. Turn it on and pick at least one transport, http or sse. Auth modes none and api-key take effect. The form shows oauth2 and mtls. The page says they are not supported yet.
This step connects the agent to an external MCP, or exposes this agent as an MCP server. It does not replace Publish. With the server side on, the agent still has to be published before an app can select it.
SDK
Install the official REST SDK from the AngusRepo public repositories. The version is 1.0.0. The Java artifact is angus-ai-sdk, package cloud.xcan.angus.sdk.ai. npm is @anguskit/angus-ai-sdk. PyPI is angus-ai-sdk. The Go module is github.com/anguskit/angus-sdk-ai. There is no official NuGet package.
The header is Authorization: Bearer <access_token>. Create the token under personal settings, access tokens, and select this app. The sample reads ANGUS_ACCESS_TOKEN. Do not put the API key from the Administration menu in that header. That key is not wired into chat auth. Chat and the compatible API use a user token or a personal access token, with the permission that call requires. A public share sends no token.
The gateway base URL is https://bj-c1-prod-apis.anguskit.com/ai. The prefix is /api/v1/**, and /pubapi/v1/** is optional. /innerapi is not in the official SDK. The smoke call is GET /api/v1/agents/type-presets. Listing workflows is GET /api/v1/workflows. Fields follow the OpenAPI document in the API reference.
The SDK does not publish for you. While the agent is offline, the compatible API returns 404 for that code. Tools stay on the agent. The SDK request does not declare tools.
FAQ
Does it train a model?
No. Chat and embeddings call the model you connected. There is no training and no fine-tune.
The app wizard cannot see the agent I just created.
It is still offline. Publish it on the agent list. After the badge says Published, the app can select it. The compatible model field is the code, not the display name.
The chat never calls a tool.
Tool call is missing from the supported modes, or the default is still Q&A. A disabled tool, or a tool that was never linked, does the same. An API collection and a single HTTP tool are different objects. The wrong menu means nothing was attached.
Where do I sign in?
Open gm.<your-domain>, then ai.<your-domain>. HTTP or HTTPS follows the certificate number from install. Do not use 8802 as the public entry.
Can a scanned PDF go straight into a knowledge base?
No. There is no built-in OCR. Turn it into text first.
Can the SDK replace Publish in the console?
No. The SDK calls /api/v1. Publish is an action on the list. An unpublished agent is not a usable model for an app or for the compatible API.


Top comments (0)