# Staff

1. Agents with different roles such as CEO, CTO, Product Manager, Tech Lead, Frontend Engineer, Backend Engineer, QA, Growth Haker, Go-To-Market specialist, Marketer, etc.
2. Integration with different LLMs, each agent could be backed by different llms and models.
3. Detailed Company docs to store all the decisions made.
4. Ability for the agent to get the relevant context from the docs or code.
5. Integration with Task Management system like Github Projects, Asana, Jira, etc. This will be the source of truth of what should be done. Agents will be assigned tasks. And agents will be able to create and assign tasks to different agents
6. When agent picks up a task after finishing it creates PR. PR could be in coding repos, or in the repo were company stores docs. PR will be review by the human, Agent will make suggested changes and update the PR. Only after human approval the PR will be merged and task will be consitered as done.
7. Other Reviewer agnets could be assigned to the PRs as well.
8. Company has the managing manual, were all the rules are written, including for example what was written in 6.
9. Agent can propose a change in the managing manual and update rules. For example mark some type of tasks as automatic(no need of human approval)
10. Optimize system prompts and context engineering in General upon human feedback(on PRs or by chatting).
11. Every agent fetches tasks from task management system and creates PRs. Optimization, retrospective, manual update etc are all tasks as well, which will be tracked in the system.