dimensionalOS / dimensionalOS/dimos
Agentic Task Spec
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 4.5k
- Forks
- 808
- Avg merge
- 3d 5h
- Merged PRs (30d)
- 233
Description
-
I want to introduce a TaskManager and a Task class.
-
Task instances will be referenced by their UUID.
-
There will be a BaseTask from which custom tasks inherit.
-
I will keep returning strings from
@skill, but it should only be used for tools which return immediately. -
Everything else, will construct a task:
@skill
def start_exploration(self):
return self.start_task(ExploreTask())
-
Module.start_task will manage starting the task and give it the thread in which the task will run. The task will run in the same process as the module, but will communicate with the agent when it needs.
-
Module.start_task is needed because we will want to encode some logic in there like when a SpeakTask is started, it automatically cancels the previous ones. For some tasks it might be the other way around.
-
Task classes declare exclusive_capabilities. E.g. ExploreTask.exclusive_capabilities = ["locomotion"]. No other task can use "locomotion" while one ExploreTask is active. ExploreTask does not reserve "speak" capability because some other task can use it too. However, SpeakTask does reserve "speak" because there shouldn't be two active speak tasks.
-
Tasks should be able to update the agent by themselves in order to give the LLM a chance to intervene. For example. FollowTask can push the message "Lost track for person. trying to reacquire.". If the agent sees it too many times it might ask for a more specific descriptor.
-
The Task could expose tools by which it can be altered. There should obviously be a way to cancel. But also custom modification.
-
There should be a custom history management per task. Some task will only want to keep the latest message. Some will want everything, some only the last few.
-
The TaskManager will store the active Tasks (by UUID) and allow altering them.
-
Tasks will have states: running/stopped/errored/completed. Might add paused or some others.
-
Tasks should define how to handle conflicts of exclusive capablilities. The simplest would be to define
Task.cancel_on_exclusive = "new" # or "existing".SpeakTask will cancel the existing task, but Exploration will cancel the new task. It might make sense to have more complicated rules, maybe a lambda instead of a string. But that's better for later. The agent should be informed of whatever decision was taken. -
Tasks which have ended/completed/errored will be removed from the active tasks, but only after an agent invocation, giving the agent the chance to react to them.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by locating the Module and @skill entry points, then inspect how existing tools are started and tracked. The issue names TaskManager, Task, and BaseTask but provides no files or tests, so first define the intended task lifecycle, capability conflicts, agent updates, and history behavior with maintainers. Done would require an agreed design and corresponding implementation scope.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- ai
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100