related to this: is there a low- or no-code method...
# proj-agent-canvas
f
related to this: is there a low- or no-code method of implementing the 4 roles in the software factory pattern which appears to be hard-coded for github?
m
Yes, the software-factory is just for github for instance
but we plan to extend to more git providers
l
Yeah, and specifically the way you could do this is tell the agent: “please implement a software factory for me, but do it for forgejo”. It will read the github instructions, but probably be able to adapt it for forgejo. Please tell me how it goes. If it goes well we’d definitely be happy to have a contribution of the automations that it creates to the OpenHands/extensions repo. If it doesn’t go well we’d be happy to help make it go better
Good question and we may need to improve the software here. If you enter a secret the agent will be provided with the secret and be able to use it, but is there any specific functionality that you’d like it to be able to use that it’s not able to at the moment
f
Looking at the tarballs for the extensions and the low-level python code (none of which I understand of course), it definitely did not occur to me to simply instruct the chat to re-implement the pattern.
l
Cool, tell me if it works!
f
i don't have software projects or issues set up yet, but it looks like it tried to do the right thing.
🙌 1
forgejo_software_factory_report.pdf
🙌 1
Prompt entered: "are you able to create a set of custom automations (tarballs) that re-implement the 4 roles of the software factory pattern, but targets a locally hosted forgejo instance instead of github?" I was literally expecting something like "Yes, I can do that! blah blah blah ..." No idea if it works, but that is impressive work and documentation of what was created, which, again, seems to be the right stuff.
l
Awesome, excited to see it working 🚀
f
For others seeing this thread, and FWIW, my setup is ghcr.io/openhands/agent-canvas:latest running on Mac Studio M5 Max 64GB, along with qwen3.6-35b-a3b via LM Studio. Web UI on a Mac Mini M4 16GB.
I was off researching how to enable the automations that it created, and I just happened to look at the dashboard and saw that everything was powered up and humming along. So yeah, I guess it works, but again, I don't have any real repos or issues in place yet.
Ok, so I created an issue, and added the "openhands" label, Triage ran and added a comment to the issue. But then Issue-to-PR did not run. Any hints? update: Triage keeps adding the same comment to the issue every time it runs, so I removed the label and closed the issue. Smells like the state not updating?
Triage Summary for #3
Category: docs
Suggested labels: enhancement, documentation
Key points:
We need to update the readme file to include another secret message at the end of the file
The secret message is " tomorrow is november 3rd, be sure and vote
" any changes to the file must be made on a new branch, and a pull request must be generated against the main branch in order to merge back the file change
Triaged by Forgejo Issue Triage station.
c
You could ask the agent to debug?
f
suggest a prompt for me?
c
"The issue-to-PR automation didn't run when I added openhands label to the issue. Why not? Find it and investigate"
🙏 1
f
i'm using qwen3-coder-30b-a3b-instruct-mlx and it's slow af. it's not the model tho, it responds instantly using the LM studio chat interactively. Looking at the LM studio logs, it seems like agent canvas is pushing 16k worth of context every single turn. Also, agent canvas says "Thinking" for like 30 seconds, but the coder model doesn't even support reasoning (yes the MoE model does, but I don't know the magic incantations to turn it off). So why does the "Thinking" bubble show while the system stalls for 30-60 seconds? Back on topic: i wrote a more detailed prompt than that, asking for root cause without making code changes, Numerous corrective prompts were required to fix invalid conclusions and wrong assumptions. End result was this:
Copy code
Current State Analysis
Root Cause: One or more Forgejo API calls in the automation scripts silently fail during state transitions.
Specific Issue:
Triage runs successfully (posts comment) but fails to properly remove "openhands" label
This causes continuous triage loop
Issue-to-PR never executes because trigger condition isn't properly cleared
Why it happens:
Forgejo API operations (label removal, issue body updates) return success but don't actually complete the operation in your specific environment.
Behavioral Proof:
The exact pattern you described - triage working but issue-to-PR not executing at all, with continuous looping.
Simple Answer: The automation scripts have runtime failures in specific Forgejo environments that prevent proper state transitions.

Root Cause - Specific Modules and Lines
Module 1: forgejo-issue-triage/main.py
Line 337: remove_label(owner, repo, issue_num, TRIGGER_LABEL)
Line 352: forgejo_api("PATCH", f"/api/v1/repos/{owner}/{repo}/issues/{issue_num}", {"body": new_body})
Module 2: forgejo-issue-to-pr/main.py
Line 261: create_branch(owner, repo, default_branch, branch_name)
Line 272-281: create_commit() operations
Line 291: create_pull_request()
Specific Issue:
The remove_label() call in triage (line 337) and the issue body PATCH operation (line 352) are most likely to silently fail in your Forgejo environment, causing the state transition failure that creates the infinite loop behavior.
What is meant by "in your Forgejo environment" and " in specific Forgejo environments" and "in your specific environment" here? Prior testing (hi chat, go process the issue on the test3 repo) verified the system works with forgejo, read an issue, and followed the issue instructions to modify a README on a branch and create a PR against it for human approval/merge. I'm just a noob, so a lot of this is obtuse and opaque to me. I would appreciate if someone knowledgable could repro with forgejo 17 and fix the 4 automations. Also would like advice on how to improve performance.
Here is a zip with the 4 forgejo-specific automations for the factory pattern, that the aforementioned prompt created, based on the github-specific ones that shipped with agent canvas.